394cf1dc083693e9be84fe805a68b027a142a20b
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2001 Hiroyuki Yamamoto
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <gtk/gtk.h>
28 #include <gdk/gdkkeysyms.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <unistd.h>
33 #include <sys/types.h>
34 #include <sys/stat.h>
35
36 #include "intl.h"
37 #include "main.h"
38 #include "prefs.h"
39 #include "prefs_common.h"
40 #include "prefs_display_header.h"
41 #include "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
45 #include "inc.h"
46 #include "menu.h"
47 #include "codeconv.h"
48 #include "utils.h"
49 #include "gtkutils.h"
50 #include "alertpanel.h"
51 #include "folder.h"
52 #include "filesel.h"
53 #include "folderview.h"
54
55 #if USE_PSPELL
56 #include "gtkspell.h"
57 #endif
58
59 PrefsCommon prefs_common;
60
61 static PrefsDialog dialog;
62
63 static struct Receive {
64         GtkWidget *checkbtn_incext;
65         GtkWidget *entry_incext;
66         GtkWidget *button_incext;
67
68         GtkWidget *checkbtn_local;
69         GtkWidget *checkbtn_filter_on_inc;
70         GtkWidget *entry_spool;
71
72         GtkWidget *checkbtn_autochk;
73         GtkWidget *spinbtn_autochk;
74         GtkObject *spinbtn_autochk_adj;
75
76         GtkWidget *checkbtn_chkonstartup;
77         GtkWidget *checkbtn_noerrorpanel;
78         GtkWidget *checkbtn_scan_after_inc;
79
80
81         GtkWidget *spinbtn_maxarticle;
82         GtkObject *spinbtn_maxarticle_adj;
83 } receive;
84
85 static struct Send {
86         GtkWidget *checkbtn_extsend;
87         GtkWidget *entry_extsend;
88         GtkWidget *button_extsend;
89
90         GtkWidget *checkbtn_savemsg;
91         GtkWidget *checkbtn_queuemsg;
92
93         GtkWidget *optmenu_charset;
94         
95         GtkWidget *checkbtn_returnreceipt;
96 } send;
97
98 static struct Compose {
99         GtkWidget *checkbtn_quote;
100         GtkWidget *entry_quotemark;
101         GtkWidget *text_quotefmt;
102         GtkWidget *checkbtn_autosig;
103         GtkWidget *entry_sigsep;
104
105         GtkWidget *entry_fw_quotemark;
106         GtkWidget *text_fw_quotefmt;
107
108         GtkWidget *checkbtn_autoextedit;
109         GtkWidget *checkbtn_reply_account_autosel;
110         GtkWidget *checkbtn_forward_account_autosel;
111         GtkWidget *checkbtn_reedit_account_autosel;
112
113         GtkWidget *spinbtn_linewrap;
114         GtkObject *spinbtn_linewrap_adj;
115         GtkWidget *checkbtn_wrapquote;
116         GtkWidget *checkbtn_wrapatsend;
117
118         GtkWidget * checkbtn_forward_as_attachment;
119         GtkWidget * checkbtn_smart_wrapping;
120
121         /* spelling */
122 #if USE_PSPELL
123         GtkWidget *checkbtn_enable_pspell;
124         GtkWidget *entry_pspell_path;
125         GtkWidget *btn_pspell_path;
126         GtkWidget *optmenu_dictionary;
127 #endif
128
129 } compose;
130
131 static struct Display {
132         GtkWidget *entry_textfont;
133         GtkWidget *button_textfont;
134
135         GtkWidget *entry_smallfont;
136         GtkWidget *entry_normalfont;
137         GtkWidget *entry_boldfont;
138
139         GtkWidget *chkbtn_folder_unread;
140
141         GtkWidget *chkbtn_transhdr;
142
143         GtkWidget *chkbtn_swapfrom;
144         GtkWidget *chkbtn_hscrollbar;
145         GtkWidget *chkbtn_useaddrbook;
146         GtkWidget *chkbtn_expand_thread;
147         GtkWidget *chkbtn_bold_unread;
148
149         GtkWidget *entry_datefmt;
150 } display;
151
152 static struct Message {
153         GtkWidget *chkbtn_enablecol;
154         GtkWidget *button_edit_col;
155         GtkWidget *chkbtn_mbalnum;
156         GtkWidget *chkbtn_disphdrpane;
157         GtkWidget *chkbtn_disphdr;
158         GtkWidget *spinbtn_linespc;
159         GtkObject *spinbtn_linespc_adj;
160         GtkWidget *chkbtn_headspc;
161
162         GtkWidget *chkbtn_smoothscroll;
163         GtkWidget *spinbtn_scrollstep;
164         GtkObject *spinbtn_scrollstep_adj;
165         GtkWidget *chkbtn_halfpage;
166 } message;
167
168 #if USE_GPGME
169 static struct Privacy {
170         GtkWidget *checkbtn_default_encrypt;
171         GtkWidget *checkbtn_default_sign;
172         GtkWidget *checkbtn_auto_check_signatures;
173         GtkWidget *checkbtn_gpg_signature_popup;
174         GtkWidget *checkbtn_passphrase_grab;
175         GtkWidget *checkbtn_gpg_warning;
176         GtkWidget *optmenu_default_signkey;
177 } privacy;
178 #endif
179
180 static struct Interface {
181         /* GtkWidget *checkbtn_emacs; */
182         GtkWidget *checkbtn_openunread;
183         GtkWidget *checkbtn_openinbox;
184         GtkWidget *checkbtn_immedexec;
185         GtkWidget *checkbtn_confonexit;
186         GtkWidget *checkbtn_cleanonexit;
187         GtkWidget *checkbtn_askonclean;
188         GtkWidget *checkbtn_warnqueued;
189         GtkWidget *checkbtn_addaddrbyclick;
190         GtkWidget *optmenu_recvdialog;
191         GtkWidget *optmenu_nextunreadmsgdialog;
192 } interface;
193
194 static struct Other {
195         GtkWidget *uri_combo;
196         GtkWidget *uri_entry;
197         GtkWidget *printcmd_entry;
198         GtkWidget *exteditor_combo;
199         GtkWidget *exteditor_entry;
200 } other;
201
202 static struct MessageColorButtons {
203         GtkWidget *quote_level1_btn;
204         GtkWidget *quote_level2_btn;
205         GtkWidget *quote_level3_btn;
206         GtkWidget *uri_btn;
207         GtkWidget *tgt_folder_btn;
208 } color_buttons;
209
210 static GtkWidget *quote_desc_win;
211 static GtkWidget *font_sel_win;
212 static guint font_sel_conn_id; 
213 static GtkWidget *quote_color_win;
214 static GtkWidget *color_dialog;
215
216 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
217 static void prefs_common_charset_set_optmenu          (PrefParam *pparam);
218 #if USE_GPGME
219 static void prefs_common_default_signkey_set_data_from_optmenu
220                                                         (PrefParam *pparam);
221 static void prefs_common_default_signkey_set_optmenu    (PrefParam *pparam);
222 #endif
223 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
224 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
225 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
226 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
227
228 #if USE_PSPELL
229 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
230 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
231 #endif
232
233
234 /*
235    parameter name, default value, pointer to the prefs variable, data type,
236    pointer to the widget pointer,
237    pointer to the function for data setting,
238    pointer to the function for widget setting
239  */
240
241 static PrefParam param[] = {
242         /* Receive */
243         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
244          &receive.checkbtn_incext,
245          prefs_set_data_from_toggle, prefs_set_toggle},
246         {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
247          &receive.entry_incext,
248          prefs_set_data_from_entry, prefs_set_entry},
249
250         {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
251          &receive.checkbtn_local,
252          prefs_set_data_from_toggle, prefs_set_toggle},
253         {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
254          &receive.checkbtn_filter_on_inc,
255          prefs_set_data_from_toggle, prefs_set_toggle},
256         {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
257          &receive.entry_spool,
258          prefs_set_data_from_entry, prefs_set_entry},
259
260         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
261          &receive.checkbtn_autochk,
262          prefs_set_data_from_toggle, prefs_set_toggle},
263         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
264          &receive.spinbtn_autochk,
265          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
266         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
267          &receive.checkbtn_chkonstartup,
268          prefs_set_data_from_toggle, prefs_set_toggle},
269         {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
270          &receive.checkbtn_noerrorpanel,
271          prefs_set_data_from_toggle, prefs_set_toggle},
272         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
273          P_BOOL, &receive.checkbtn_scan_after_inc,
274          prefs_set_data_from_toggle, prefs_set_toggle},
275         {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
276          &receive.spinbtn_maxarticle,
277          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
278
279         /* Send */
280         {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
281          &send.checkbtn_extsend,
282          prefs_set_data_from_toggle, prefs_set_toggle},
283         {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
284          &prefs_common.extsend_cmd, P_STRING,
285          &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
286         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
287          &send.checkbtn_savemsg,
288          prefs_set_data_from_toggle, prefs_set_toggle},
289         {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
290          &send.checkbtn_queuemsg,
291          prefs_set_data_from_toggle, prefs_set_toggle},
292
293         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
294          &send.optmenu_charset,
295          prefs_common_charset_set_data_from_optmenu,
296          prefs_common_charset_set_optmenu},
297
298         /* Compose */
299         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
300          &compose.checkbtn_quote,
301          prefs_set_data_from_toggle, prefs_set_toggle},
302         {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
303          &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
304         {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
305
306          &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
307          prefs_set_data_from_text, prefs_set_text},
308         {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
309          &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
310         {"fw_quote_format", "----------  Forwarded message ----------\\n?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n%Q",
311          &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
312          prefs_set_data_from_text, prefs_set_text},
313
314         {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
315          &compose.checkbtn_autosig,
316          prefs_set_data_from_toggle, prefs_set_toggle},
317         {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
318          &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
319
320         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
321          &compose.checkbtn_autoextedit,
322          prefs_set_data_from_toggle, prefs_set_toggle},
323         {"reply_account_autoselect", "TRUE",
324          &prefs_common.reply_account_autosel, P_BOOL,
325          &compose.checkbtn_reply_account_autosel,
326          prefs_set_data_from_toggle, prefs_set_toggle},
327        {"forward_account_autoselect", "TRUE",
328          &prefs_common.forward_account_autosel, P_BOOL,
329          &compose.checkbtn_forward_account_autosel,
330          prefs_set_data_from_toggle, prefs_set_toggle},
331        {"reedit_account_autoselect", "TRUE",
332          &prefs_common.reedit_account_autosel, P_BOOL,
333          &compose.checkbtn_reedit_account_autosel,
334          prefs_set_data_from_toggle, prefs_set_toggle},
335
336         {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
337          &compose.spinbtn_linewrap,
338          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
339         {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
340          &compose.checkbtn_wrapquote,
341          prefs_set_data_from_toggle, prefs_set_toggle},
342         {"linewrap_before_sending", "FALSE",
343          &prefs_common.linewrap_at_send, P_BOOL,
344          &compose.checkbtn_wrapatsend,
345          prefs_set_data_from_toggle, prefs_set_toggle},
346         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
347          P_BOOL, &compose.checkbtn_forward_as_attachment,
348          prefs_set_data_from_toggle, prefs_set_toggle},
349         {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
350          P_BOOL, &compose.checkbtn_smart_wrapping,
351          prefs_set_data_from_toggle, prefs_set_toggle},
352 #if USE_PSPELL
353         {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
354          P_BOOL, &compose.checkbtn_enable_pspell,
355          prefs_set_data_from_toggle, prefs_set_toggle},
356         {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path, 
357          P_STRING, &compose.entry_pspell_path, 
358          prefs_set_data_from_entry, prefs_set_entry},
359         {"dictionary",  "", &prefs_common.dictionary,
360          P_STRING, &compose.optmenu_dictionary, 
361          prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
362 #endif
363         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
364          NULL, NULL, NULL},
365
366         /* Display */
367         {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
368          NULL, NULL, NULL},
369         {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
370          &prefs_common.textfont, P_STRING,
371          &display.entry_textfont,
372          prefs_set_data_from_entry, prefs_set_entry},
373         {"small_font",   "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
374          &prefs_common.smallfont,   P_STRING,
375          &display.entry_smallfont,
376          prefs_set_data_from_entry, prefs_set_entry},
377         {"bold_font",    "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
378          &prefs_common.boldfont,    P_STRING,
379          &display.entry_boldfont,
380          prefs_set_data_from_entry, prefs_set_entry},
381         {"normal_font",  "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
382          &prefs_common.normalfont,  P_STRING,
383          &display.entry_normalfont, 
384          prefs_set_data_from_entry, prefs_set_entry},
385
386
387         {"display_folder_unread_num", "TRUE",
388          &prefs_common.display_folder_unread, P_BOOL,
389          &display.chkbtn_folder_unread,
390          prefs_set_data_from_toggle, prefs_set_toggle},
391
392         {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
393          &display.chkbtn_transhdr,
394          prefs_set_data_from_toggle, prefs_set_toggle},
395
396         /* Display: Summary View */
397         {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
398          &display.chkbtn_swapfrom,
399          prefs_set_data_from_toggle, prefs_set_toggle},
400         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
401          &display.chkbtn_hscrollbar,
402          prefs_set_data_from_toggle, prefs_set_toggle},
403         {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
404          &display.chkbtn_useaddrbook,
405          prefs_set_data_from_toggle, prefs_set_toggle},
406         {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
407          P_STRING, &display.entry_datefmt,
408          prefs_set_data_from_entry, prefs_set_entry},
409         {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
410          &display.chkbtn_expand_thread,
411          prefs_set_data_from_toggle, prefs_set_toggle},
412         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
413          &display.chkbtn_bold_unread,
414          prefs_set_data_from_toggle, prefs_set_toggle},
415
416         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
417          NULL, NULL, NULL},
418         
419         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
420          NULL, NULL, NULL},
421         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
422          NULL, NULL, NULL},
423
424         {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
425          NULL, NULL, NULL},
426         {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
427          NULL, NULL, NULL},
428         {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
429          NULL, NULL, NULL},
430         {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
431          NULL, NULL, NULL},
432         {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
433          NULL, NULL, NULL},
434         {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
435          NULL, NULL, NULL},
436         {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
437          NULL, NULL, NULL},
438         {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
439          NULL, NULL, NULL},
440         {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
441          NULL, NULL, NULL},
442
443         /* Widget size */
444         {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
445          NULL, NULL, NULL},
446         {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
447          NULL, NULL, NULL},
448         {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
449          NULL, NULL, NULL},
450         {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
451          NULL, NULL, NULL},
452         {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
453          NULL, NULL, NULL},
454         {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
455          NULL, NULL, NULL},
456         {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
457          NULL, NULL, NULL},
458         {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
459          NULL, NULL, NULL},
460         {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
461          NULL, NULL, NULL},
462         {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
463          NULL, NULL, NULL},
464         {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
465          NULL, NULL, NULL},
466         {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
467          NULL, NULL, NULL},
468         {"summary_col_score", "40", &prefs_common.summary_col_score,
469          P_INT, NULL, NULL, NULL},
470         {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
471          NULL, NULL, NULL},
472         {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
473          NULL, NULL, NULL},
474         {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
475          NULL, NULL, NULL},
476         {"summary_col_subject", "200", &prefs_common.summary_col_subject,
477          P_INT, NULL, NULL, NULL},
478         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
479          NULL, NULL, NULL},
480         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
481          NULL, NULL, NULL},
482         {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
483          NULL, NULL, NULL},
484         {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
485          NULL, NULL, NULL},
486         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
487          NULL, NULL, NULL},
488         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
489          NULL, NULL, NULL},
490         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
491          NULL, NULL, NULL},
492         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
493          NULL, NULL, NULL},
494         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
495          NULL, NULL, NULL},
496         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
497          NULL, NULL, NULL},
498         {"compose_width", "600", &prefs_common.compose_width, P_INT,
499          NULL, NULL, NULL},
500         {"compose_height", "560", &prefs_common.compose_height, P_INT,
501          NULL, NULL, NULL},
502
503         /* Message */
504         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
505          &message.chkbtn_enablecol,
506          prefs_set_data_from_toggle, prefs_set_toggle},
507
508         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
509          NULL, NULL, NULL},
510         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
511          NULL, NULL, NULL},
512         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
513          NULL, NULL, NULL},
514         {"uri_color", "32512", &prefs_common.uri_col, P_INT,
515          NULL, NULL, NULL},
516         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
517          NULL, NULL, NULL},
518         {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
519          NULL, NULL, NULL},
520         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
521          P_BOOL, NULL, NULL, NULL},
522
523         {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
524          &message.chkbtn_mbalnum,
525          prefs_set_data_from_toggle, prefs_set_toggle},
526         {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
527          P_BOOL, &message.chkbtn_disphdrpane,
528          prefs_set_data_from_toggle, prefs_set_toggle},
529         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
530          &message.chkbtn_disphdr,
531          prefs_set_data_from_toggle, prefs_set_toggle},
532         {"line_space", "2", &prefs_common.line_space, P_INT,
533          &message.spinbtn_linespc,
534          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
535         {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
536          &message.chkbtn_headspc,
537          prefs_set_data_from_toggle, prefs_set_toggle},
538
539         {"enable_smooth_scroll", "FALSE",
540          &prefs_common.enable_smooth_scroll, P_BOOL,
541          &message.chkbtn_smoothscroll,
542          prefs_set_data_from_toggle, prefs_set_toggle},
543         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
544          &message.spinbtn_scrollstep,
545          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
546         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
547          &message.chkbtn_halfpage,
548          prefs_set_data_from_toggle, prefs_set_toggle},
549
550         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
551          NULL, NULL, NULL},
552
553         /* MIME viewer */
554         {"mime_image_viewer", "display '%s'",
555          &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
556         {"mime_audio_player", "play '%s'",
557          &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
558
559 #if USE_GPGME
560         /* Privacy */
561         {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
562          &privacy.checkbtn_default_encrypt,
563          prefs_set_data_from_toggle, prefs_set_toggle},
564         {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
565          &privacy.checkbtn_default_sign,
566          prefs_set_data_from_toggle, prefs_set_toggle},
567         {"auto_check_signatures", "TRUE",
568          &prefs_common.auto_check_signatures, P_BOOL,
569          &privacy.checkbtn_auto_check_signatures,
570          prefs_set_data_from_toggle, prefs_set_toggle},
571         {"gpg_signature_popup", "FALSE",
572          &prefs_common.gpg_signature_popup, P_BOOL,
573          &privacy.checkbtn_gpg_signature_popup,
574          prefs_set_data_from_toggle, prefs_set_toggle},
575 #ifndef __MINGW32__
576         {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
577          &privacy.checkbtn_passphrase_grab,
578          prefs_set_data_from_toggle, prefs_set_toggle},
579 #endif /* __MINGW32__ */
580         {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
581          &privacy.checkbtn_gpg_warning,
582          prefs_set_data_from_toggle, prefs_set_toggle},
583         {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
584          &privacy.optmenu_default_signkey,
585          prefs_common_default_signkey_set_data_from_optmenu,
586          prefs_common_default_signkey_set_optmenu},
587 #endif /* USE_GPGME */
588
589         /* Interface */
590         {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
591          NULL, NULL, NULL},
592         {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
593          NULL, NULL, NULL},
594
595         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
596          NULL, NULL, NULL}, */
597
598         {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
599          P_BOOL, &interface.checkbtn_openunread,
600          prefs_set_data_from_toggle, prefs_set_toggle},
601         {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
602          P_BOOL, &interface.checkbtn_openinbox,
603          prefs_set_data_from_toggle, prefs_set_toggle},
604         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
605          &interface.checkbtn_immedexec,
606          prefs_set_data_from_toggle, prefs_set_toggle},
607         {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
608          &interface.optmenu_recvdialog,
609          prefs_common_recv_dialog_set_data_from_optmenu,
610          prefs_common_recv_dialog_set_optmenu},
611         {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
612          &interface.optmenu_nextunreadmsgdialog,
613          prefs_nextunreadmsgdialog_set_data_from_optmenu,
614          prefs_nextunreadmsgdialog_set_optmenu},
615
616         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
617          P_BOOL, &interface.checkbtn_addaddrbyclick,
618          prefs_set_data_from_toggle, prefs_set_toggle},
619         {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
620          &interface.checkbtn_confonexit,
621          prefs_set_data_from_toggle, prefs_set_toggle},
622         {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
623          &send.checkbtn_returnreceipt,
624          prefs_set_data_from_toggle, prefs_set_toggle},
625         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
626          &interface.checkbtn_cleanonexit,
627          prefs_set_data_from_toggle, prefs_set_toggle},
628         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
629          &interface.checkbtn_askonclean,
630          prefs_set_data_from_toggle, prefs_set_toggle},
631         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
632          P_BOOL, &interface.checkbtn_warnqueued,
633          prefs_set_data_from_toggle, prefs_set_toggle},
634
635         /* Other */
636         {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
637          &prefs_common.uri_cmd, P_STRING,
638          &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
639         {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
640          &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
641         {"ext_editor_command", "gedit %s",
642          &prefs_common.ext_editor_cmd, P_STRING,
643          &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
644
645         {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
646          NULL, NULL, NULL},
647         {"important_score", "1", &prefs_common.important_score, P_INT,
648          NULL, NULL, NULL},
649
650         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
651 };
652
653 /* widget creating functions */
654 static void prefs_common_create         (void);
655 static void prefs_receive_create        (void);
656 static void prefs_send_create           (void);
657 static void prefs_compose_create        (void);
658 static void prefs_display_create        (void);
659 static void prefs_message_create        (void);
660 #if USE_GPGME
661 static void prefs_privacy_create        (void);
662 #endif
663 static void prefs_interface_create      (void);
664 static void prefs_other_create          (void);
665
666 static void date_format_ok_btn_clicked          (GtkButton      *button,
667                                                  GtkWidget     **widget);
668 static void date_format_cancel_btn_clicked      (GtkButton      *button,
669                                                  GtkWidget     **widget);
670 static void date_format_key_pressed             (GtkWidget      *keywidget,
671                                                  GdkEventKey    *event,
672                                                  GtkWidget     **widget);
673 static gboolean date_format_on_delete           (GtkWidget      *dialogwidget,
674                                                  GdkEventAny    *event,
675                                                  GtkWidget     **widget);
676 static void date_format_entry_on_change         (GtkEditable    *editable,
677                                                  GtkLabel       *example);
678 static void date_format_select_row              (GtkWidget      *date_format_list,
679                                                  gint            row,
680                                                  gint            column,
681                                                  GdkEventButton *event,
682                                                  GtkWidget      *date_format);
683 static GtkWidget *date_format_create            (GtkButton      *button,
684                                                  void           *data);
685
686 static void prefs_quote_description             (void);
687 static void prefs_quote_description_create      (void);
688 static void prefs_quote_colors_dialog           (void);
689 static void prefs_quote_colors_dialog_create    (void);
690 static void prefs_quote_colors_key_pressed      (GtkWidget      *widget,
691                                                  GdkEventKey    *event,
692                                                  gpointer        data);
693 static void quote_color_set_dialog              (GtkWidget      *widget,
694                                                  gpointer        data);
695 static void quote_colors_set_dialog_ok          (GtkWidget      *widget,
696                                                  gpointer        data);
697 static void quote_colors_set_dialog_cancel      (GtkWidget      *widget,
698                                                  gpointer        data);
699 static void quote_colors_set_dialog_key_pressed (GtkWidget      *widget,
700                                                  GdkEventKey    *event,
701                                                  gpointer        data);
702 static void set_button_bg_color                 (GtkWidget      *widget,
703                                                  gint            color);
704 static void prefs_enable_message_color_toggled  (void);
705 static void prefs_recycle_colors_toggled        (GtkWidget      *widget);
706
707 /* functions for setting items of SummaryView */
708 static void prefs_summary_display_item_dialog_create
709                                         (gboolean       *cancelled);
710 static void display_item_ok             (GtkWidget      *widget,
711                                          gboolean       *cancelled);
712 static void display_item_cancel         (GtkWidget      *widget,
713                                          gboolean       *cancelled);
714 static gint display_item_delete_event   (GtkWidget      *widget,
715                                          GdkEventAny    *event,
716                                          gboolean       *cancelled);
717 static void display_item_key_pressed    (GtkWidget      *widget,
718                                          GdkEventKey    *event,
719                                          gboolean       *cancelled);
720
721 static void prefs_font_select   (GtkButton *button, GtkEntry *entry);
722
723 static void prefs_font_selection_key_pressed    (GtkWidget      *widget,
724                                                  GdkEventKey    *event,
725                                                  gpointer        data);
726 static void prefs_font_selection_ok             (GtkButton      *button, GtkEntry *entry);
727
728 static gint prefs_common_deleted        (GtkWidget      *widget,
729                                          GdkEventAny    *event,
730                                          gpointer        data);
731 static void prefs_common_key_pressed    (GtkWidget      *widget,
732                                          GdkEventKey    *event,
733                                          gpointer        data);
734 static void prefs_common_ok             (void);
735 static void prefs_common_apply          (void);
736 static void prefs_common_cancel         (void);
737
738 static void compose_prefs_fmt_open(void);
739 static void compose_prefs_fmt_create(void);
740
741 void prefs_common_read_config(void)
742 {
743         prefs_read_config(param, "Common", COMMON_RC);
744 }
745
746 void prefs_common_save_config(void)
747 {
748         prefs_save_config(param, "Common", COMMON_RC);
749 }
750
751 void prefs_common_open(void)
752 {
753         if (prefs_rc_is_readonly(COMMON_RC))
754                 return;
755
756         inc_lock();
757
758         if (!dialog.window) {
759                 prefs_common_create();
760         }
761
762         manage_window_set_transient(GTK_WINDOW(dialog.window));
763         gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
764         gtk_widget_grab_focus(dialog.ok_btn);
765
766         prefs_set_dialog(param);
767
768         gtk_widget_show(dialog.window);
769 }
770
771 static void prefs_common_create(void)
772 {
773         gint page = 0;
774
775         debug_print(_("Creating common preferences window...\n"));
776
777         prefs_dialog_create(&dialog);
778         gtk_window_set_title (GTK_WINDOW(dialog.window),
779                               _("Common Preferences"));
780         gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
781                             GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
782         gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
783                             GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
784         gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
785                             GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
786         gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
787                             GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
788         gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
789                             GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
790         gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
791                             GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
792         gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
793                                    GTK_SIGNAL_FUNC(prefs_common_cancel),
794                                    GTK_OBJECT(dialog.window));
795
796         /* create all widgets on notebook */
797         prefs_receive_create();
798         SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"),   page++);
799         prefs_send_create();
800         SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"),      page++);
801         prefs_compose_create();
802         SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"),   page++);
803         prefs_display_create();
804         SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"),   page++);
805         prefs_message_create();
806         SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"),   page++);
807 #if USE_GPGME
808         prefs_privacy_create();
809         SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"),   page++);
810 #endif
811         prefs_interface_create();
812         SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
813         prefs_other_create();
814         SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"),     page++);
815
816         compose_prefs_fmt_create();
817
818         gtk_widget_show_all(dialog.window);
819 }
820
821 static void prefs_receive_create(void)
822 {
823         GtkWidget *vbox1;
824         GtkWidget *vbox2;
825         GtkWidget *frame_incext;
826         GtkWidget *checkbtn_incext;
827         GtkWidget *hbox;
828         GtkWidget *label_incext;
829         GtkWidget *entry_incext;
830         /* GtkWidget *button_incext; */
831
832         GtkWidget *frame_spool;
833         GtkWidget *checkbtn_local;
834         GtkWidget *checkbtn_filter_on_inc;
835         GtkWidget *label_spool;
836         GtkWidget *entry_spool;
837
838         GtkWidget *hbox_autochk;
839         GtkWidget *checkbtn_autochk;
840         GtkWidget *label_autochk1;
841         GtkObject *spinbtn_autochk_adj;
842         GtkWidget *spinbtn_autochk;
843         GtkWidget *label_autochk2;
844         GtkWidget *checkbtn_chkonstartup;
845         GtkWidget *checkbtn_noerrorpanel;
846         GtkWidget *checkbtn_scan_after_inc;
847
848
849         GtkWidget *frame_news;
850         GtkWidget *label_maxarticle;
851         GtkWidget *spinbtn_maxarticle;
852         GtkObject *spinbtn_maxarticle_adj;
853
854         vbox1 = gtk_vbox_new (FALSE, VSPACING);
855         gtk_widget_show (vbox1);
856         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
857         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
858
859         PACK_FRAME(vbox1, frame_incext, _("External program"));
860
861         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
862         gtk_widget_show (vbox2);
863         gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
864         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
865
866         /* Use of external incorporation program */
867         PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
868                            _("Use external program for incorporation"));
869
870         hbox = gtk_hbox_new (FALSE, 8);
871         gtk_widget_show (hbox);
872         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
873         SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
874
875         label_incext = gtk_label_new (_("Program path"));
876         gtk_widget_show (label_incext);
877         gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
878
879         entry_incext = gtk_entry_new ();
880         gtk_widget_show (entry_incext);
881         gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
882 #if 0
883         button_incext = gtk_button_new_with_label ("... ");
884         gtk_widget_show (button_incext);
885         gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
886 #endif
887         PACK_FRAME(vbox1, frame_spool, _("Local spool"));
888
889         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
890         gtk_widget_show (vbox2);
891         gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
892         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
893
894         hbox = gtk_hbox_new (FALSE, 32);
895         gtk_widget_show (hbox);
896         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
897
898         PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
899         PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
900                            _("Filter on incorporation"));
901         SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
902
903         hbox = gtk_hbox_new (FALSE, 8);
904         gtk_widget_show (hbox);
905         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
906         SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
907
908         label_spool = gtk_label_new (_("Spool directory"));
909         gtk_widget_show (label_spool);
910         gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
911
912         entry_spool = gtk_entry_new ();
913         gtk_widget_show (entry_spool);
914         gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
915
916         vbox2 = gtk_vbox_new (FALSE, 0);
917         gtk_widget_show (vbox2);
918         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
919
920         /* Auto-checking */
921         hbox_autochk = gtk_hbox_new (FALSE, 8);
922         gtk_widget_show (hbox_autochk);
923         gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
924
925         PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
926                            _("Auto-check new mail"));
927
928         label_autochk1 = gtk_label_new (_("each"));
929         gtk_widget_show (label_autochk1);
930         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
931
932         spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
933         spinbtn_autochk = gtk_spin_button_new
934                 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
935         gtk_widget_show (spinbtn_autochk);
936         gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
937         gtk_widget_set_usize (spinbtn_autochk, 64, -1);
938         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
939
940         label_autochk2 = gtk_label_new (_("minute(s)"));
941         gtk_widget_show (label_autochk2);
942         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
943
944         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
945         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
946         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
947
948         PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
949                            _("Check new mail on startup"));
950
951         PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
952                            _("No error popup on receive error"));
953         PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
954                            _("Update all local folders after incorporation"));
955
956
957         PACK_FRAME(vbox1, frame_news, _("News"));
958
959         hbox = gtk_hbox_new (FALSE, 8);
960         gtk_widget_show (hbox);
961         gtk_container_add (GTK_CONTAINER (frame_news), hbox);
962         gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
963
964         label_maxarticle = gtk_label_new
965                 (_("Maximum article number to download\n"
966                    "(unlimited if 0 is specified)"));
967         gtk_widget_show (label_maxarticle);
968         gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
969         gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
970
971         spinbtn_maxarticle_adj =
972                 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
973         spinbtn_maxarticle = gtk_spin_button_new
974                 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
975         gtk_widget_show (spinbtn_maxarticle);
976         gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
977                             FALSE, FALSE, 0);
978         gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
979         gtk_spin_button_set_numeric
980                 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
981
982         receive.checkbtn_incext = checkbtn_incext;
983         receive.entry_incext    = entry_incext;
984         /* receive.button_incext   = button_incext; */
985
986         receive.checkbtn_local         = checkbtn_local;
987         receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
988         receive.entry_spool            = entry_spool;
989
990         receive.checkbtn_autochk    = checkbtn_autochk;
991         receive.spinbtn_autochk     = spinbtn_autochk;
992         receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
993
994         receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
995         receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
996         receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
997
998
999         receive.spinbtn_maxarticle     = spinbtn_maxarticle;
1000         receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1001 }
1002
1003 static void prefs_send_create(void)
1004 {
1005         GtkWidget *vbox1;
1006         GtkWidget *vbox2;
1007         GtkWidget *frame_extsend;
1008         GtkWidget *vbox_extsend;
1009         GtkWidget *checkbtn_extsend;
1010         GtkWidget *hbox1;
1011         GtkWidget *label_extsend;
1012         GtkWidget *entry_extsend;
1013         /* GtkWidget *button_extsend; */
1014         GtkWidget *checkbtn_savemsg;
1015         GtkWidget *checkbtn_queuemsg;
1016         GtkWidget *label_outcharset;
1017         GtkWidget *optmenu;
1018         GtkWidget *optmenu_menu;
1019         GtkWidget *menuitem;
1020         GtkWidget *checkbtn_returnreceipt;
1021
1022         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1023         gtk_widget_show (vbox1);
1024         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1025         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1026
1027         PACK_FRAME(vbox1, frame_extsend, _("External program"));
1028
1029         vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1030         gtk_widget_show (vbox_extsend);
1031         gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1032         gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1033
1034         PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1035                            _("Use external program for sending"));
1036
1037         hbox1 = gtk_hbox_new (FALSE, 8);
1038         gtk_widget_show (hbox1);
1039         gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1040         SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1041
1042         label_extsend = gtk_label_new (_("Program path"));
1043         gtk_widget_show (label_extsend);
1044         gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1045
1046         entry_extsend = gtk_entry_new ();
1047         gtk_widget_show (entry_extsend);
1048         gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1049
1050 #if 0
1051         button_extsend = gtk_button_new_with_label ("... ");
1052         gtk_widget_show (button_extsend);
1053         gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1054 #endif
1055
1056         vbox2 = gtk_vbox_new (FALSE, 0);
1057         gtk_widget_show (vbox2);
1058         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1059
1060         PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1061                            _("Save sent messages to outbox"));
1062         PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1063                            _("Queue messages that fail to send"));
1064         PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1065                            _("Send return receipt on request"));
1066
1067         hbox1 = gtk_hbox_new (FALSE, 8);
1068         gtk_widget_show (hbox1);
1069         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1070
1071         label_outcharset = gtk_label_new (_("Outgoing codeset"));
1072         gtk_widget_show (label_outcharset);
1073         gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1074
1075         optmenu = gtk_option_menu_new ();
1076         gtk_widget_show (optmenu);
1077         gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1078
1079         optmenu_menu = gtk_menu_new ();
1080
1081 #define SET_MENUITEM(str, charset) \
1082 { \
1083         MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1084 }
1085
1086         SET_MENUITEM(_("Automatic (Recommended)"),       CS_AUTO);
1087         SET_MENUITEM(_("7bit ascii (US-ASCII)"),         CS_US_ASCII);
1088 #if HAVE_LIBJCONV
1089         SET_MENUITEM(_("Unicode (UTF-8)"),               CS_UTF_8);
1090 #endif
1091         SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1092         SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1093         SET_MENUITEM(_("Baltic (ISO-8859-13)"),          CS_ISO_8859_13);
1094         SET_MENUITEM(_("Baltic (ISO-8859-4)"),           CS_ISO_8859_4);
1095         SET_MENUITEM(_("Greek (ISO-8859-7)"),            CS_ISO_8859_7);
1096         SET_MENUITEM(_("Turkish (ISO-8859-9)"),          CS_ISO_8859_9);
1097 #if HAVE_LIBJCONV
1098         SET_MENUITEM(_("Cyrillic (ISO-8859-5)"),         CS_ISO_8859_5);
1099 #endif
1100         SET_MENUITEM(_("Cyrillic (KOI8-R)"),             CS_KOI8_R);
1101 #if HAVE_LIBJCONV
1102         SET_MENUITEM(_("Cyrillic (Windows-1251)"),       CS_CP1251);
1103         SET_MENUITEM(_("Cyrillic (KOI8-U)"),             CS_KOI8_U);
1104 #endif
1105         SET_MENUITEM(_("Japanese (ISO-2022-JP)"),        CS_ISO_2022_JP);
1106 #if 0
1107         SET_MENUITEM(_("Japanese (EUC-JP)"),             CS_EUC_JP);
1108         SET_MENUITEM(_("Japanese (Shift_JIS)"),          CS_SHIFT_JIS);
1109 #endif /* 0 */
1110         SET_MENUITEM(_("Simplified Chinese (GB2312)"),   CS_GB2312);
1111         SET_MENUITEM(_("Traditional Chinese (Big5)"),    CS_BIG5);
1112 #if 0
1113         SET_MENUITEM(_("Traditional Chinese (EUC-TW)"),  CS_EUC_TW);
1114         SET_MENUITEM(_("Chinese (ISO-2022-CN)"),         CS_ISO_2022_CN);
1115 #endif /* 0 */
1116         SET_MENUITEM(_("Korean (EUC-KR)"),               CS_EUC_KR);
1117
1118         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1119
1120         send.checkbtn_extsend = checkbtn_extsend;
1121         send.entry_extsend    = entry_extsend;
1122         /* send.button_extsend   = button_extsend; */
1123
1124         send.checkbtn_savemsg  = checkbtn_savemsg;
1125         send.checkbtn_queuemsg = checkbtn_queuemsg;
1126         send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1127
1128         send.optmenu_charset = optmenu;
1129 }
1130
1131 #if USE_PSPELL
1132 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1133 {
1134         gchar *str;
1135         gchar *dict_name;
1136         
1137         g_return_if_fail(param);
1138         g_return_if_fail(param->data);
1139         g_return_if_fail(param->widget);
1140         g_return_if_fail(*(param->widget));
1141
1142         dict_name = gtkpspell_get_dictionary_menu_active_item
1143                 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1144         str = *((gchar **) param->data);
1145         if (str)
1146                 g_free(str);
1147         *((gchar **) param->data) = dict_name;
1148 }
1149
1150 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1151 {
1152         GList *cur;
1153         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1154         GtkWidget *menu;
1155         GtkWidget *menuitem;
1156         gchar *dict_name;
1157         gint n = 0;
1158
1159         g_return_if_fail(optmenu != NULL);
1160         g_return_if_fail(pparam->data != NULL);
1161
1162         if (*(gchar **) pparam->data) {
1163                 menu = gtk_option_menu_get_menu(optmenu);
1164                 for (cur = GTK_MENU_SHELL(menu)->children;
1165                      cur != NULL; cur = cur->next) {
1166                         menuitem = GTK_WIDGET(cur->data);
1167                         dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1168                         if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1169                                 gtk_option_menu_set_history(optmenu, n);
1170                                 return;
1171                         }
1172                         n++;
1173                 }
1174         }               
1175
1176         gtk_option_menu_set_history(optmenu, 0);
1177         prefs_dictionary_set_data_from_optmenu(pparam);
1178 }
1179
1180 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1181         (GtkWidget *widget,
1182          gpointer data)
1183 {
1184         gboolean toggled;
1185
1186         toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1187         gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1188         gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1189         gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1190 }
1191
1192 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1193                                                      gpointer data)
1194 {
1195         gchar *file_path, *tmp;
1196         GtkWidget *new_menu;
1197
1198         file_path = filesel_select_file(_("Select dictionaries location"),
1199                                         prefs_common.pspell_path);
1200         if (file_path == NULL) {
1201                 /* don't change */      
1202         }
1203         else {
1204           tmp=g_dirname(file_path);
1205           
1206                 if (prefs_common.pspell_path)
1207                         g_free(prefs_common.pspell_path);
1208                 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1209
1210                 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1211                 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1212                                          new_menu);
1213
1214                 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);                                      
1215                 /* select first one */
1216                 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1217                 
1218                 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1219                                 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1220                 g_free(tmp);
1221         
1222
1223         }
1224 }
1225 #endif
1226
1227 static void prefs_compose_create(void)
1228 {
1229         GtkWidget *vbox1;
1230         GtkWidget *vbox2;
1231         GtkWidget *vbox3;
1232
1233         /*
1234         GtkWidget *frame_quote;
1235         GtkWidget *vbox_quote;
1236         GtkWidget *checkbtn_quote;
1237         GtkWidget *hbox1;
1238         GtkWidget *label_quotemark;
1239         GtkWidget *entry_quotemark;
1240         GtkWidget *hbox2;
1241         GtkWidget *label_quotefmt;
1242         GtkWidget *btn_quotedesc;
1243         GtkWidget *scrolledwin_quotefmt;
1244         GtkWidget *text_quotefmt;
1245 */
1246
1247         GtkWidget *hbox1;
1248         GtkWidget *hbox2;
1249         GtkWidget *btn_quotefmt;
1250
1251         GtkWidget *frame_sig;
1252         GtkWidget *vbox_sig;
1253         GtkWidget *checkbtn_autosig;
1254         GtkWidget *label_sigsep;
1255         GtkWidget *entry_sigsep;
1256
1257         GtkWidget *frame_autosel;
1258         GtkWidget *hbox_autosel;
1259         GtkWidget *vbox_autosel;
1260         GtkWidget *checkbtn_reply_account_autosel;
1261         GtkWidget *checkbtn_forward_account_autosel;
1262         GtkWidget *checkbtn_reedit_account_autosel;
1263
1264         GtkWidget *checkbtn_autoextedit;
1265
1266         GtkWidget *vbox_linewrap;
1267
1268         GtkWidget *hbox3;
1269         GtkWidget *hbox4;
1270         GtkWidget *hbox5;
1271         GtkWidget *label_linewrap;
1272         GtkObject *spinbtn_linewrap_adj;
1273         GtkWidget *spinbtn_linewrap;
1274         GtkWidget *checkbtn_wrapquote;
1275         GtkWidget *checkbtn_wrapatsend;
1276
1277         GtkWidget *checkbtn_forward_as_attachment;
1278         GtkWidget *checkbtn_smart_wrapping;
1279
1280 #if USE_PSPELL
1281         GtkWidget *frame_spell;
1282         GtkWidget *hbox_spell;
1283         GtkWidget *vbox_spell;
1284         GtkWidget *hbox_pspell_path;
1285         GtkWidget *checkbtn_enable_pspell;
1286         GtkWidget *label_pspell_path;
1287         GtkWidget *entry_pspell_path;
1288         GtkWidget *btn_pspell_path;
1289         GtkWidget *hbox_dictionary;
1290         GtkWidget *label_dictionary;
1291         GtkWidget *optmenu_dictionary;
1292 #endif
1293         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1294         gtk_widget_show (vbox1);
1295         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1296         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1297
1298         /*
1299         PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1300
1301         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1302         gtk_widget_show (vbox_quote);
1303         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1304         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1305
1306         hbox1 = gtk_hbox_new (FALSE, 32);
1307         gtk_widget_show (hbox1);
1308         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1309
1310         hbox2 = gtk_hbox_new (FALSE, 8);
1311         gtk_widget_show (hbox2);
1312         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1313
1314         label_quotemark = gtk_label_new (_("Quotation mark"));
1315         gtk_widget_show (label_quotemark);
1316         gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1317
1318         entry_quotemark = gtk_entry_new ();
1319         gtk_widget_show (entry_quotemark);
1320         gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1321         gtk_widget_set_usize (entry_quotemark, 64, -1);
1322
1323         PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1324                            _("Quote message when replying"));
1325
1326         hbox2 = gtk_hbox_new (FALSE, 0);
1327         gtk_widget_show (hbox2);
1328         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1329
1330         label_quotefmt = gtk_label_new (_("Quotation format:"));
1331         gtk_widget_show (label_quotefmt);
1332         gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1333
1334         btn_quotedesc =
1335                 gtk_button_new_with_label (_(" Description of symbols "));
1336
1337         gtk_widget_show (btn_quotedesc);
1338         gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1339         gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1340                            GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1341
1342
1343         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1344         gtk_widget_show (scrolledwin_quotefmt);
1345         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1346         gtk_scrolled_window_set_policy
1347                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1348                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1349
1350         text_quotefmt = gtk_text_new (NULL, NULL);
1351         gtk_widget_show (text_quotefmt);
1352         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1353         gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1354         gtk_widget_set_usize(text_quotefmt, -1, 60);
1355         */
1356
1357         hbox1 = gtk_hbox_new (FALSE, 32);
1358         gtk_widget_show (hbox1);
1359         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1360
1361         btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1362         gtk_widget_show (btn_quotefmt);
1363         gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1364         gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1365                            GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1366
1367         PACK_FRAME(vbox1, frame_sig, _("Signature"));
1368
1369         vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1370         gtk_widget_show (vbox_sig);
1371         gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1372         gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1373
1374         PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1375                            _("Insert signature automatically"));
1376
1377         hbox1 = gtk_hbox_new (FALSE, 8);
1378         gtk_widget_show (hbox1);
1379         gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1380         label_sigsep = gtk_label_new (_("Signature separator"));
1381         gtk_widget_show (label_sigsep);
1382         gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1383
1384         entry_sigsep = gtk_entry_new ();
1385         gtk_widget_show (entry_sigsep);
1386         gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1387
1388         gtk_widget_set_usize (entry_sigsep, 64, -1);
1389
1390         /* Automatic (Smart) Account Selection */
1391         PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1392
1393         hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1394         gtk_widget_show (hbox_autosel);
1395         gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1396         gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1397
1398         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1399                            _("when replying"));
1400         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1401                            _("when forwarding"));
1402         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1403                            _("when re-editing"));
1404
1405         vbox2 = gtk_vbox_new (FALSE, 0);
1406         gtk_widget_show (vbox2);
1407         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1408
1409         PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1410                            _("Automatically launch the external editor"));
1411
1412         PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1413
1414         /* line-wrapping */
1415         vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1416         gtk_widget_show (vbox_linewrap);
1417         gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1418
1419         hbox3 = gtk_hbox_new (FALSE, 8);
1420         gtk_widget_show (hbox3);
1421         gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1422
1423
1424         label_linewrap = gtk_label_new (_("Wrap messages at"));
1425         gtk_widget_show (label_linewrap);
1426         gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1427
1428         spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1429         spinbtn_linewrap = gtk_spin_button_new
1430                 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1431         gtk_widget_show (spinbtn_linewrap);
1432         gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1433         gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1434         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1435
1436         label_linewrap = gtk_label_new (_("characters"));
1437         gtk_widget_show (label_linewrap);
1438         gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1439
1440         PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1441
1442         hbox4 = gtk_hbox_new (FALSE, 32);
1443         gtk_widget_show (hbox4);
1444         gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1445
1446         PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1447         PACK_CHECK_BUTTON
1448                 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1449
1450         PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1451                            _("Forward as attachment"));
1452
1453         PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1454                            _("Smart wrapping (EXPERIMENTAL)"));
1455
1456 #if USE_PSPELL
1457         /* spell checker defaults */                       
1458         PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1459         vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1460         gtk_widget_show (vbox_spell);
1461         gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1462         gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1463
1464         PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell, 
1465                           _("Enable spell checker (EXPERIMENTAL)"));
1466
1467         gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1468                            GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1469                            NULL);
1470
1471         hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1472         gtk_widget_show(hbox_pspell_path);
1473         gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1474
1475         label_pspell_path = gtk_label_new (_("Dictionaries path"));
1476         gtk_widget_show(label_pspell_path);
1477         gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1478         
1479         entry_pspell_path = gtk_entry_new();
1480         gtk_widget_show(entry_pspell_path);
1481         gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1482         gtk_widget_set_usize(entry_pspell_path, 150, -1);
1483         gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1484
1485         btn_pspell_path = gtk_button_new_with_label(_("..."));
1486         gtk_widget_show(btn_pspell_path);
1487         gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1488         gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1489
1490         gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked", 
1491                            GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1492                            NULL);
1493
1494         hbox_dictionary = gtk_hbox_new(FALSE, 8);
1495         gtk_widget_show(hbox_dictionary);
1496         gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1497
1498         label_dictionary = gtk_label_new(_("Dictionary"));
1499         gtk_widget_show(label_dictionary);
1500         gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1501
1502         optmenu_dictionary = gtk_option_menu_new();
1503         gtk_widget_show(optmenu_dictionary);
1504         gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary), 
1505                                  gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1506         gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1507         gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1508 #endif
1509
1510        /*
1511         compose.checkbtn_quote   = checkbtn_quote;
1512         compose.entry_quotemark  = entry_quotemark;
1513         compose.text_quotefmt    = text_quotefmt;
1514         */
1515         compose.checkbtn_autosig = checkbtn_autosig;
1516         compose.entry_sigsep     = entry_sigsep;
1517
1518         compose.checkbtn_autoextedit = checkbtn_autoextedit;
1519         compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1520         compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1521         compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1522
1523         compose.spinbtn_linewrap     = spinbtn_linewrap;
1524         compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1525         compose.checkbtn_wrapquote   = checkbtn_wrapquote;
1526         compose.checkbtn_wrapatsend  = checkbtn_wrapatsend;
1527
1528         compose.checkbtn_forward_as_attachment =
1529                 checkbtn_forward_as_attachment;
1530         compose.checkbtn_smart_wrapping = 
1531                 checkbtn_smart_wrapping;
1532
1533 #if USE_PSPELL
1534         compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1535         compose.entry_pspell_path      = entry_pspell_path;
1536         compose.btn_pspell_path        = btn_pspell_path;
1537         compose.optmenu_dictionary     = optmenu_dictionary;
1538 #endif
1539 }
1540
1541 static void prefs_display_create(void)
1542 {
1543         GtkWidget *vbox1;
1544         GtkWidget *frame_font;
1545         GtkWidget *table1;
1546         GtkWidget *label_textfont;
1547         GtkWidget *entry_textfont;
1548         GtkWidget *button_textfont;
1549         GtkWidget *chkbtn_folder_unread;
1550         GtkWidget *chkbtn_transhdr;
1551         GtkWidget *frame_summary;
1552         GtkWidget *vbox2;
1553         GtkWidget *chkbtn_swapfrom;
1554         GtkWidget *chkbtn_hscrollbar;
1555         GtkWidget *chkbtn_useaddrbook;
1556         GtkWidget *chkbtn_expand_thread;
1557         GtkWidget *chkbtn_bold_unread;
1558         GtkWidget *vbox3;
1559         GtkWidget *hbox1;
1560         GtkWidget *label_datefmt;
1561         GtkWidget *button_datefmt;
1562         GtkWidget *entry_datefmt;
1563         GtkWidget *button_dispitem;
1564         GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1565
1566         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1567         gtk_widget_show (vbox1);
1568         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1569         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1570
1571         PACK_FRAME(vbox1, frame_font, _("Font"));
1572
1573         table1 = gtk_table_new (4, 3, FALSE);
1574
1575         gtk_widget_show (table1);
1576         gtk_container_add (GTK_CONTAINER (frame_font), table1);
1577         gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1578         gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1579         gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1580
1581         label_textfont = gtk_label_new (_("Text"));
1582         gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1583         gtk_widget_show (label_textfont);
1584         gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1585                           GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1586
1587         entry_textfont = gtk_entry_new ();
1588         gtk_widget_show (entry_textfont);
1589         gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1590                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1591
1592         button_textfont = gtk_button_new_with_label ("... ");
1593
1594         gtk_widget_show (button_textfont);
1595         gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1596                           0, 0, 0, 0);
1597         gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1598                             GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1599
1600         tmplabel = gtk_label_new (_("Small"));
1601         gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1602         gtk_widget_show (tmplabel);
1603         gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1604                           GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1605
1606         tmpentry = gtk_entry_new ();
1607         gtk_widget_show (tmpentry);
1608         gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1609                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1610
1611         tmpbutton = gtk_button_new_with_label (" ... ");
1612         gtk_widget_show (tmpbutton);
1613         gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1614                           0, 0, 0, 0);
1615         gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1616                             GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1617         display.entry_smallfont = tmpentry;                       
1618
1619         tmplabel = gtk_label_new (_("Normal"));
1620         gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1621         gtk_widget_show (tmplabel);
1622         gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1623                           GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1624
1625         tmpentry = gtk_entry_new ();
1626         gtk_widget_show (tmpentry);
1627         gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1628                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1629
1630         tmpbutton = gtk_button_new_with_label (" ... ");
1631         gtk_widget_show (tmpbutton);
1632         gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1633                           0, 0, 0, 0);
1634         gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1635                                 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1636         display.entry_normalfont = tmpentry;                      
1637
1638         tmplabel = gtk_label_new (_("Bold"));
1639         gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1640         gtk_widget_show (tmplabel);
1641         gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1642                           GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1643
1644         tmpentry = gtk_entry_new ();
1645         gtk_widget_show (tmpentry);
1646         gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1647                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1648
1649         tmpbutton = gtk_button_new_with_label (" ... ");
1650         gtk_widget_show (tmpbutton);
1651         gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1652                           0, 0, 0, 0);
1653         gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1654                                 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1655         display.entry_boldfont = tmpentry;
1656
1657         vbox2 = gtk_vbox_new (FALSE, 0);
1658         gtk_widget_show (vbox2);
1659         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1660
1661         PACK_CHECK_BUTTON
1662                 (vbox2, chkbtn_transhdr,
1663                  _("Translate header name (such as `From:', `Subject:')"));
1664
1665         PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1666                            _("Display unread number next to folder name"));
1667
1668         /* ---- Summary ---- */
1669
1670         PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1671
1672         vbox2 = gtk_vbox_new (FALSE, 0);
1673         gtk_widget_show (vbox2);
1674         gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1675         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1676
1677         PACK_CHECK_BUTTON
1678                 (vbox2, chkbtn_swapfrom,
1679                  _("Display recipient on `From' column if sender is yourself"));
1680         PACK_CHECK_BUTTON
1681                 (vbox2, chkbtn_useaddrbook,
1682                  _("Display sender using address book"));
1683         PACK_CHECK_BUTTON
1684                 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1685         PACK_CHECK_BUTTON
1686                 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1687         PACK_CHECK_BUTTON
1688                 (vbox2, chkbtn_bold_unread,
1689                  _("Display unread messages with bold font"));
1690
1691         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1692
1693         hbox1 = gtk_hbox_new (FALSE, 8);
1694         gtk_widget_show (hbox1);
1695         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1696
1697         label_datefmt = gtk_label_new (_("Date format"));
1698         gtk_widget_show (label_datefmt);
1699         gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1700
1701         entry_datefmt = gtk_entry_new ();
1702         gtk_widget_show (entry_datefmt);
1703         gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1704
1705         button_datefmt = gtk_button_new_with_label ("... ");
1706
1707         gtk_widget_show (button_datefmt);
1708         gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1709         gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1710                             GTK_SIGNAL_FUNC (date_format_create), NULL);
1711
1712         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1713
1714         hbox1 = gtk_hbox_new (FALSE, 8);
1715         gtk_widget_show (hbox1);
1716         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1717
1718         button_dispitem = gtk_button_new_with_label
1719                 (_(" Set display item of summary... "));
1720         gtk_widget_show (button_dispitem);
1721         gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1722         gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1723                             GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1724                             NULL);
1725
1726         display.entry_textfont  = entry_textfont;
1727         display.button_textfont = button_textfont;
1728
1729         display.chkbtn_folder_unread = chkbtn_folder_unread;
1730         display.chkbtn_transhdr   = chkbtn_transhdr;
1731
1732         display.chkbtn_swapfrom      = chkbtn_swapfrom;
1733         display.chkbtn_hscrollbar    = chkbtn_hscrollbar;
1734         display.chkbtn_expand_thread = chkbtn_expand_thread;
1735         display.chkbtn_bold_unread   = chkbtn_bold_unread;
1736         display.chkbtn_useaddrbook   = chkbtn_useaddrbook;
1737         display.entry_datefmt        = entry_datefmt;
1738 }
1739
1740 static void prefs_message_create(void)
1741 {
1742         GtkWidget *vbox1;
1743         GtkWidget *vbox2;
1744         GtkWidget *vbox3;
1745         GtkWidget *hbox1;
1746         GtkWidget *chkbtn_enablecol;
1747         GtkWidget *button_edit_col;
1748         GtkWidget *chkbtn_mbalnum;
1749         GtkWidget *chkbtn_disphdrpane;
1750         GtkWidget *chkbtn_disphdr;
1751         GtkWidget *button_edit_disphdr;
1752         GtkWidget *hbox_linespc;
1753         GtkWidget *label_linespc;
1754         GtkObject *spinbtn_linespc_adj;
1755         GtkWidget *spinbtn_linespc;
1756         GtkWidget *chkbtn_headspc;
1757
1758         GtkWidget *frame_scr;
1759         GtkWidget *vbox_scr;
1760         GtkWidget *chkbtn_smoothscroll;
1761         GtkWidget *hbox_scr;
1762         GtkWidget *label_scr;
1763         GtkObject *spinbtn_scrollstep_adj;
1764         GtkWidget *spinbtn_scrollstep;
1765         GtkWidget *chkbtn_halfpage;
1766
1767         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1768         gtk_widget_show (vbox1);
1769         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1770         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1771
1772         hbox1 = gtk_hbox_new (FALSE, 8);
1773         gtk_widget_show (hbox1);
1774         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1775
1776         PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1777                            _("Enable coloration of message"));
1778         gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1779                                                 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1780                                                 NULL);
1781
1782         button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1783         gtk_widget_show (button_edit_col);
1784         gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1785         gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1786                             GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1787
1788         SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1789
1790         vbox2 = gtk_vbox_new (FALSE, 0);
1791         gtk_widget_show (vbox2);
1792         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1793
1794         PACK_CHECK_BUTTON
1795                 (vbox2, chkbtn_mbalnum,
1796                  _("Display 2-byte alphabet and numeric with 1-byte character"));
1797         PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1798                           _("Display header pane above message view"));
1799
1800         hbox1 = gtk_hbox_new (FALSE, 8);
1801         gtk_widget_show (hbox1);
1802         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1803
1804         PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1805                           _("Display short headers on message view"));
1806
1807         button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1808         gtk_widget_show (button_edit_disphdr);
1809         gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1810                           FALSE, TRUE, 0);
1811         gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1812                             GTK_SIGNAL_FUNC (prefs_display_header_open),
1813                             NULL);
1814
1815         SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1816
1817         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1818
1819         hbox1 = gtk_hbox_new (FALSE, 32);
1820         gtk_widget_show (hbox1);
1821         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1822
1823         hbox_linespc = gtk_hbox_new (FALSE, 8);
1824         gtk_widget_show (hbox1);
1825         gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1826
1827         label_linespc = gtk_label_new (_("Line space"));
1828         gtk_widget_show (label_linespc);
1829         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1830                             FALSE, FALSE, 0);
1831
1832         spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1833         spinbtn_linespc = gtk_spin_button_new
1834                 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1835         gtk_widget_show (spinbtn_linespc);
1836         gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1837                             FALSE, FALSE, 0);
1838         gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1839         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1840
1841         label_linespc = gtk_label_new (_("pixel(s)"));
1842         gtk_widget_show (label_linespc);
1843         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1844                             FALSE, FALSE, 0);
1845
1846         PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1847
1848         PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1849
1850         vbox_scr = gtk_vbox_new (FALSE, 0);
1851         gtk_widget_show (vbox_scr);
1852         gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1853         gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1854
1855         PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1856
1857         hbox1 = gtk_hbox_new (FALSE, 32);
1858         gtk_widget_show (hbox1);
1859         gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1860
1861         PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1862
1863         hbox_scr = gtk_hbox_new (FALSE, 8);
1864         gtk_widget_show (hbox_scr);
1865         gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1866
1867         label_scr = gtk_label_new (_("Step"));
1868         gtk_widget_show (label_scr);
1869         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1870
1871         spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1872         spinbtn_scrollstep = gtk_spin_button_new
1873                 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1874         gtk_widget_show (spinbtn_scrollstep);
1875         gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1876                             FALSE, FALSE, 0);
1877         gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1878         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1879                                      TRUE);
1880
1881         label_scr = gtk_label_new (_("pixel(s)"));
1882         gtk_widget_show (label_scr);
1883         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1884
1885         SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1886
1887         message.chkbtn_enablecol   = chkbtn_enablecol;
1888         message.button_edit_col    = button_edit_col;
1889         message.chkbtn_mbalnum     = chkbtn_mbalnum;
1890         message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1891         message.chkbtn_disphdr     = chkbtn_disphdr;
1892         message.spinbtn_linespc    = spinbtn_linespc;
1893         message.chkbtn_headspc     = chkbtn_headspc;
1894
1895         message.chkbtn_smoothscroll    = chkbtn_smoothscroll;
1896         message.spinbtn_scrollstep     = spinbtn_scrollstep;
1897         message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1898         message.chkbtn_halfpage        = chkbtn_halfpage;
1899 }
1900
1901 #if USE_GPGME
1902 static void prefs_privacy_create(void)
1903 {
1904         GtkWidget *vbox1;
1905         GtkWidget *vbox2;
1906         GtkWidget *hbox1;
1907         GtkWidget *checkbtn_default_encrypt;
1908         GtkWidget *checkbtn_default_sign;
1909         GtkWidget *checkbtn_auto_check_signatures;
1910         GtkWidget *checkbtn_gpg_signature_popup;
1911         GtkWidget *checkbtn_passphrase_grab;
1912         GtkWidget *checkbtn_gpg_warning;
1913         GtkWidget *label;
1914         GtkWidget *menuitem;
1915         GtkWidget *optmenu;
1916         GtkWidget *optmenu_menu;
1917
1918         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1919         gtk_widget_show (vbox1);
1920         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1921         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1922
1923         vbox2 = gtk_vbox_new (FALSE, 0);
1924         gtk_widget_show (vbox2);
1925         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1926
1927         PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1928                            _("Encrypt message by default"));
1929
1930         PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1931                            _("Sign message by default"));
1932
1933         PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1934                            _("Automatically check signatures"));
1935
1936         PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1937                            _("Show signature check result in a popup window"));
1938
1939 #ifndef __MINGW32__
1940         PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1941                            _("Grab input while entering a passphrase"));
1942 #endif
1943
1944         PACK_CHECK_BUTTON
1945                 (vbox2, checkbtn_gpg_warning,
1946                  _("Display warning on startup if GnuPG doesn't work"));
1947
1948         hbox1 = gtk_hbox_new (FALSE, 8);
1949         gtk_widget_show (hbox1);
1950         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1951
1952         /* create default signkey box */
1953         label = gtk_label_new (_("Default Sign Key"));
1954         gtk_widget_show (label);
1955         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1956         optmenu = gtk_option_menu_new ();
1957         gtk_widget_show (optmenu);
1958         gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1959         optmenu_menu = gtk_menu_new ();
1960
1961         MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1962         MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1963         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1964         /* FIXME: disabled because not implemented */
1965         gtk_widget_set_sensitive(optmenu, FALSE);
1966
1967         privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1968         privacy.checkbtn_default_sign    = checkbtn_default_sign;
1969         privacy.checkbtn_auto_check_signatures
1970                                          = checkbtn_auto_check_signatures;
1971         privacy.checkbtn_gpg_signature_popup
1972                                          = checkbtn_gpg_signature_popup;
1973         privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1974         privacy.checkbtn_gpg_warning     = checkbtn_gpg_warning;
1975         privacy.optmenu_default_signkey  = optmenu;
1976 }
1977
1978 static void
1979 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1980 {
1981 #if 0
1982         GtkWidget *menu;
1983         GtkWidget *menuitem;
1984         gchar *charset;
1985
1986         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1987         menuitem = gtk_menu_get_active(GTK_MENU(menu));
1988         charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1989         g_free(*((gchar **)pparam->data));
1990         *((gchar **)pparam->data) = g_strdup(charset);
1991 #endif
1992 }
1993
1994 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1995 {
1996 #if 0
1997         GList *cur;
1998         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1999         GtkWidget *menu;
2000         GtkWidget *menuitem;
2001         gchar *charset;
2002         gint n = 0;
2003
2004         g_return_if_fail(optmenu != NULL);
2005         g_return_if_fail(*((gchar **)pparam->data) != NULL);
2006
2007         menu = gtk_option_menu_get_menu(optmenu);
2008         for (cur = GTK_MENU_SHELL(menu)->children;
2009              cur != NULL; cur = cur->next) {
2010                 menuitem = GTK_WIDGET(cur->data);
2011                 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2012                 if (!strcmp(charset, *((gchar **)pparam->data))) {
2013                         gtk_option_menu_set_history(optmenu, n);
2014                         return;
2015                 }
2016                 n++;
2017         }
2018
2019         gtk_option_menu_set_history(optmenu, 0);
2020         prefs_common_charset_set_data_from_optmenu(pparam);
2021 #endif
2022 }
2023 #endif /* USE_GPGME */
2024
2025 static void prefs_interface_create(void)
2026 {
2027         GtkWidget *vbox1;
2028         GtkWidget *vbox2;
2029         GtkWidget *vbox3;
2030         /* GtkWidget *checkbtn_emacs; */
2031         GtkWidget *checkbtn_openunread;
2032         GtkWidget *checkbtn_openinbox;
2033         GtkWidget *checkbtn_immedexec;
2034         GtkWidget *hbox1;
2035         GtkWidget *label;
2036         GtkWidget *optmenu_recvdialog;
2037         GtkWidget *menu;
2038         GtkWidget *menuitem;
2039
2040         GtkWidget *frame_addr;
2041         GtkWidget *vbox_addr;
2042         GtkWidget *checkbtn_addaddrbyclick;
2043
2044         GtkWidget *frame_exit;
2045         GtkWidget *vbox_exit;
2046         GtkWidget *checkbtn_confonexit;
2047         GtkWidget *checkbtn_cleanonexit;
2048         GtkWidget *checkbtn_askonclean;
2049         GtkWidget *checkbtn_warnqueued;
2050
2051         GtkWidget *hbox2;
2052         GtkWidget *optmenu_nextunreadmsgdialog;
2053         GtkWidget *optmenu_nextunreadmsgdialog_menu;
2054         GtkWidget *nextunreadmsgdialog_menuitem;
2055
2056         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2057         gtk_widget_show (vbox1);
2058         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2059         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2060
2061         vbox2 = gtk_vbox_new (FALSE, 0);
2062         gtk_widget_show (vbox2);
2063         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2064
2065         /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2066                            _("Emulate the behavior of mouse operation of\n"
2067                              "Emacs-based mailer"));
2068         gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2069                                GTK_JUSTIFY_LEFT);   */
2070
2071         PACK_CHECK_BUTTON
2072                 (vbox2, checkbtn_openunread,
2073                  _("Open first unread message when entering a folder"));
2074
2075         PACK_CHECK_BUTTON
2076                 (vbox2, checkbtn_openinbox,
2077                  _("Go to inbox after receiving new mail"));
2078
2079         vbox3 = gtk_vbox_new (FALSE, 0);
2080         gtk_widget_show (vbox3);
2081         gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2082
2083         PACK_CHECK_BUTTON
2084                 (vbox3, checkbtn_immedexec,
2085                  _("Execute immediately when moving or deleting messages"));
2086
2087         hbox1 = gtk_hbox_new (FALSE, 0);
2088         gtk_widget_show (hbox1);
2089         gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2090
2091         label = gtk_label_new
2092                 (_("(Messages will be just marked till execution\n"
2093                    " if this is turned off)"));
2094         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2095         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2096
2097         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2098
2099         hbox1 = gtk_hbox_new (FALSE, 8);
2100         gtk_widget_show (hbox1);
2101         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2102
2103         label = gtk_label_new (_("Show receive dialog"));
2104         gtk_widget_show (label);
2105         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2106
2107         optmenu_recvdialog = gtk_option_menu_new ();
2108         gtk_widget_show (optmenu_recvdialog);
2109         gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2110                             FALSE, FALSE, 0);
2111
2112         menu = gtk_menu_new ();
2113         MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2114         MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2115                       RECV_DIALOG_ACTIVE);
2116         MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2117
2118         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2119
2120         PACK_FRAME (vbox1, frame_addr, _("Address book"));
2121
2122         vbox_addr = gtk_vbox_new (FALSE, 0);
2123         gtk_widget_show (vbox_addr);
2124         gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2125         gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2126
2127         PACK_CHECK_BUTTON
2128                 (vbox_addr, checkbtn_addaddrbyclick,
2129                  _("Add address to destination when double-clicked"));
2130
2131         /* Next Unread Message Dialog */
2132         hbox2 = gtk_hbox_new (FALSE, 8);
2133         gtk_widget_show (hbox2);
2134         gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2135
2136         label = gtk_label_new (_("Show no-unread-message dialog"));
2137         gtk_widget_show (label);
2138         gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2139
2140         optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2141         gtk_widget_show (optmenu_nextunreadmsgdialog);
2142         gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2143                             FALSE, FALSE, 0);
2144
2145         optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2146         MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2147                       _("Always"),  NEXTUNREADMSGDIALOG_ALWAYS);
2148         MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2149                       _("Assume 'Yes'"),  NEXTUNREADMSGDIALOG_ASSUME_YES);
2150         MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2151                       _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2152
2153         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2154                                   optmenu_nextunreadmsgdialog_menu);
2155
2156
2157         /* Receive Dialog */
2158 /*      hbox = gtk_hbox_new (FALSE, 8);
2159         gtk_widget_show (hbox);
2160         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2161
2162         label = gtk_label_new (_("Show receive Dialog"));
2163         gtk_widget_show (label);
2164         gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2165
2166         recvdialog_optmenu = gtk_option_menu_new ();
2167         gtk_widget_show (recvdialog_optmenu);
2168         gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2169
2170         recvdialog_optmenu_menu = gtk_menu_new ();
2171
2172         MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"),  RECVDIALOG_ALWAYS);
2173         MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"),  RECVDIALOG_WINDOW_ACTIVE);
2174         MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2175
2176         gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu);     */
2177
2178         /* On Exit */
2179         PACK_FRAME (vbox1, frame_exit, _("On exit"));
2180
2181         vbox_exit = gtk_vbox_new (FALSE, 0);
2182         gtk_widget_show (vbox_exit);
2183         gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2184         gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2185
2186         PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2187                            _("Confirm on exit"));
2188
2189         hbox1 = gtk_hbox_new (FALSE, 32);
2190         gtk_widget_show (hbox1);
2191         gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2192
2193         PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2194                            _("Empty trash on exit"));
2195         PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2196                            _("Ask before emptying"));
2197         SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2198
2199         PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2200                            _("Warn if there are queued messages"));
2201
2202         /* interface.checkbtn_emacs          = checkbtn_emacs; */
2203         interface.checkbtn_openunread         = checkbtn_openunread;
2204         interface.checkbtn_openinbox          = checkbtn_openinbox;
2205         interface.checkbtn_immedexec          = checkbtn_immedexec;
2206         interface.optmenu_recvdialog          = optmenu_recvdialog;
2207         interface.checkbtn_addaddrbyclick     = checkbtn_addaddrbyclick;
2208         interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2209         interface.checkbtn_confonexit         = checkbtn_confonexit;
2210         interface.checkbtn_cleanonexit        = checkbtn_cleanonexit;
2211         interface.checkbtn_askonclean         = checkbtn_askonclean;
2212         interface.checkbtn_warnqueued         = checkbtn_warnqueued;
2213 }
2214
2215 static void prefs_other_create(void)
2216 {
2217         GtkWidget *vbox1;
2218         GtkWidget *hbox1;
2219
2220         GtkWidget *uri_frame;
2221         GtkWidget *uri_label;
2222         GtkWidget *uri_combo;
2223         GtkWidget *uri_entry;
2224
2225         GtkWidget *print_frame;
2226         GtkWidget *printcmd_label;
2227         GtkWidget *printcmd_entry;
2228
2229         GtkWidget *exteditor_frame;
2230         GtkWidget *exteditor_label;
2231         GtkWidget *exteditor_combo;
2232         GtkWidget *exteditor_entry;
2233
2234         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2235         gtk_widget_show (vbox1);
2236         gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2237         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2238
2239         PACK_FRAME(vbox1, uri_frame,
2240                    _("External Web browser (%s will be replaced with URI)"));
2241
2242         hbox1 = gtk_hbox_new (FALSE, 8);
2243         gtk_widget_show (hbox1);
2244         gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2245         gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2246
2247         uri_label = gtk_label_new (_("Command"));
2248         gtk_widget_show(uri_label);
2249         gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2250
2251         uri_combo = gtk_combo_new ();
2252         gtk_widget_show (uri_combo);
2253         gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2254         gtkut_combo_set_items (GTK_COMBO (uri_combo),
2255                                "netscape -remote 'openURL(%s,raise)'",
2256                                "netscape '%s'",
2257                                "gnome-moz-remote --raise --newwin '%s'",
2258                                "kterm -e w3m '%s'",
2259                                "kterm -e lynx '%s'",
2260                                NULL);
2261
2262         uri_entry = GTK_COMBO (uri_combo)->entry;
2263
2264         PACK_FRAME(vbox1, print_frame,
2265                    _("Printing (%s will be replaced with file name)"));
2266
2267         hbox1 = gtk_hbox_new (FALSE, 8);
2268         gtk_widget_show (hbox1);
2269         gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2270         gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2271
2272         printcmd_label = gtk_label_new (_("Command"));
2273         gtk_widget_show (printcmd_label);
2274         gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2275
2276         printcmd_entry = gtk_entry_new ();
2277         gtk_widget_show (printcmd_entry);
2278         gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2279
2280         PACK_FRAME(vbox1, exteditor_frame,
2281                    _("External editor (%s will be replaced with file name)"));
2282
2283         hbox1 = gtk_hbox_new (FALSE, 8);
2284         gtk_widget_show (hbox1);
2285         gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2286         gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2287
2288         exteditor_label = gtk_label_new (_("Command"));
2289         gtk_widget_show (exteditor_label);
2290         gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2291
2292         exteditor_combo = gtk_combo_new ();
2293         gtk_widget_show (exteditor_combo);
2294         gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2295         gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2296                                "gedit %s",
2297                                "kedit %s",
2298                                "mgedit --no-fork %s",
2299                                "emacs %s",
2300                                "xemacs %s",
2301                                "kterm -e jed %s",
2302                                "kterm -e vi %s",
2303                                NULL);
2304         exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2305
2306         other.uri_combo = uri_combo;
2307         other.uri_entry = uri_entry;
2308         other.printcmd_entry = printcmd_entry;
2309
2310         other.exteditor_combo = exteditor_combo;
2311         other.exteditor_entry = exteditor_entry;
2312 }
2313
2314 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2315 {
2316         GtkWidget *datefmt_sample = NULL;
2317         gchar *text;
2318
2319         g_return_if_fail(widget != NULL);
2320         g_return_if_fail(*widget != NULL);
2321         g_return_if_fail(display.entry_datefmt != NULL);
2322
2323         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2324                                     (GTK_OBJECT(*widget), "datefmt_sample"));
2325         g_return_if_fail(datefmt_sample != NULL);
2326
2327         text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2328         g_free(prefs_common.date_format);
2329         prefs_common.date_format = text;
2330         gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2331
2332         gtk_widget_destroy(*widget);
2333         *widget = NULL;
2334 }
2335
2336 static void date_format_cancel_btn_clicked(GtkButton *button,
2337                                            GtkWidget **widget)
2338 {
2339         g_return_if_fail(widget != NULL);
2340         g_return_if_fail(*widget != NULL);
2341
2342         gtk_widget_destroy(*widget);
2343         *widget = NULL;
2344 }
2345
2346 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2347                                     GtkWidget **widget)
2348 {
2349         if (event && event->keyval == GDK_Escape)
2350                 date_format_cancel_btn_clicked(NULL, widget);
2351 }
2352
2353 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2354                                       GdkEventAny *event, GtkWidget **widget)
2355 {
2356         g_return_val_if_fail(widget != NULL, FALSE);
2357         g_return_val_if_fail(*widget != NULL, FALSE);
2358
2359         *widget = NULL;
2360         return FALSE;
2361 }
2362
2363 static void date_format_entry_on_change(GtkEditable *editable,
2364                                         GtkLabel *example)
2365 {
2366         time_t cur_time;
2367         struct tm *cal_time;
2368         gchar buffer[100];
2369         gchar *text;
2370
2371         cur_time = time(NULL);
2372         cal_time = localtime(&cur_time);
2373         buffer[0] = 0;
2374         text = gtk_editable_get_chars(editable, 0, -1);
2375         if (text)
2376                 strftime(buffer, sizeof buffer, text, cal_time); 
2377         gtk_label_set_text(example, buffer);
2378 }
2379
2380 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2381                                    gint column, GdkEventButton *event,
2382                                    GtkWidget *date_format)
2383 {
2384         gint cur_pos;
2385         gchar *format;
2386         gchar *old_format;
2387         gchar *new_format;
2388         GtkWidget *datefmt_sample;
2389
2390         /* only on double click */
2391         if (!event || event->type != GDK_2BUTTON_PRESS) return;
2392
2393
2394         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2395                                     (GTK_OBJECT(date_format), "datefmt_sample"));
2396
2397         g_return_if_fail(date_format_list != NULL);
2398         g_return_if_fail(date_format != NULL);
2399         g_return_if_fail(datefmt_sample != NULL);
2400
2401         /* get format from clist */
2402         gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2403
2404         cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2405         old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2406
2407         /* insert the format into the text entry */
2408         new_format = g_malloc(strlen(old_format) + 3);
2409
2410         strncpy(new_format, old_format, cur_pos);
2411         new_format[cur_pos] = '\0';
2412         strcat(new_format, format);
2413         strcat(new_format, &old_format[cur_pos]);
2414
2415         gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2416         gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2417
2418         g_free(new_format);
2419 }
2420
2421 static GtkWidget *date_format_create(GtkButton *button, void *data)
2422 {
2423         static GtkWidget *datefmt_win = NULL;
2424         GtkWidget *vbox1;
2425         GtkWidget *scrolledwindow1;
2426         GtkWidget *datefmt_clist;
2427         GtkWidget *table;
2428         GtkWidget *label1;
2429         GtkWidget *label2;
2430         GtkWidget *label3;
2431         GtkWidget *confirm_area;
2432         GtkWidget *ok_btn;
2433         GtkWidget *cancel_btn;
2434         GtkWidget *datefmt_entry;
2435
2436         const struct {
2437                 gchar *fmt;
2438                 gchar *txt;
2439         } time_format[] = {
2440                 { "%a", _("the full abbreviated weekday name") },
2441                 { "%A", _("the full weekday name") },
2442                 { "%b", _("the abbreviated month name") },
2443                 { "%B", _("the full month name") },
2444                 { "%c", _("the preferred date and time for the current locale") },
2445                 { "%C", _("the century number (year/100)") },
2446                 { "%d", _("the day of the month as a decimal number") },
2447                 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2448                 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2449                 { "%j", _("the day of the year as a decimal number") },
2450                 { "%m", _("the month as a decimal number") },
2451                 { "%M", _("the minute as a decimal number") },
2452                 { "%p", _("either AM or PM") },
2453                 { "%S", _("the second as a decimal number") },
2454                 { "%w", _("the day of the week as a decimal number") },
2455                 { "%x", _("the preferred date for the current locale") },
2456                 { "%y", _("the last two digits of a year") },
2457                 { "%Y", _("the year as a decimal number") },
2458                 { "%Z", _("the time zone or name or abbreviation") }
2459         };
2460
2461         gchar *titles[2];
2462         gint i;
2463         const gint TIME_FORMAT_ELEMS =
2464                 sizeof time_format / sizeof time_format[0];
2465
2466         if (datefmt_win) return datefmt_win;
2467
2468         datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2469         gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2470         gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2471         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2472         gtk_widget_set_usize(datefmt_win, 440, 280);
2473
2474         vbox1 = gtk_vbox_new(FALSE, 10);
2475         gtk_widget_show(vbox1);
2476         gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2477
2478         scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2479         gtk_scrolled_window_set_policy
2480                 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2481                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2482         gtk_widget_show(scrolledwindow1);
2483         gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2484
2485         titles[0] = _("Specifier");
2486         titles[1] = _("Description");
2487         datefmt_clist = gtk_clist_new_with_titles(2, titles);
2488         gtk_widget_show(datefmt_clist);
2489         gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2490 /*      gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80);   */
2491
2492         gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2493                                      GTK_SELECTION_BROWSE);
2494
2495         for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2496                 gchar *text[2];
2497                 /* phoney casting necessary because of gtk... */
2498                 text[0] = (gchar *)time_format[i].fmt;
2499                 text[1] = (gchar *)time_format[i].txt;
2500                 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2501         }
2502
2503         table = gtk_table_new(2, 2, FALSE);
2504         gtk_widget_show(table);
2505         gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2506         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2507         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2508
2509         label1 = gtk_label_new(_("Date format"));
2510         gtk_widget_show(label1);
2511         gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2512                          GTK_FILL, 0, 0, 0);
2513         gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2514         gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2515
2516         datefmt_entry = gtk_entry_new_with_max_length(256);
2517         gtk_widget_show(datefmt_entry);
2518         gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2519                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2520
2521         /* we need the "sample" entry box; add it as data so callbacks can
2522          * get the entry box */
2523         gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2524                             datefmt_entry);
2525
2526         label2 = gtk_label_new(_("Example"));
2527         gtk_widget_show(label2);
2528         gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2529                          GTK_FILL, 0, 0, 0);
2530         gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2531         gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2532
2533         label3 = gtk_label_new("");
2534         gtk_widget_show(label3);
2535         gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2536                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2537         gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2538         gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2539
2540         gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2541                                 &cancel_btn, _("Cancel"), NULL, NULL);
2542         gtk_widget_grab_default(ok_btn);
2543         gtk_widget_show(confirm_area);
2544
2545         gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2546
2547         /* set the current format */
2548         gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2549         date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2550                                     GTK_LABEL(label3));
2551
2552         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2553                            GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2554                            &datefmt_win);
2555         gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2556                            GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2557                            &datefmt_win);
2558         gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2559                            GTK_SIGNAL_FUNC(date_format_key_pressed),
2560                            &datefmt_win);
2561         gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2562                            GTK_SIGNAL_FUNC(date_format_on_delete),
2563                            &datefmt_win);
2564         gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2565                            GTK_SIGNAL_FUNC(date_format_entry_on_change),
2566                            label3);
2567
2568         gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2569                            GTK_SIGNAL_FUNC(date_format_select_row),
2570                            datefmt_win);
2571
2572         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2573         gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2574
2575         gtk_widget_show(datefmt_win);
2576         manage_window_set_transient(GTK_WINDOW(datefmt_win));
2577
2578         gtk_widget_grab_focus(ok_btn);
2579
2580         return datefmt_win;
2581 }
2582
2583 void prefs_quote_colors_dialog(void)
2584 {
2585         if (!quote_color_win)
2586                 prefs_quote_colors_dialog_create();
2587         gtk_widget_show(quote_color_win);
2588         manage_window_set_transient(GTK_WINDOW(quote_color_win));
2589
2590         gtk_main();
2591         gtk_widget_hide(quote_color_win);
2592
2593         textview_update_message_colors();
2594         main_window_reflect_prefs_all();
2595 }
2596
2597 static void prefs_quote_colors_dialog_create(void)
2598 {
2599         GtkWidget *window;
2600         GtkWidget *vbox;
2601         GtkWidget *table;
2602         GtkWidget *quotelevel1_label;
2603         GtkWidget *quotelevel2_label;
2604         GtkWidget *quotelevel3_label;
2605         GtkWidget *uri_label;
2606         GtkWidget *tgt_folder_label;
2607         GtkWidget *hbbox;
2608         GtkWidget *ok_btn;
2609         //GtkWidget *cancel_btn;
2610         GtkWidget *recycle_colors_btn;
2611         GtkWidget *frame_colors;
2612
2613         window = gtk_window_new(GTK_WINDOW_DIALOG);
2614         gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2615         gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2616         gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2617         gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2618         gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2619
2620         vbox = gtk_vbox_new (FALSE, VSPACING);
2621         gtk_container_add (GTK_CONTAINER (window), vbox);
2622         gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2623         PACK_FRAME(vbox, frame_colors, _("Colors"));
2624
2625         table = gtk_table_new (4, 2, FALSE);
2626         gtk_container_add (GTK_CONTAINER (frame_colors), table);
2627         gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2628         gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2629         gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2630
2631
2632         color_buttons.quote_level1_btn = gtk_button_new();
2633         gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2634                           0, 1, 0, 1, 0, 0, 0, 0);
2635         gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2636         gtk_container_set_border_width
2637                 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2638
2639         color_buttons.quote_level2_btn = gtk_button_new();
2640         gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2641                           0, 1, 1, 2, 0, 0, 0, 0);
2642         gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2643         gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2644
2645         color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2646         gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2647                           0, 1, 2, 3, 0, 0, 0, 0);
2648         gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2649         gtk_container_set_border_width
2650                 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2651
2652         color_buttons.uri_btn = gtk_button_new_with_label ("");
2653         gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2654                           0, 1, 3, 4, 0, 0, 0, 0);
2655         gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2656         gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2657
2658         color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2659         gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2660                           0, 1, 4, 5, 0, 0, 0, 0);
2661         gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2662         gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2663
2664         quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2665         gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2666                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2667         gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2668         gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2669
2670         quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2671         gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2672                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2673         gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2674         gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2675
2676         quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2677         gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2678                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2679         gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2680         gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2681
2682         uri_label = gtk_label_new (_("URI link"));
2683         gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2684                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2685         gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2686         gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2687
2688         tgt_folder_label = gtk_label_new (_("Target folder"));
2689         gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2690                           (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2691         gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2692         gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2693
2694         PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2695                            _("Recycle quote colors"));
2696
2697         gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2698                                 NULL, NULL, NULL, NULL);
2699         gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2700
2701         gtk_widget_grab_default(ok_btn);
2702         gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2703                            GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2704         gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2705                            GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2706         gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2707                            GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2708         gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2709                            GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2710                            NULL);
2711
2712         gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2713                            GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2714         gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2715                            GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2716         gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2717                            GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2718         gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2719                            GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2720         gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2721                            GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2722         gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2723                            GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2724         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2725                            GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2726
2727         /* show message button colors and recycle options */
2728         set_button_bg_color(color_buttons.quote_level1_btn,
2729                             prefs_common.quote_level1_col);
2730         set_button_bg_color(color_buttons.quote_level2_btn,
2731                             prefs_common.quote_level2_col);
2732         set_button_bg_color(color_buttons.quote_level3_btn,
2733                             prefs_common.quote_level3_col);
2734         set_button_bg_color(color_buttons.uri_btn,
2735                             prefs_common.uri_col);
2736         set_button_bg_color(color_buttons.tgt_folder_btn,
2737                             prefs_common.tgt_folder_col);
2738         gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2739                                      prefs_common.recycle_quote_colors);
2740
2741         gtk_widget_show_all(vbox);
2742         quote_color_win = window;
2743 }
2744
2745 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2746                                            GdkEventKey *event, gpointer data)
2747 {
2748         if (event && event->keyval == GDK_Escape)
2749                 gtk_main_quit();
2750 }
2751
2752 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2753 {
2754         gchar *type = (gchar *)data;
2755         gchar *title = NULL;
2756         gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2757         gint rgbvalue = 0;
2758         GtkColorSelectionDialog *dialog;
2759
2760         if(g_strcasecmp(type, "LEVEL1") == 0) {
2761                 title = _("Pick color for quotation level 1");
2762                 rgbvalue = prefs_common.quote_level1_col;
2763         } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2764                 title = _("Pick color for quotation level 2");
2765                 rgbvalue = prefs_common.quote_level2_col;
2766         } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2767                 title = _("Pick color for quotation level 3");
2768                 rgbvalue = prefs_common.quote_level3_col;
2769         } else if(g_strcasecmp(type, "URI") == 0) {
2770                 title = _("Pick color for URI");
2771                 rgbvalue = prefs_common.uri_col;
2772         } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2773                 title = _("Pick color for target folder");
2774                 rgbvalue = prefs_common.tgt_folder_col;
2775         } else {   /* Should never be called */
2776                 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2777                 return;
2778         }
2779
2780         color_dialog = gtk_color_selection_dialog_new(title);
2781         gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2782         gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2783         gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2784         manage_window_set_transient(GTK_WINDOW(color_dialog));
2785
2786         gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2787                            "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2788         gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2789                            "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2790         gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2791                            GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2792                            data);
2793
2794         /* preselect the previous color in the color selection dialog */
2795         color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2796         color[1] = (gdouble) ((rgbvalue & 0x00ff00) >>  8) / 255.0;
2797         color[2] = (gdouble)  (rgbvalue & 0x0000ff)        / 255.0;
2798         dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2799         gtk_color_selection_set_color
2800                 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2801
2802         gtk_widget_show(color_dialog);
2803 }
2804
2805 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2806 {
2807         GtkColorSelection *colorsel = (GtkColorSelection *)
2808                                                 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2809         gdouble color[4];
2810         gint red, green, blue, rgbvalue;
2811         gchar *type = (gchar *)data;
2812
2813         gtk_color_selection_get_color(colorsel, color);
2814
2815         red      = (gint) (color[0] * 255.0);
2816         green    = (gint) (color[1] * 255.0);
2817         blue     = (gint) (color[2] * 255.0);
2818         rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2819
2820 #if 0
2821         fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2822         fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2823         fprintf(stderr, "Color is %x\n", rgbvalue);
2824 #endif
2825
2826         if (g_strcasecmp(type, "LEVEL1") == 0) {
2827                 prefs_common.quote_level1_col = rgbvalue;
2828                 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2829         } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2830                 prefs_common.quote_level2_col = rgbvalue;
2831                 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2832         } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2833                 prefs_common.quote_level3_col = rgbvalue;
2834                 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2835         } else if (g_strcasecmp(type, "URI") == 0) {
2836                 prefs_common.uri_col = rgbvalue;
2837                 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2838         } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2839                 prefs_common.tgt_folder_col = rgbvalue;
2840                 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2841                 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2842         } else
2843                 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2844
2845         gtk_widget_destroy(color_dialog);
2846 }
2847
2848 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2849 {
2850         gtk_widget_destroy(color_dialog);
2851 }
2852
2853 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2854                                                 GdkEventKey *event,
2855                                                 gpointer data)
2856 {
2857         gtk_widget_destroy(color_dialog);
2858 }
2859
2860 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2861 {
2862         GtkStyle *newstyle;
2863         GdkColor color;
2864
2865         gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2866         newstyle = gtk_style_copy(gtk_widget_get_default_style());
2867         newstyle->bg[GTK_STATE_NORMAL]   = color;
2868         newstyle->bg[GTK_STATE_PRELIGHT] = color;
2869         newstyle->bg[GTK_STATE_ACTIVE]   = color;
2870
2871         gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2872 }
2873
2874 static void prefs_enable_message_color_toggled(void)
2875 {
2876         gboolean is_active;
2877
2878         is_active = gtk_toggle_button_get_active
2879                 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2880         gtk_widget_set_sensitive(message.button_edit_col, is_active);
2881         prefs_common.enable_color = is_active;
2882 }
2883
2884 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2885 {
2886         gboolean is_active;
2887
2888         is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2889         prefs_common.recycle_quote_colors = is_active;
2890 }
2891
2892 static void prefs_quote_description(void)
2893 {
2894         if (!quote_desc_win)
2895                 prefs_quote_description_create();
2896
2897         gtk_widget_show(quote_desc_win);
2898         gtk_main();
2899         gtk_widget_hide(quote_desc_win);
2900 }
2901
2902 static void prefs_quote_description_create(void)
2903 {
2904         GtkWidget *vbox;
2905         GtkWidget *hbox;
2906         GtkWidget *hbbox;
2907         GtkWidget *label;
2908         GtkWidget *ok_btn;
2909
2910         quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2911         gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2912                              _("Description of symbols"));
2913         gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2914         gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2915         gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2916         gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2917
2918         vbox = gtk_vbox_new(FALSE, 8);
2919         gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2920
2921         hbox = gtk_hbox_new(FALSE, 4);
2922         gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2923
2924         label = gtk_label_new
2925                 ("SYMBOL\n\n"
2926                  "%d\n"         /* date */
2927                  "%f\n"         /* from */
2928                  "%N\n"         /* full name */
2929                  "%F\n"         /* first name */
2930                  "%I\n"         /* sender's initial */
2931                  "%s\n"         /* subject line */
2932                  "%t\n"         /* to */
2933                  "%c\n"         /* cc */
2934                  "%n\n"         /* newsgroups */
2935                  "%i\n"         /* message id */
2936                  "%r\n"         /* references */
2937                  "\n"
2938                  "%x\n"
2939                  "?x(expr)\n"
2940                  "\n"
2941                  "%M\n"
2942                  "%Q\n"
2943                  "%m\n"
2944                  "%q\n"
2945                  "%%");
2946
2947         gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2948         gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2949
2950         label = gtk_label_new
2951                 (_("DESCRIPTION\n\n"
2952                    "Date\n"
2953                    "From\n"
2954                    "Full Name of Sender\n"
2955                    "First Name of Sender\n"
2956                    "Initial of Sender\n"
2957                    "Subject\n"
2958                    "To\n"
2959                    "Cc\n"
2960                    "Newsgroups\n"
2961                    "Message-ID\n"
2962                    "References\n"
2963                    "\n"
2964                    "Display the information\n"
2965                    "If the information x is set, displays expr\n"
2966                    "\n"
2967                    "Message body\n"
2968                    "Quoted message body\n"
2969                    "Message body without signature\n"
2970                    "Quoted message body without signature\n"
2971                    "%"));
2972
2973         gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2974         gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2975
2976         gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2977                                 NULL, NULL, NULL, NULL);
2978         gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2979
2980         gtk_widget_grab_default(ok_btn);
2981         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2982                                   GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2983
2984         gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2985                                           GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2986
2987         gtk_widget_show_all(vbox);
2988 }
2989
2990 /* functions for setting items of SummaryView */
2991
2992 static struct _SummaryDisplayItem
2993 {
2994         GtkWidget *window;
2995
2996         GtkWidget *chkbtn[N_SUMMARY_COLS];
2997
2998         GtkWidget *ok_btn;
2999         GtkWidget *cancel_btn;
3000 } summarydispitem;
3001
3002 #define SET_ACTIVE(column, var) \
3003         gtk_toggle_button_set_active \
3004                 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
3005                  prefs_common.var)
3006 #define GET_ACTIVE(column, var) \
3007         prefs_common.var = gtk_toggle_button_get_active \
3008                 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
3009
3010 void prefs_summary_display_item_set(void)
3011 {
3012         static gboolean cancelled;
3013
3014         if (!summarydispitem.window)
3015                 prefs_summary_display_item_dialog_create(&cancelled);
3016         gtk_widget_grab_focus(summarydispitem.ok_btn);
3017         gtk_widget_show(summarydispitem.window);
3018         manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
3019
3020         SET_ACTIVE(S_COL_MARK, show_mark);
3021         SET_ACTIVE(S_COL_UNREAD, show_unread);
3022         SET_ACTIVE(S_COL_MIME, show_mime);
3023         SET_ACTIVE(S_COL_NUMBER, show_number);
3024         SET_ACTIVE(S_COL_SCORE, show_score);
3025         SET_ACTIVE(S_COL_SIZE, show_size);
3026         SET_ACTIVE(S_COL_DATE, show_date);
3027         SET_ACTIVE(S_COL_FROM, show_from);
3028         SET_ACTIVE(S_COL_SUBJECT, show_subject);
3029
3030         gtk_main();
3031         gtk_widget_hide(summarydispitem.window);
3032
3033         if (cancelled != TRUE) {
3034                 GET_ACTIVE(S_COL_MARK, show_mark);
3035                 GET_ACTIVE(S_COL_UNREAD, show_unread);
3036                 GET_ACTIVE(S_COL_MIME, show_mime);
3037                 GET_ACTIVE(S_COL_NUMBER, show_number);
3038                 GET_ACTIVE(S_COL_SCORE, show_score);
3039                 GET_ACTIVE(S_COL_SIZE, show_size);
3040                 GET_ACTIVE(S_COL_DATE, show_date);
3041                 GET_ACTIVE(S_COL_FROM, show_from);
3042                 GET_ACTIVE(S_COL_SUBJECT, show_subject);
3043
3044                 main_window_reflect_prefs_all();
3045         }
3046 }
3047
3048 #define SET_CHECK_BUTTON(column, label) \
3049 { \
3050         summarydispitem.chkbtn[column] = \
3051                 gtk_check_button_new_with_label(label); \
3052         gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
3053                            summarydispitem.chkbtn[column], \
3054                            FALSE, FALSE, 0); \
3055 }
3056
3057 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
3058 {
3059         GtkWidget *window;
3060         GtkWidget *vbox;
3061         GtkWidget *chkbtn_vbox;
3062         GtkWidget *hbbox;
3063         GtkWidget *ok_btn;
3064         GtkWidget *cancel_btn;
3065
3066         window = gtk_window_new(GTK_WINDOW_DIALOG);
3067         gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3068         gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
3069         gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3070         gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3071         gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3072         gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3073                            GTK_SIGNAL_FUNC(display_item_delete_event),
3074                            cancelled);
3075         gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3076                            GTK_SIGNAL_FUNC(display_item_key_pressed),
3077                            cancelled);
3078
3079         vbox = gtk_vbox_new(FALSE, 8);
3080         gtk_container_add(GTK_CONTAINER(window), vbox);
3081
3082         chkbtn_vbox = gtk_vbox_new(FALSE, 0);
3083         gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
3084
3085         SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
3086         SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
3087         SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
3088         SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
3089         SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
3090         SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
3091         SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
3092         SET_CHECK_BUTTON(S_COL_FROM, _("From"));
3093         SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
3094
3095         gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3096                                 &cancel_btn, _("Cancel"), NULL, NULL);
3097         gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3098         gtk_widget_grab_default(ok_btn);
3099
3100         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3101                            GTK_SIGNAL_FUNC(display_item_ok), cancelled);
3102         gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3103                            GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
3104
3105         gtk_widget_show_all(vbox);
3106
3107         summarydispitem.window = window;
3108         summarydispitem.ok_btn = ok_btn;
3109         summarydispitem.cancel_btn = cancel_btn;
3110 }
3111
3112 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3113 {
3114         *cancelled = FALSE;
3115         gtk_main_quit();
3116 }
3117
3118 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3119 {
3120         *cancelled = TRUE;
3121         gtk_main_quit();
3122 }
3123
3124 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3125                                       gboolean *cancelled)
3126 {
3127         *cancelled = TRUE;
3128         gtk_main_quit();
3129
3130         return TRUE;
3131 }
3132
3133 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3134                                      gboolean *cancelled)
3135 {
3136         if (event && event->keyval == GDK_Escape) {
3137                 *cancelled = TRUE;
3138                 gtk_main_quit();
3139         }
3140 }
3141
3142 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3143 {
3144         gchar *font_name;
3145         
3146         g_return_if_fail(entry != NULL);
3147         
3148         if (!font_sel_win) {
3149                 font_sel_win = gtk_font_selection_dialog_new
3150                         (_("Font selection"));
3151                 gtk_window_position(GTK_WINDOW(font_sel_win),
3152                                     GTK_WIN_POS_CENTER);
3153                 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3154                                    GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3155                                    NULL);
3156                 gtk_signal_connect
3157                         (GTK_OBJECT(font_sel_win), "key_press_event",
3158                          GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3159                          NULL);
3160                 gtk_signal_connect_object
3161                         (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3162                          "clicked",
3163                          GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3164                          GTK_OBJECT(font_sel_win));
3165         }
3166
3167         if(font_sel_conn_id) {
3168                 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3169         }
3170         font_sel_conn_id = gtk_signal_connect
3171                 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3172                  "clicked",
3173                  GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3174                  entry);
3175         printf("%i\n", font_sel_conn_id);
3176
3177         font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3178         gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3179         g_free(font_name);
3180         manage_window_set_transient(GTK_WINDOW(font_sel_win));
3181         gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3182         gtk_widget_grab_focus
3183                 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3184         gtk_widget_show(font_sel_win);
3185 }
3186
3187 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3188                                              GdkEventKey *event,
3189                                              gpointer data)
3190 {
3191         if (event && event->keyval == GDK_Escape)
3192                 gtk_widget_hide(font_sel_win);
3193 }
3194
3195 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3196 {
3197         gchar *fontname;
3198
3199         fontname = gtk_font_selection_dialog_get_font_name
3200                 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3201
3202         if (fontname) {
3203                 gtk_entry_set_text(entry, fontname);
3204
3205                 g_free(fontname);
3206         }
3207
3208         gtk_widget_hide(font_sel_win);
3209 }
3210
3211 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3212 {
3213         GtkWidget *menu;
3214         GtkWidget *menuitem;
3215         gchar *charset;
3216
3217         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3218         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3219         charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3220         g_free(*((gchar **)pparam->data));
3221         *((gchar **)pparam->data) = g_strdup(charset);
3222 }
3223
3224 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3225 {
3226         GList *cur;
3227         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3228         GtkWidget *menu;
3229         GtkWidget *menuitem;
3230         gchar *charset;
3231         gint n = 0;
3232
3233         g_return_if_fail(optmenu != NULL);
3234         g_return_if_fail(*((gchar **)pparam->data) != NULL);
3235
3236         menu = gtk_option_menu_get_menu(optmenu);
3237         for (cur = GTK_MENU_SHELL(menu)->children;
3238              cur != NULL; cur = cur->next) {
3239                 menuitem = GTK_WIDGET(cur->data);
3240                 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3241                 if (!strcmp(charset, *((gchar **)pparam->data))) {
3242                         gtk_option_menu_set_history(optmenu, n);
3243                         return;
3244                 }
3245                 n++;
3246         }
3247
3248         gtk_option_menu_set_history(optmenu, 0);
3249         prefs_common_charset_set_data_from_optmenu(pparam);
3250 }
3251
3252 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3253 {
3254         GtkWidget *menu;
3255         GtkWidget *menuitem;
3256
3257         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3258         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3259         *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3260                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3261 }
3262
3263 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3264 {
3265         RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3266         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3267         GtkWidget *menu;
3268         GtkWidget *menuitem;
3269
3270         switch (mode) {
3271         case RECV_DIALOG_ALWAYS:
3272                 gtk_option_menu_set_history(optmenu, 0);
3273                 break;
3274         case RECV_DIALOG_ACTIVE:
3275                 gtk_option_menu_set_history(optmenu, 1);
3276                 break;
3277         case RECV_DIALOG_NEVER:
3278                 gtk_option_menu_set_history(optmenu, 2);
3279                 break;
3280         default:
3281         }
3282
3283         menu = gtk_option_menu_get_menu(optmenu);
3284         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3285         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3286 }
3287
3288 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3289                                  gpointer data)
3290 {
3291         prefs_common_cancel();
3292         return TRUE;
3293 }
3294
3295 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3296                                      gpointer data)
3297 {
3298         if (event && event->keyval == GDK_Escape)
3299                 prefs_common_cancel();
3300 }
3301
3302 static void prefs_common_ok(void)
3303 {
3304         prefs_common_apply();
3305         gtk_widget_hide(dialog.window);
3306         if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3307                 gtk_widget_hide(quote_desc_win);
3308
3309         inc_unlock();
3310 }
3311
3312 static void prefs_common_apply(void)
3313 {
3314         prefs_set_data_from_dialog(param);
3315         main_window_reflect_prefs_all();
3316         prefs_common_save_config();
3317
3318         inc_autocheck_timer_remove();
3319         inc_autocheck_timer_set();
3320 }
3321
3322 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3323 {
3324         GtkWidget *menu;
3325         GtkWidget *menuitem;
3326
3327         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3328         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3329         *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3330                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3331 }
3332
3333 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3334 {
3335         NextUnreadMsgDialogShow dialog_show;
3336         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3337         GtkWidget *menu;
3338         GtkWidget *menuitem;
3339
3340         dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3341
3342         switch (dialog_show) {
3343         case NEXTUNREADMSGDIALOG_ALWAYS:
3344                 gtk_option_menu_set_history(optmenu, 0);
3345                 break;
3346         case NEXTUNREADMSGDIALOG_ASSUME_YES:
3347                 gtk_option_menu_set_history(optmenu, 1);
3348                 break;
3349         case NEXTUNREADMSGDIALOG_ASSUME_NO:
3350                 gtk_option_menu_set_history(optmenu, 2);
3351                 break;
3352         default:
3353         }
3354
3355         menu = gtk_option_menu_get_menu(optmenu);
3356         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3357         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3358 }
3359
3360 static void prefs_common_cancel(void)
3361 {
3362         gtk_widget_hide(dialog.window);
3363         inc_unlock();
3364 }
3365
3366
3367 static struct _ComposePrefs
3368 {
3369         GtkWidget *window;
3370
3371         GtkWidget *close_btn;
3372 } composeprefs;
3373
3374 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3375 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3376 static void compose_prefs_close(GtkWidget *widget);
3377 static void compose_prefs_fmt_create(void);
3378
3379 static void compose_prefs_fmt_open(void)
3380 {
3381         if (composeprefs.window == NULL)
3382                 compose_prefs_fmt_create();
3383         gtk_widget_show(composeprefs.window);
3384 }
3385
3386
3387 static void compose_prefs_fmt_create(void)
3388 {
3389         GtkWidget *window;
3390         GtkWidget *close_btn;
3391
3392         GtkWidget *frame_quote;
3393         GtkWidget *vbox_quote;
3394         GtkWidget *hbox1;
3395         GtkWidget *checkbtn_quote;
3396         GtkWidget *label_quotemark;
3397         GtkWidget *entry_quotemark;
3398         GtkWidget *scrolledwin_quotefmt;
3399         GtkWidget *text_quotefmt;
3400         GtkWidget *label_quotefmt;
3401         GtkWidget *btn_quotedesc;
3402
3403         GtkWidget *label_fw_quotemark;
3404         GtkWidget *entry_fw_quotemark;
3405         GtkWidget *label_fw_quotefmt;
3406         GtkWidget *text_fw_quotefmt;
3407
3408         window = gtk_window_new(GTK_WINDOW_DIALOG);
3409         gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3410         gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3411         gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3412         gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3413         gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3414         gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3415                            GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3416                            NULL);
3417         gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3418                            GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3419                            NULL);
3420
3421         vbox_quote = gtk_vbox_new(FALSE, 8);
3422         gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3423
3424         PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3425                            _("Quote message when replying"));
3426
3427         hbox1 = gtk_hbox_new (FALSE, 8);
3428         gtk_widget_show (hbox1);
3429         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3430
3431         label_quotemark = gtk_label_new (_("Quotation mark"));
3432         gtk_widget_show (label_quotemark);
3433         gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3434
3435         entry_quotemark = gtk_entry_new ();
3436         gtk_widget_show (entry_quotemark);
3437         gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3438         gtk_widget_set_usize (entry_quotemark, 64, -1);
3439
3440         hbox1 = gtk_hbox_new (FALSE, 0);
3441         gtk_widget_show (hbox1);
3442         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3443
3444         label_quotefmt = gtk_label_new (_("Quotation format:"));
3445         gtk_widget_show (label_quotefmt);
3446         gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3447
3448         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3449         gtk_widget_show (scrolledwin_quotefmt);
3450         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3451         gtk_scrolled_window_set_policy
3452                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3453                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3454
3455         text_quotefmt = gtk_text_new (NULL, NULL);
3456         gtk_widget_show (text_quotefmt);
3457         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3458         gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3459         gtk_widget_set_usize(text_quotefmt, 400, 60);
3460
3461         hbox1 = gtk_hbox_new (FALSE, 8);
3462         gtk_widget_show (hbox1);
3463         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3464
3465         label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3466         gtk_widget_show (label_fw_quotemark);
3467         gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3468
3469         entry_fw_quotemark = gtk_entry_new ();
3470         gtk_widget_show (entry_fw_quotemark);
3471         gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3472         gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3473
3474         hbox1 = gtk_hbox_new (FALSE, 0);
3475         gtk_widget_show (hbox1);
3476         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3477
3478         label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3479         gtk_widget_show (label_fw_quotefmt);
3480         gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3481
3482         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3483         gtk_widget_show (scrolledwin_quotefmt);
3484         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3485         gtk_scrolled_window_set_policy
3486                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3487                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3488
3489         text_fw_quotefmt = gtk_text_new (NULL, NULL);
3490         gtk_widget_show (text_fw_quotefmt);
3491         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3492         gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3493         gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3494
3495         hbox1 = gtk_hbox_new (FALSE, 0);
3496         gtk_widget_show (hbox1);
3497         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3498
3499         btn_quotedesc =
3500                 gtk_button_new_with_label (_(" Description of symbols "));
3501         gtk_widget_show (btn_quotedesc);
3502         gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3503                             FALSE, FALSE, 0);
3504
3505         gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3506                            GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3507
3508
3509         gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3510                                 NULL, NULL, NULL, NULL);
3511         gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3512         gtk_widget_grab_default(close_btn);
3513
3514         gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3515                            GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3516
3517         gtk_widget_show_all(vbox_quote);
3518
3519         composeprefs.window = window;
3520         composeprefs.close_btn = close_btn;
3521
3522         compose.checkbtn_quote = checkbtn_quote;
3523         compose.entry_quotemark = entry_quotemark;
3524         compose.text_quotefmt = text_quotefmt;
3525         compose.entry_fw_quotemark = entry_fw_quotemark;
3526         compose.text_fw_quotefmt = text_fw_quotefmt;
3527 }
3528
3529 static void compose_prefs_close(GtkWidget *widget)
3530 {
3531         gtk_widget_hide(composeprefs.window);
3532 }
3533
3534 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3535 {
3536         gtk_widget_hide(composeprefs.window);
3537
3538         return TRUE;
3539 }
3540
3541 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3542 {
3543         if (event && event->keyval == GDK_Escape) {
3544                 gtk_widget_hide(composeprefs.window);
3545         }
3546 }
3547
3548 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3549 {
3550         GtkWidget *menu;
3551         GtkWidget *menuitem;
3552
3553         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3554         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3555         *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3556                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3557 }  */
3558
3559 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3560 {
3561         RecvDialogShow dialog_show;
3562         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3563         GtkWidget *menu;
3564         GtkWidget *menuitem;
3565
3566         dialog_show = *((RecvDialogShow *)pparam->data);
3567
3568         switch (dialog_show) {
3569         case RECVDIALOG_ALWAYS:
3570                 gtk_option_menu_set_history(optmenu, 0);
3571                 break;
3572         case RECVDIALOG_WINDOW_ACTIVE:
3573                 gtk_option_menu_set_history(optmenu, 1);
3574                 break;
3575         case RECVDIALOG_NEVER:
3576                 gtk_option_menu_set_history(optmenu, 2);
3577                 break;
3578         default:
3579         }
3580
3581         menu = gtk_option_menu_get_menu(optmenu);
3582         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3583         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3584 }     */