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