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