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