2005-01-21 [colin] 1.0.0cvs5
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2004 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 #include "prefswindow.h"
60
61 PrefsCommon prefs_common;
62
63 GtkWidget *notebook;
64
65 static struct Receive {
66         GtkWidget *checkbtn_incext;
67         GtkWidget *entry_incext;
68         GtkWidget *button_incext;
69
70         GtkWidget *checkbtn_autochk;
71         GtkWidget *spinbtn_autochk;
72         GtkObject *spinbtn_autochk_adj;
73
74         GtkWidget *checkbtn_chkonstartup;
75         GtkWidget *checkbtn_scan_after_inc;
76
77
78         GtkWidget *checkbtn_newmail_auto;
79         GtkWidget *checkbtn_newmail_manu;
80         GtkWidget *entry_newmail_notify_cmd;
81         GtkWidget *hbox_newmail_notify;
82         GtkWidget *optmenu_recvdialog;
83         GtkWidget *checkbtn_no_recv_err_panel;
84         GtkWidget *checkbtn_close_recv_dialog;
85 } receive;
86
87 static struct Send {
88         GtkWidget *checkbtn_savemsg;
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
103         GtkWidget *checkbtn_reply_account_autosel;
104         GtkWidget *checkbtn_forward_account_autosel;
105         GtkWidget *checkbtn_reedit_account_autosel;
106         GtkWidget *checkbtn_quote;
107         GtkWidget *checkbtn_default_reply_list;
108         GtkWidget *checkbtn_forward_as_attachment;
109         GtkWidget *checkbtn_redirect_keep_from;
110         GtkWidget *checkbtn_block_cursor;
111         GtkWidget *checkbtn_reply_with_quote;
112         
113         GtkWidget *checkbtn_autosave;
114         GtkWidget *entry_autosave_length;
115 } compose;
116
117 static struct Quote {
118         GtkWidget *entry_quotemark;
119         GtkWidget *text_quotefmt;
120
121         GtkWidget *entry_fw_quotemark;
122         GtkWidget *text_fw_quotefmt;
123         
124         GtkWidget *entry_quote_chars;
125 } quote;
126
127 static struct Display {
128         GtkWidget *chkbtn_folder_unread;
129         GtkWidget *entry_ng_abbrev_len;
130         GtkWidget *spinbtn_ng_abbrev_len;
131         GtkObject *spinbtn_ng_abbrev_len_adj;
132
133         GtkWidget *chkbtn_transhdr;
134
135         GtkWidget *chkbtn_swapfrom;
136         GtkWidget *chkbtn_useaddrbook;
137         GtkWidget *chkbtn_threadsubj;
138         GtkWidget *entry_datefmt;
139 } display;
140
141 static struct Message {
142         GtkWidget *chkbtn_mbalnum;
143         GtkWidget *chkbtn_disphdrpane;
144         GtkWidget *chkbtn_disphdr;
145         GtkWidget *spinbtn_linespc;
146         GtkObject *spinbtn_linespc_adj;
147         GtkWidget *chkbtn_headspc;
148
149         GtkWidget *chkbtn_smoothscroll;
150         GtkWidget *spinbtn_scrollstep;
151         GtkObject *spinbtn_scrollstep_adj;
152         GtkWidget *chkbtn_halfpage;
153
154         GtkWidget *chkbtn_attach_desc;
155 } message;
156
157 static struct Interface {
158         /* GtkWidget *checkbtn_emacs; */
159         GtkWidget *checkbtn_always_show_msg;
160         GtkWidget *checkbtn_openunread;
161         GtkWidget *checkbtn_mark_as_read_on_newwin;
162         GtkWidget *checkbtn_openinbox;
163         GtkWidget *checkbtn_immedexec;
164         GtkWidget *optmenu_nextunreadmsgdialog;
165 } interface;
166
167 static struct Other {
168         GtkWidget *checkbtn_addaddrbyclick;
169         GtkWidget *checkbtn_confonexit;
170         GtkWidget *checkbtn_cleanonexit;
171         GtkWidget *checkbtn_askonclean;
172         GtkWidget *checkbtn_warnqueued;
173         GtkWidget *checkbtn_cliplog;
174         GtkWidget *loglength_entry;
175 #if 0
176 #ifdef USE_OPENSSL
177         GtkWidget *checkbtn_ssl_ask_unknown_valid;
178 #endif
179 #endif
180
181         GtkWidget *spinbtn_iotimeout;
182         GtkObject *spinbtn_iotimeout_adj;
183 } other;
184
185 static struct KeybindDialog {
186         GtkWidget *window;
187         GtkWidget *combo;
188 } keybind;
189
190 static void prefs_common_charset_set_data_from_optmenu     (PrefParam *pparam);
191 static void prefs_common_charset_set_optmenu               (PrefParam *pparam);
192 static void prefs_common_encoding_set_data_from_optmenu    (PrefParam *pparam);
193 static void prefs_common_encoding_set_optmenu              (PrefParam *pparam);
194 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
195 static void prefs_common_recv_dialog_set_optmenu           (PrefParam *pparam);
196 static void prefs_common_recv_dialog_newmail_notify_toggle_cb   (GtkWidget *w,
197                                                                  gpointer data);
198 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
199 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
200 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
201 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
202 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
203 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
204
205 /*
206    parameter name, default value, pointer to the prefs variable, data type,
207    pointer to the widget pointer,
208    pointer to the function for data setting,
209    pointer to the function for widget setting
210  */
211
212 static PrefParam param[] = {
213         /* Receive */
214         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
215          &receive.checkbtn_incext,
216          prefs_set_data_from_toggle, prefs_set_toggle},
217         {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
218          &receive.entry_incext,
219          prefs_set_data_from_entry, prefs_set_entry},
220
221         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
222          &receive.checkbtn_autochk,
223          prefs_set_data_from_toggle, prefs_set_toggle},
224         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
225          &receive.spinbtn_autochk,
226          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
227         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
228          &receive.checkbtn_chkonstartup,
229          prefs_set_data_from_toggle, prefs_set_toggle},
230         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
231          P_BOOL, &receive.checkbtn_scan_after_inc,
232          prefs_set_data_from_toggle, prefs_set_toggle},
233         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
234          P_BOOL, &receive.checkbtn_newmail_manu,
235          prefs_set_data_from_toggle, prefs_set_toggle},
236         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
237         P_BOOL, &receive.checkbtn_newmail_auto,
238          prefs_set_data_from_toggle, prefs_set_toggle},
239         {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
240          &receive.entry_newmail_notify_cmd,
241          prefs_set_data_from_entry, prefs_set_entry},
242         {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
243          &receive.optmenu_recvdialog,
244          prefs_common_recv_dialog_set_data_from_optmenu,
245          prefs_common_recv_dialog_set_optmenu},
246         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
247          P_BOOL, &receive.checkbtn_no_recv_err_panel,
248          prefs_set_data_from_toggle, prefs_set_toggle},
249         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
250          P_BOOL, &receive.checkbtn_close_recv_dialog,
251          prefs_set_data_from_toggle, prefs_set_toggle},
252  
253         /* Send */
254         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
255          &p_send.checkbtn_savemsg,
256          prefs_set_data_from_toggle, prefs_set_toggle},
257         {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
258          &p_send.optmenu_senddialog,
259          prefs_common_send_dialog_set_data_from_optmenu,
260          prefs_common_send_dialog_set_optmenu},
261
262         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
263          &p_send.optmenu_charset,
264          prefs_common_charset_set_data_from_optmenu,
265          prefs_common_charset_set_optmenu},
266         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
267          &p_send.optmenu_encoding_method,
268          prefs_common_encoding_set_data_from_optmenu,
269          prefs_common_encoding_set_optmenu},
270
271         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
272          P_BOOL, NULL, NULL, NULL},
273
274         /* Compose */
275         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
276          &compose.checkbtn_autoextedit,
277          prefs_set_data_from_toggle, prefs_set_toggle},
278         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
279          P_BOOL, &compose.checkbtn_forward_as_attachment,
280          prefs_set_data_from_toggle, prefs_set_toggle},
281         {"redirect_keep_from", "FALSE",
282          &prefs_common.redirect_keep_from, P_BOOL,
283          &compose.checkbtn_redirect_keep_from,
284          prefs_set_data_from_toggle, prefs_set_toggle},
285         {"undo_level", "50", &prefs_common.undolevels, P_INT,
286          &compose.spinbtn_undolevel,
287          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
288         {"block_cursor", "FALSE", &prefs_common.block_cursor,
289          P_BOOL, &compose.checkbtn_block_cursor,
290          prefs_set_data_from_toggle, prefs_set_toggle},
291
292         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
293          NULL, NULL, NULL},
294         {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
295          NULL, NULL, NULL},
296         {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
297          NULL, NULL, NULL},
298         {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL, 
299          NULL, NULL, NULL},
300         {"autosave", "FALSE", &prefs_common.autosave,
301          P_BOOL, &compose.checkbtn_autosave,
302          prefs_set_data_from_toggle, prefs_set_toggle},
303         {"autosave_length", "50", &prefs_common.autosave_length,
304          P_INT, &compose.entry_autosave_length,
305          prefs_set_data_from_entry, prefs_set_entry},
306 #if USE_ASPELL
307         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
308          NULL, NULL, NULL},
309         {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
310          NULL, NULL, NULL},
311         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
312          NULL, NULL, NULL},
313         {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
314          NULL, NULL, NULL},
315         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
316          NULL, NULL, NULL},
317         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
318          NULL, NULL, NULL},
319         {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
320          NULL, NULL, NULL},
321 #endif
322         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
323          &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
324
325         /* Account autoselection */
326         {"reply_account_autoselect", "TRUE",
327          &prefs_common.reply_account_autosel, P_BOOL,
328          &compose.checkbtn_reply_account_autosel,
329          prefs_set_data_from_toggle, prefs_set_toggle},
330         {"forward_account_autoselect", "TRUE",
331          &prefs_common.forward_account_autosel, P_BOOL,
332          &compose.checkbtn_forward_account_autosel,
333          prefs_set_data_from_toggle, prefs_set_toggle},
334         {"reedit_account_autoselect", "TRUE",
335          &prefs_common.reedit_account_autosel, P_BOOL,
336          &compose.checkbtn_reedit_account_autosel,
337          prefs_set_data_from_toggle, prefs_set_toggle},
338
339         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
340          &compose.checkbtn_default_reply_list,
341          prefs_set_data_from_toggle, prefs_set_toggle},
342
343         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
344          NULL, NULL, NULL},
345
346         /* Quote */
347         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
348          &quote.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
349         {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
350          &prefs_common.quotefmt, P_STRING, &quote.text_quotefmt,
351          prefs_set_data_from_text, prefs_set_text},
352
353         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
354          &quote.entry_fw_quotemark,
355          prefs_set_data_from_entry, prefs_set_entry},
356         {"forward_quote_format",
357          "\\n\\nBegin forwarded message:\\n\\n"
358          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
359          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
360          &prefs_common.fw_quotefmt, P_STRING, &quote.text_fw_quotefmt,
361          prefs_set_data_from_text, prefs_set_text},
362         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
363          &quote.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
364
365         /* Display */
366         {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
367          NULL, NULL, NULL},
368         {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
369          &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
370         {"small_font",   "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
371          &prefs_common.smallfont,   P_STRING, NULL, NULL, NULL},
372         {"bold_font",    "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
373          &prefs_common.boldfont,    P_STRING, NULL, NULL, NULL},
374         {"normal_font",  "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
375          &prefs_common.normalfont,  P_STRING, NULL, NULL, NULL},
376
377
378         {"display_folder_unread_num", "TRUE",
379          &prefs_common.display_folder_unread, P_BOOL,
380          &display.chkbtn_folder_unread,
381          prefs_set_data_from_toggle, prefs_set_toggle},
382         {"newsgroup_abbrev_len", "16",
383          &prefs_common.ng_abbrev_len, P_INT,
384          &display.spinbtn_ng_abbrev_len,
385          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
386
387         {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
388          &display.chkbtn_transhdr,
389          prefs_set_data_from_toggle, prefs_set_toggle},
390
391         /* Display: Summary View */
392         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
393          &display.chkbtn_swapfrom,
394          prefs_set_data_from_toggle, prefs_set_toggle},
395         {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
396          &display.chkbtn_useaddrbook,
397          prefs_set_data_from_toggle, prefs_set_toggle},
398         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
399          &display.chkbtn_threadsubj,
400          prefs_set_data_from_toggle, prefs_set_toggle},
401         {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
402          P_STRING, &display.entry_datefmt,
403          prefs_set_data_from_entry, prefs_set_entry},
404
405         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
406          NULL, NULL, NULL},
407         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
408          NULL, NULL, NULL},
409         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
410         P_INT, NULL, NULL, NULL },
411
412         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
413          NULL, NULL, NULL},
414         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
415          NULL, NULL, NULL},
416         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
417          NULL, NULL, NULL},
418         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
419          NULL, NULL, NULL},
420
421         {"folderview_vscrollbar_policy", "0",
422          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
423          NULL, NULL, NULL},
424
425         {"summary_col_show_mark", "TRUE",
426          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
427         {"summary_col_show_unread", "TRUE",
428          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
429         {"summary_col_show_mime", "TRUE",
430          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
431         {"summary_col_show_subject", "TRUE",
432          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
433         {"summary_col_show_from", "TRUE",
434          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
435         {"summary_col_show_date", "TRUE",
436          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
437         {"summary_col_show_size", "TRUE",
438          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
439         {"summary_col_show_number", "FALSE",
440          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
441         {"summary_col_show_score", "FALSE",
442          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
443         {"summary_col_show_locked", "FALSE",
444          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
445
446         {"summary_col_pos_mark", "0",
447           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
448         {"summary_col_pos_unread", "1",
449           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
450         {"summary_col_pos_mime", "2",
451           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
452         {"summary_col_pos_subject", "3",
453           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
454         {"summary_col_pos_from", "4",
455           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
456         {"summary_col_pos_date", "5",
457           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
458         {"summary_col_pos_size", "6",
459           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
460         {"summary_col_pos_number", "7",
461           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
462         {"summary_col_pos_score", "8",
463          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
464         {"summary_col_pos_locked", "9",
465          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
466
467         {"summary_col_size_mark", "10",
468          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
469         {"summary_col_size_unread", "13",
470          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
471         {"summary_col_size_mime", "10",
472          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
473         {"summary_col_size_subject", "200",
474          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
475         {"summary_col_size_from", "120",
476          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
477         {"summary_col_size_date", "118",
478          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
479         {"summary_col_size_size", "45",
480          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
481         {"summary_col_size_number", "40",
482          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
483         {"summary_col_size_score", "40",
484          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
485         {"summary_col_size_locked", "13",
486          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
487
488         /* Widget size */
489         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
490          NULL, NULL, NULL},
491         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
492          NULL, NULL, NULL},
493         {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
494          NULL, NULL, NULL},
495         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
496          NULL, NULL, NULL},
497         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
498          NULL, NULL, NULL},
499
500         {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
501          NULL, NULL, NULL},
502         {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
503          NULL, NULL, NULL},
504         {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
505          NULL, NULL, NULL},
506         {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
507          NULL, NULL, NULL},
508
509         {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
510          NULL, NULL, NULL},
511         {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
512          NULL, NULL, NULL},
513
514         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
515          NULL, NULL, NULL},
516         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
517          NULL, NULL, NULL},
518         {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
519          NULL, NULL, NULL},
520         {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
521          NULL, NULL, NULL},
522         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
523          NULL, NULL, NULL},
524
525         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
526          NULL, NULL, NULL},
527         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
528          NULL, NULL, NULL},
529         {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
530          NULL, NULL, NULL},
531         {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
532          NULL, NULL, NULL},
533         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
534          NULL, NULL, NULL},
535         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
536          NULL, NULL, NULL},
537         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
538          NULL, NULL, NULL},
539         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
540          NULL, NULL, NULL},
541         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
542          NULL, NULL, NULL},
543         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
544          NULL, NULL, NULL},
545         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
546          NULL, NULL, NULL},
547         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
548          NULL, NULL, NULL},
549         {"compose_width", "600", &prefs_common.compose_width, P_INT,
550          NULL, NULL, NULL},
551         {"compose_height", "560", &prefs_common.compose_height, P_INT,
552          NULL, NULL, NULL},
553         {"compose_x", "0", &prefs_common.compose_x, P_INT,
554          NULL, NULL, NULL},
555         {"compose_y", "0", &prefs_common.compose_y, P_INT,
556          NULL, NULL, NULL},
557         /* Message */
558         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
559          NULL, NULL, NULL},
560
561         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
562          NULL, NULL, NULL},
563         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
564          NULL, NULL, NULL},
565         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
566          NULL, NULL, NULL},
567         {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
568          NULL, NULL, NULL},
569         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
570          NULL, NULL, NULL},
571         {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
572          NULL, NULL, NULL},
573         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
574          P_BOOL, NULL, NULL, NULL},
575
576         {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
577          &message.chkbtn_mbalnum,
578          prefs_set_data_from_toggle, prefs_set_toggle},
579         {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
580          P_BOOL, &message.chkbtn_disphdrpane,
581          prefs_set_data_from_toggle, prefs_set_toggle},
582         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
583          &message.chkbtn_disphdr,
584          prefs_set_data_from_toggle, prefs_set_toggle},
585         {"line_space", "2", &prefs_common.line_space, P_INT,
586          &message.spinbtn_linespc,
587          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
588         {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
589          &message.chkbtn_headspc,
590          prefs_set_data_from_toggle, prefs_set_toggle},
591
592         {"enable_smooth_scroll", "FALSE",
593          &prefs_common.enable_smooth_scroll, P_BOOL,
594          &message.chkbtn_smoothscroll,
595          prefs_set_data_from_toggle, prefs_set_toggle},
596         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
597          &message.spinbtn_scrollstep,
598          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
599         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
600          &message.chkbtn_halfpage,
601          prefs_set_data_from_toggle, prefs_set_toggle},
602
603         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
604          NULL, NULL, NULL},
605
606         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
607          &message.chkbtn_attach_desc,
608          prefs_set_data_from_toggle, prefs_set_toggle},
609         {"attach_save_directory", NULL,
610          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
611
612         /* MIME viewer */
613         {"mime_image_viewer", "display '%s'",
614          &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
615         {"mime_audio_player", "play '%s'",
616          &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
617         {"mime_open_command", "gedit '%s'",
618          &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
619
620         /* Interface */
621         {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
622          NULL, NULL, NULL},
623         {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
624          NULL, NULL, NULL},
625
626         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
627          NULL, NULL, NULL}, */
628         {"always_show_message_when_selected", "FALSE",
629          &prefs_common.always_show_msg,
630          P_BOOL, &interface.checkbtn_always_show_msg,
631          prefs_set_data_from_toggle, prefs_set_toggle},
632         {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
633          P_BOOL, &interface.checkbtn_openunread,
634          prefs_set_data_from_toggle, prefs_set_toggle},
635         {"mark_as_read_on_new_window", "FALSE",
636          &prefs_common.mark_as_read_on_new_window,
637          P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
638          prefs_set_data_from_toggle, prefs_set_toggle},
639         {"mark_as_read_delay", "0",
640          &prefs_common.mark_as_read_delay, P_INT, 
641          NULL, NULL, NULL},
642         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
643          P_BOOL, &interface.checkbtn_openinbox,
644          prefs_set_data_from_toggle, prefs_set_toggle},
645         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
646          &interface.checkbtn_immedexec,
647          prefs_set_data_from_toggle, prefs_set_toggle},
648         {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
649          &interface.optmenu_nextunreadmsgdialog,
650          prefs_nextunreadmsgdialog_set_data_from_optmenu,
651          prefs_nextunreadmsgdialog_set_optmenu},
652
653         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
654          &prefs_common.pixmap_theme_path, P_STRING,
655          NULL, NULL, NULL},
656
657         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
658          NULL, NULL, NULL},
659         
660         /* Other */
661         {"uri_open_command", DEFAULT_BROWSER_CMD,
662          &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
663         {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
664          NULL, NULL, NULL},
665         {"ext_editor_command", "gedit %s",
666          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
667
668         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
669          P_BOOL, &other.checkbtn_addaddrbyclick,
670          prefs_set_data_from_toggle, prefs_set_toggle},
671
672         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
673          &other.checkbtn_confonexit,
674          prefs_set_data_from_toggle, prefs_set_toggle},
675         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
676          &other.checkbtn_cleanonexit,
677          prefs_set_data_from_toggle, prefs_set_toggle},
678         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
679          &other.checkbtn_askonclean,
680          prefs_set_data_from_toggle, prefs_set_toggle},
681         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
682          P_BOOL, &other.checkbtn_warnqueued,
683          prefs_set_data_from_toggle, prefs_set_toggle},
684 #if 0
685 #ifdef USE_OPENSSL
686         {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
687          P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
688          prefs_set_data_from_toggle, prefs_set_toggle},
689 #endif
690 #endif
691         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
692          NULL, NULL, NULL},
693         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
694          NULL, NULL, NULL},
695         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
696          NULL, NULL, NULL},
697         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
698          NULL, NULL, NULL},
699
700         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
701          P_INT, &other.spinbtn_iotimeout,
702          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
703         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
704          NULL, NULL, NULL},
705         {"important_score", "1", &prefs_common.important_score, P_INT,
706          NULL, NULL, NULL},
707         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
708          &other.checkbtn_cliplog,
709          prefs_set_data_from_toggle, prefs_set_toggle},
710         {"log_length", "500", &prefs_common.loglength, P_INT,
711          &other.loglength_entry,
712          prefs_set_data_from_entry, prefs_set_entry},
713
714         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
715          NULL, NULL, NULL},
716         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
717          NULL, NULL, NULL},
718
719         {"color_new", "179", &prefs_common.color_new, P_COLOR,
720          NULL, NULL, NULL},
721
722         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
723 };
724
725 /* widget creating functions */
726 static void prefs_common_create         (void);
727 static void prefs_receive_create        (void);
728 static void prefs_send_create           (void);
729 static void prefs_compose_create        (void);
730 static void prefs_quote_create          (void);
731 static void prefs_display_create        (void);
732 static void prefs_message_create        (void);
733 static void prefs_interface_create      (void);
734 static void prefs_other_create          (void);
735
736 static void date_format_ok_btn_clicked          (GtkButton      *button,
737                                                  GtkWidget     **widget);
738 static void date_format_cancel_btn_clicked      (GtkButton      *button,
739                                                  GtkWidget     **widget);
740 static void date_format_key_pressed             (GtkWidget      *keywidget,
741                                                  GdkEventKey    *event,
742                                                  GtkWidget     **widget);
743 static gboolean date_format_on_delete           (GtkWidget      *dialogwidget,
744                                                  GdkEventAny    *event,
745                                                  GtkWidget     **widget);
746 static void date_format_entry_on_change         (GtkEditable    *editable,
747                                                  GtkLabel       *example);
748 static void date_format_select_row              (GtkWidget      *date_format_list,
749                                                  gint            row,
750                                                  gint            column,
751                                                  GdkEventButton *event,
752                                                  GtkWidget      *date_format);
753 static GtkWidget *date_format_create            (GtkButton      *button,
754                                                  void           *data);
755
756 static void prefs_keybind_select                (void);
757 static gint prefs_keybind_deleted               (GtkWidget      *widget,
758                                                  GdkEventAny    *event,
759                                                  gpointer        data);
760 static void prefs_keybind_key_pressed           (GtkWidget      *widget,
761                                                  GdkEventKey    *event,
762                                                  gpointer        data);
763 static void prefs_keybind_cancel                (void);
764 static void prefs_keybind_apply_clicked         (GtkWidget      *widget);
765
766 static void prefs_common_apply          (void);
767
768 typedef struct CommonPage
769 {
770         PrefsPage page;
771  
772         GtkWidget *vbox;
773 } CommonPage;
774
775 static CommonPage common_page;
776
777 static void create_widget_func(PrefsPage * _page,
778                                            GtkWindow * window,
779                                            gpointer data)
780 {
781         CommonPage *page = (CommonPage *) _page;
782         GtkWidget *vbox;
783
784         vbox = gtk_vbox_new(FALSE, 6);
785         gtk_widget_show(vbox);
786
787         if (notebook == NULL)
788                 prefs_common_create();
789         gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
790         gtk_notebook_set_page(GTK_NOTEBOOK(notebook), 0);
791
792         prefs_set_dialog(param);
793
794         page->vbox = vbox;
795
796         page->page.widget = vbox;
797 }
798
799 static void destroy_widget_func(PrefsPage *_page)
800 {
801         CommonPage *page = (CommonPage *) _page;
802
803         gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
804 }
805
806 static void save_func(PrefsPage * _page)
807 {
808         prefs_common_apply();
809 }
810
811 void prefs_common_init(void) 
812 {
813         static gchar *path[2];
814
815         prefs_common.disphdr_list = NULL;
816             
817         path[0] = _("Common");
818         path[2] = NULL;
819         
820         common_page.page.path = path;
821         common_page.page.weight = 1000.0;
822         common_page.page.create_widget = create_widget_func;
823         common_page.page.destroy_widget = destroy_widget_func;
824         common_page.page.save_page = save_func;
825
826         prefs_gtk_register_page((PrefsPage *) &common_page);
827 }
828
829 PrefsCommon *prefs_common_get(void)
830 {
831         return &prefs_common;
832 }
833
834 /*
835  * Read history list from the specified history file
836  */
837 GList *prefs_common_read_history(const gchar *history) 
838 {
839         FILE *fp;
840         gchar *path;
841         gchar buf[PREFSBUFSIZE];
842         GList *tmp = NULL;
843
844         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
845                            NULL);
846         if ((fp = fopen(path, "rb")) == NULL) {
847                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
848                 g_free(path);
849                 return NULL;
850         }
851         g_free(path);
852         while (fgets(buf, sizeof(buf), fp) != NULL) {
853                 g_strstrip(buf);
854                 if (buf[0] == '\0') continue;
855                 tmp = add_history(tmp, buf);
856         }
857         fclose(fp);
858
859         tmp = g_list_reverse(tmp);
860
861         return tmp;
862 }
863
864 void prefs_common_read_config(void)
865 {
866         prefs_read_config(param, "Common", COMMON_RC);
867
868         prefs_common.mime_open_cmd_history =
869                 prefs_common_read_history(COMMAND_HISTORY);
870         prefs_common.summary_quicksearch_history =
871                 prefs_common_read_history(QUICKSEARCH_HISTORY);
872 }
873
874 /*
875  * Save history list to the specified history file
876  */
877 void prefs_common_save_history(const gchar *history, GList *list)
878 {
879         GList *cur;
880         FILE *fp;
881         gchar *path;
882
883         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
884                            NULL);
885         if ((fp = fopen(path, "wb")) == NULL) {
886                 FILE_OP_ERROR(path, "fopen");
887                 g_free(path);
888                 return;
889         }
890
891         for (cur = list; cur != NULL; cur = cur->next) {
892                 fputs((gchar *)cur->data, fp);
893                 fputc('\n', fp);
894         }
895
896         fclose(fp);
897         g_free(path);
898 }
899
900 void prefs_common_write_config(void)
901 {
902         prefs_write_config(param, "Common", COMMON_RC);
903
904         prefs_common_save_history(COMMAND_HISTORY, 
905                 prefs_common.mime_open_cmd_history);
906         prefs_common_save_history(QUICKSEARCH_HISTORY, 
907                 prefs_common.summary_quicksearch_history);
908 }
909
910 static void prefs_common_create(void)
911 {
912         gint page = 0;
913
914         debug_print("Creating common preferences window...\n");
915
916         notebook = gtk_notebook_new ();
917         gtk_widget_show(notebook);
918         gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
919         /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
920         gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
921         
922         gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
923
924         gtk_widget_ref(notebook);
925
926         /* create all widgets on notebook */
927         prefs_receive_create();
928         SET_NOTEBOOK_LABEL(notebook, _("Receive"),   page++);
929         prefs_send_create();
930         SET_NOTEBOOK_LABEL(notebook, _("Send"),      page++);
931         prefs_compose_create();
932         SET_NOTEBOOK_LABEL(notebook, _("Compose"),   page++);
933         prefs_quote_create();
934         SET_NOTEBOOK_LABEL(notebook, _("Quote"),     page++);
935         prefs_display_create();
936         SET_NOTEBOOK_LABEL(notebook, _("Display"),   page++);
937         prefs_message_create();
938         SET_NOTEBOOK_LABEL(notebook, _("Message"),   page++);
939         prefs_interface_create();
940         SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
941         prefs_other_create();
942         SET_NOTEBOOK_LABEL(notebook, _("Other"),     page++);
943
944         gtk_widget_show_all(notebook);
945 }
946
947 static void prefs_receive_create(void)
948 {
949         GtkWidget *vbox1;
950         GtkWidget *vbox2;
951         GtkWidget *frame_incext;
952         GtkWidget *checkbtn_incext;
953         GtkWidget *hbox;
954         GtkWidget *label_incext;
955         GtkWidget *entry_incext;
956         /* GtkWidget *button_incext; */
957
958         GtkWidget *hbox_autochk;
959         GtkWidget *checkbtn_autochk;
960         GtkWidget *label_autochk1;
961         GtkObject *spinbtn_autochk_adj;
962         GtkWidget *spinbtn_autochk;
963         GtkWidget *label_autochk2;
964         GtkWidget *checkbtn_chkonstartup;
965         GtkWidget *checkbtn_scan_after_inc;
966
967
968         GtkWidget *frame_newmail;
969         GtkWidget *hbox_newmail_notify;
970         GtkWidget *checkbtn_newmail_auto;
971         GtkWidget *checkbtn_newmail_manu;
972         GtkWidget *entry_newmail_notify_cmd;
973         GtkWidget *label_newmail_notify_cmd;
974
975         GtkWidget *hbox_recvdialog;
976         GtkWidget *label_recvdialog;
977         GtkWidget *menu;
978         GtkWidget *menuitem;
979         GtkWidget *optmenu_recvdialog;
980         GtkWidget *checkbtn_no_recv_err_panel;
981         GtkWidget *checkbtn_close_recv_dialog;
982
983         vbox1 = gtk_vbox_new (FALSE, VSPACING);
984         gtk_widget_show (vbox1);
985         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
986         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
987
988         PACK_FRAME(vbox1, frame_incext, _("External program"));
989
990         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
991         gtk_widget_show (vbox2);
992         gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
993         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
994
995         /* Use of external incorporation program */
996         PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
997                            _("Use external program for incorporation"));
998
999         hbox = gtk_hbox_new (FALSE, 8);
1000         gtk_widget_show (hbox);
1001         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1002         SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1003
1004         label_incext = gtk_label_new (_("Command"));
1005         gtk_widget_show (label_incext);
1006         gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1007
1008         entry_incext = gtk_entry_new ();
1009         gtk_widget_show (entry_incext);
1010         gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1011
1012 #if 0
1013         button_incext = gtk_button_new_with_label ("... ");
1014         gtk_widget_show (button_incext);
1015         gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1016 #endif
1017
1018         vbox2 = gtk_vbox_new (FALSE, 0);
1019         gtk_widget_show (vbox2);
1020         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1021
1022         /* Auto-checking */
1023         hbox_autochk = gtk_hbox_new (FALSE, 8);
1024         gtk_widget_show (hbox_autochk);
1025         gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1026
1027         PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1028                            _("Auto-check new mail"));
1029
1030         label_autochk1 = gtk_label_new (_("every"));
1031         gtk_widget_show (label_autochk1);
1032         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1033
1034         spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1035         spinbtn_autochk = gtk_spin_button_new
1036                 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1037         gtk_widget_show (spinbtn_autochk);
1038         gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1039         gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1040         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1041
1042         label_autochk2 = gtk_label_new (_("minute(s)"));
1043         gtk_widget_show (label_autochk2);
1044         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1045
1046         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1047         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1048         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1049
1050         PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1051                            _("Check new mail on startup"));
1052         PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1053                            _("Update all local folders after incorporation"));
1054
1055
1056         /* receive dialog */
1057         hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1058         gtk_widget_show (hbox_recvdialog);
1059         gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1060
1061         label_recvdialog = gtk_label_new (_("Show receive dialog"));
1062         gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1063         gtk_widget_show (label_recvdialog);
1064         gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1065
1066         optmenu_recvdialog = gtk_option_menu_new ();
1067         gtk_widget_show (optmenu_recvdialog);
1068         gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1069
1070         menu = gtk_menu_new ();
1071         MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1072         MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1073                       RECV_DIALOG_MANUAL);
1074         MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1075
1076         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1077
1078         PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1079                            _("Don't popup error dialog on receive error"));
1080
1081         PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1082                            _("Close receive dialog when finished"));
1083         
1084         PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1085                                            "arrives"));
1086         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1087         gtk_widget_show (vbox2);
1088         gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1089         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1090
1091         hbox = gtk_hbox_new (TRUE, 8);
1092         gtk_widget_show (hbox);
1093         PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1094                            _("after autochecking"));
1095         PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1096                            _("after manual checking"));
1097         gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1098         gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1099                            GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1100                            NULL);
1101         gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1102                            GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1103                            NULL);
1104
1105         hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1106         gtk_widget_show (hbox);
1107         gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE, 
1108                             FALSE, 0);
1109
1110         label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1111                                                     "(use %d as number of new "
1112                                                     "mails)"));
1113         gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd), 
1114                               GTK_JUSTIFY_RIGHT);
1115         gtk_widget_show (label_newmail_notify_cmd);
1116         gtk_box_pack_start (GTK_BOX (hbox_newmail_notify), 
1117                             label_newmail_notify_cmd, FALSE, FALSE, 0);
1118
1119         entry_newmail_notify_cmd = gtk_entry_new ();
1120         gtk_widget_show (entry_newmail_notify_cmd);
1121         gtk_box_pack_start (GTK_BOX (hbox_newmail_notify), 
1122                             entry_newmail_notify_cmd, TRUE, TRUE, 0);
1123
1124         gtk_widget_set_sensitive(hbox_newmail_notify, 
1125                                  prefs_common.newmail_notify_auto || 
1126                                  prefs_common.newmail_notify_manu);
1127
1128         receive.checkbtn_incext = checkbtn_incext;
1129         receive.entry_incext    = entry_incext;
1130         /* receive.button_incext   = button_incext; */
1131
1132         receive.checkbtn_autochk    = checkbtn_autochk;
1133         receive.spinbtn_autochk     = spinbtn_autochk;
1134         receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1135
1136         receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1137         receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1138
1139
1140         receive.checkbtn_newmail_auto  = checkbtn_newmail_auto;
1141         receive.checkbtn_newmail_manu  = checkbtn_newmail_manu;
1142         receive.hbox_newmail_notify    = hbox_newmail_notify;
1143         receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1144         receive.optmenu_recvdialog          = optmenu_recvdialog;
1145         receive.checkbtn_no_recv_err_panel  = checkbtn_no_recv_err_panel;
1146         receive.checkbtn_close_recv_dialog  = checkbtn_close_recv_dialog;
1147 }
1148
1149 static void prefs_send_create(void)
1150 {
1151         GtkWidget *vbox1;
1152         GtkWidget *vbox2;
1153         GtkWidget *hbox1;
1154         GtkWidget *checkbtn_savemsg;
1155         GtkWidget *label_outcharset;
1156         GtkWidget *optmenu_charset;
1157         GtkWidget *optmenu_menu;
1158         GtkWidget *menuitem;
1159         GtkTooltips *charset_tooltip;
1160         GtkWidget *optmenu_encoding;
1161         GtkWidget *label_encoding;
1162         GtkTooltips *encoding_tooltip;
1163         GtkWidget *label_senddialog;
1164         GtkWidget *menu;
1165         GtkWidget *optmenu_senddialog;
1166         GtkWidget *hbox_senddialog;
1167
1168         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1169         gtk_widget_show (vbox1);
1170         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1171         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1172
1173         vbox2 = gtk_vbox_new (FALSE, 0);
1174         gtk_widget_show (vbox2);
1175         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1176
1177         PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1178                            _("Save sent messages to Sent folder"));
1179
1180         hbox_senddialog = gtk_hbox_new (FALSE, 8);
1181         gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1182
1183         label_senddialog = gtk_label_new (_("Show send dialog"));
1184         gtk_widget_show (label_senddialog);
1185         gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1186
1187         optmenu_senddialog = gtk_option_menu_new ();
1188         gtk_widget_show (optmenu_senddialog);
1189         gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1190         
1191         menu = gtk_menu_new ();
1192         MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1193         MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1194
1195         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1196
1197         hbox1 = gtk_hbox_new (FALSE, 8);
1198         gtk_widget_show (hbox1);
1199         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1200
1201         label_outcharset = gtk_label_new (_("Outgoing codeset"));
1202         gtk_widget_show (label_outcharset);
1203         gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1204
1205         charset_tooltip = gtk_tooltips_new();
1206
1207         optmenu_charset = gtk_option_menu_new ();
1208         gtk_widget_show (optmenu_charset);
1209         gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1210                              _("If `Automatic' is selected, the optimal encoding"
1211                                " for the current locale will be used"),
1212                              NULL);
1213         gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1214
1215         optmenu_menu = gtk_menu_new ();
1216
1217 #define SET_MENUITEM(str, data) \
1218 { \
1219         MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1220 }
1221
1222         SET_MENUITEM(_("Automatic (Recommended)"),       CS_AUTO);
1223         SET_MENUITEM(_("7bit ascii (US-ASCII)"),         CS_US_ASCII);
1224 #if HAVE_ICONV
1225         SET_MENUITEM(_("Unicode (UTF-8)"),               CS_UTF_8);
1226 #endif
1227         SET_MENUITEM(_("Western European (ISO-8859-1)"),  CS_ISO_8859_1);
1228         SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1229         SET_MENUITEM(_("Central European (ISO-8859-2)"),  CS_ISO_8859_2);
1230         SET_MENUITEM(_("Baltic (ISO-8859-13)"),           CS_ISO_8859_13);
1231         SET_MENUITEM(_("Baltic (ISO-8859-4)"),            CS_ISO_8859_4);
1232         SET_MENUITEM(_("Greek (ISO-8859-7)"),             CS_ISO_8859_7);
1233         SET_MENUITEM(_("Turkish (ISO-8859-9)"),           CS_ISO_8859_9);
1234 #if HAVE_ICONV
1235         SET_MENUITEM(_("Cyrillic (ISO-8859-5)"),          CS_ISO_8859_5);
1236 #endif
1237         SET_MENUITEM(_("Cyrillic (KOI8-R)"),             CS_KOI8_R);
1238 #if HAVE_ICONV
1239         SET_MENUITEM(_("Cyrillic (Windows-1251)"),       CS_WINDOWS_1251);
1240         SET_MENUITEM(_("Cyrillic (KOI8-U)"),             CS_KOI8_U);
1241 #endif
1242         SET_MENUITEM(_("Japanese (ISO-2022-JP)"),        CS_ISO_2022_JP);
1243 #if 0
1244         SET_MENUITEM(_("Japanese (EUC-JP)"),             CS_EUC_JP);
1245         SET_MENUITEM(_("Japanese (Shift_JIS)"),          CS_SHIFT_JIS);
1246 #endif /* 0 */
1247         SET_MENUITEM(_("Simplified Chinese (GB2312)"),   CS_GB2312);
1248         SET_MENUITEM(_("Traditional Chinese (Big5)"),    CS_BIG5);
1249 #if 0
1250         SET_MENUITEM(_("Traditional Chinese (EUC-TW)"),  CS_EUC_TW);
1251         SET_MENUITEM(_("Chinese (ISO-2022-CN)"),         CS_ISO_2022_CN);
1252 #endif /* 0 */
1253         SET_MENUITEM(_("Korean (EUC-KR)"),               CS_EUC_KR);
1254         SET_MENUITEM(_("Thai (TIS-620)"),                CS_TIS_620);
1255         SET_MENUITEM(_("Thai (Windows-874)"),            CS_WINDOWS_874);
1256
1257         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1258                                   optmenu_menu);
1259
1260         hbox1 = gtk_hbox_new (FALSE, 8);
1261         gtk_widget_show (hbox1);
1262         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1263
1264         hbox1 = gtk_hbox_new (FALSE, 8);
1265         gtk_widget_show (hbox1);
1266         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1267
1268         label_encoding = gtk_label_new (_("Transfer encoding"));
1269         gtk_widget_show (label_encoding);
1270         gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1271
1272         encoding_tooltip = gtk_tooltips_new();
1273
1274         optmenu_encoding = gtk_option_menu_new ();
1275         gtk_widget_show (optmenu_encoding);
1276         gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1277                              _("Specify Content-Transfer-Encoding used when"
1278                                " message body contains non-ASCII characters"),
1279                              NULL);
1280         gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1281
1282         optmenu_menu = gtk_menu_new ();
1283
1284         SET_MENUITEM(_("Automatic"),     CTE_AUTO);
1285         SET_MENUITEM("base64",           CTE_BASE64);
1286         SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1287         SET_MENUITEM("8bit",             CTE_8BIT);
1288
1289         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1290                                   optmenu_menu);
1291
1292         hbox1 = gtk_hbox_new (FALSE, 8);
1293         gtk_widget_show (hbox1);
1294         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1295
1296         p_send.checkbtn_savemsg  = checkbtn_savemsg;
1297         p_send.optmenu_senddialog = optmenu_senddialog;
1298
1299         p_send.optmenu_charset = optmenu_charset;
1300         p_send.optmenu_encoding_method = optmenu_encoding;
1301 }
1302
1303 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1304 {
1305         gboolean toggled;
1306
1307         toggled = gtk_toggle_button_get_active
1308                         (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1309                   gtk_toggle_button_get_active
1310                         (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1311         gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1312 }
1313
1314 static void prefs_compose_create(void)
1315 {
1316         GtkWidget *vbox1;
1317         GtkWidget *vbox2;
1318
1319         GtkWidget *checkbtn_autoextedit;
1320
1321         GtkWidget *frame_autosel;
1322         GtkWidget *hbox_autosel;
1323         GtkWidget *checkbtn_reply_account_autosel;
1324         GtkWidget *checkbtn_forward_account_autosel;
1325         GtkWidget *checkbtn_reedit_account_autosel;
1326
1327         GtkWidget *hbox_undolevel;
1328         GtkWidget *label_undolevel;
1329         GtkObject *spinbtn_undolevel_adj;
1330         GtkWidget *spinbtn_undolevel;
1331
1332         GtkWidget *hbox5;
1333
1334         GtkWidget *checkbtn_default_reply_list;
1335
1336         GtkWidget *checkbtn_forward_as_attachment;
1337         GtkWidget *checkbtn_redirect_keep_from;
1338         GtkWidget *checkbtn_block_cursor;
1339
1340         GtkWidget *hbox_autosave;
1341         GtkWidget *checkbtn_autosave;
1342         GtkWidget *entry_autosave_length;
1343         GtkWidget *label_autosave_length;
1344         
1345         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1346         gtk_widget_show (vbox1);
1347         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1348         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1349
1350         /* Account autoselection */
1351         PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1352
1353         hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1354         gtk_widget_show (hbox_autosel);
1355         gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1356         gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1357
1358         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1359                            _("when replying"));
1360         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1361                            _("when forwarding"));
1362         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1363                            _("when re-editing"));
1364
1365         vbox2 = gtk_vbox_new (FALSE, 0);
1366         gtk_widget_show (vbox2);
1367         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1368
1369         PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1370                            _("Reply button invokes mailing list reply"));
1371
1372         PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1373                            _("Automatically launch the external editor"));
1374
1375         hbox5 = gtk_hbox_new (FALSE, 8);
1376         gtk_widget_show (hbox5);
1377         gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1378
1379         PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1380                            _("Forward as attachment"));
1381
1382         PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1383                           _("Block cursor"));
1384
1385         PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1386                            _("Keep the original 'From' header when redirecting"));
1387
1388         
1389         hbox_autosave = gtk_hbox_new (FALSE, 8);
1390         gtk_widget_show (hbox_autosave);
1391         gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1392         
1393         PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1394                            _("Autosave to Drafts folder every "));
1395
1396         entry_autosave_length = gtk_entry_new();
1397         gtk_widget_set_usize (entry_autosave_length, 64, -1);   
1398         gtk_widget_show (entry_autosave_length);
1399         gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1400         
1401         label_autosave_length = gtk_label_new(_("characters"));
1402         gtk_widget_show (label_autosave_length);
1403         gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1404         
1405         hbox_undolevel = gtk_hbox_new (FALSE, 8);
1406         gtk_widget_show (hbox_undolevel);
1407         gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1408
1409         label_undolevel = gtk_label_new (_("Undo level"));
1410         gtk_widget_show (label_undolevel);
1411         gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1412
1413         spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1414         spinbtn_undolevel = gtk_spin_button_new
1415                 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1416         gtk_widget_show (spinbtn_undolevel);
1417         gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1418         gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1419         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1420
1421        /*
1422         compose.checkbtn_quote   = checkbtn_quote;
1423         compose.entry_quotemark  = entry_quotemark;
1424         compose.text_quotefmt    = text_quotefmt;
1425         */
1426
1427         compose.checkbtn_autoextedit = checkbtn_autoextedit;
1428
1429         compose.checkbtn_reply_account_autosel   = checkbtn_reply_account_autosel;
1430         compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1431         compose.checkbtn_reedit_account_autosel  = checkbtn_reedit_account_autosel;
1432
1433         compose.spinbtn_undolevel     = spinbtn_undolevel;
1434         compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1435
1436         compose.checkbtn_autosave     = checkbtn_autosave;
1437         compose.entry_autosave_length = entry_autosave_length;
1438         
1439         compose.checkbtn_forward_as_attachment =
1440                 checkbtn_forward_as_attachment;
1441         compose.checkbtn_redirect_keep_from =
1442                 checkbtn_redirect_keep_from;
1443         compose.checkbtn_block_cursor   =
1444                 checkbtn_block_cursor;
1445         compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1446 }
1447
1448 static void prefs_quote_create(void)
1449 {
1450         GtkWidget *vbox1;
1451         GtkWidget *frame_quote;
1452         GtkWidget *vbox_quote;
1453         GtkWidget *hbox1;
1454         GtkWidget *hbox2;
1455         GtkWidget *label_quotemark;
1456         GtkWidget *entry_quotemark;
1457         GtkWidget *scrolledwin_quotefmt;
1458         GtkWidget *text_quotefmt;
1459
1460         GtkWidget *entry_fw_quotemark;
1461         GtkWidget *text_fw_quotefmt;
1462
1463         GtkWidget *entry_quote_chars;
1464         GtkWidget *label_quote_chars;
1465         
1466         GtkWidget *btn_quotedesc;
1467
1468         GtkWidget *checkbtn_reply_with_quote;
1469
1470         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1471         gtk_widget_show (vbox1);
1472         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1473         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1474
1475         /* reply */
1476
1477         PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1478
1479         PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1480
1481         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1482         gtk_widget_show (vbox_quote);
1483         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1484         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1485
1486         hbox1 = gtk_hbox_new (FALSE, 32);
1487         gtk_widget_show (hbox1);
1488         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1489
1490         hbox2 = gtk_hbox_new (FALSE, 8);
1491         gtk_widget_show (hbox2);
1492         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1493
1494         label_quotemark = gtk_label_new (_("Quotation mark"));
1495         gtk_widget_show (label_quotemark);
1496         gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1497
1498         entry_quotemark = gtk_entry_new ();
1499         gtk_widget_show (entry_quotemark);
1500         gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1501         gtk_widget_set_usize (entry_quotemark, 64, -1);
1502
1503         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1504         gtk_widget_show (scrolledwin_quotefmt);
1505         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1506         gtk_scrolled_window_set_policy
1507                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1508                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1509
1510         text_quotefmt = gtk_text_new (NULL, NULL);
1511         gtk_widget_show (text_quotefmt);
1512         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1513         gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1514         gtk_widget_set_usize(text_quotefmt, -1, 60);
1515
1516         /* forward */
1517
1518         PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1519
1520         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1521         gtk_widget_show (vbox_quote);
1522         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1523         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1524
1525         hbox1 = gtk_hbox_new (FALSE, 32);
1526         gtk_widget_show (hbox1);
1527         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1528
1529         hbox2 = gtk_hbox_new (FALSE, 8);
1530         gtk_widget_show (hbox2);
1531         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1532
1533         label_quotemark = gtk_label_new (_("Quotation mark"));
1534         gtk_widget_show (label_quotemark);
1535         gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1536
1537         entry_fw_quotemark = gtk_entry_new ();
1538         gtk_widget_show (entry_fw_quotemark);
1539         gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1540                             FALSE, FALSE, 0);
1541         gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1542
1543         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1544         gtk_widget_show (scrolledwin_quotefmt);
1545         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1546         gtk_scrolled_window_set_policy
1547                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1548                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1549
1550         text_fw_quotefmt = gtk_text_new (NULL, NULL);
1551         gtk_widget_show (text_fw_quotefmt);
1552         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1553                           text_fw_quotefmt);
1554         gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1555         gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1556
1557         hbox1 = gtk_hbox_new (FALSE, 32);
1558         gtk_widget_show (hbox1);
1559         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1560
1561         btn_quotedesc =
1562                 gtk_button_new_with_label (_(" Description of symbols "));
1563         gtk_widget_show (btn_quotedesc);
1564         gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1565         gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1566                            GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
1567
1568         /* quote chars */
1569
1570         PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1571
1572         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1573         gtk_widget_show (vbox_quote);
1574         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1575         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1576
1577         hbox1 = gtk_hbox_new (FALSE, 32);
1578         gtk_widget_show (hbox1);
1579         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1580
1581         hbox2 = gtk_hbox_new (FALSE, 8);
1582         gtk_widget_show (hbox2);
1583         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1584
1585         label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1586         gtk_widget_show (label_quote_chars);
1587         gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1588
1589         entry_quote_chars = gtk_entry_new ();
1590         gtk_widget_show (entry_quote_chars);
1591         gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1592                             FALSE, FALSE, 0);
1593         gtk_widget_set_usize (entry_quote_chars, 64, -1);
1594
1595
1596         compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1597         quote.entry_quotemark    = entry_quotemark;
1598         quote.text_quotefmt      = text_quotefmt;
1599         quote.entry_fw_quotemark = entry_fw_quotemark;
1600         quote.text_fw_quotefmt   = text_fw_quotefmt;
1601         quote.entry_quote_chars  = entry_quote_chars;
1602 }
1603
1604 static void prefs_display_create(void)
1605 {
1606         GtkWidget *vbox1;
1607         GtkWidget *chkbtn_transhdr;
1608         GtkWidget *chkbtn_folder_unread;
1609         GtkWidget *hbox1;
1610         GtkWidget *label_ng_abbrev;
1611         GtkWidget *spinbtn_ng_abbrev_len;
1612         GtkObject *spinbtn_ng_abbrev_len_adj;
1613         GtkWidget *frame_summary;
1614         GtkWidget *vbox2;
1615         GtkWidget *chkbtn_swapfrom;
1616         GtkWidget *chkbtn_useaddrbook;
1617         GtkWidget *chkbtn_threadsubj;
1618         GtkWidget *vbox3;
1619         GtkWidget *label_datefmt;
1620         GtkWidget *button_datefmt;
1621         GtkWidget *entry_datefmt;
1622         GtkWidget *button_dispitem;
1623
1624         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1625         gtk_widget_show (vbox1);
1626         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1627         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1628
1629         vbox2 = gtk_vbox_new (FALSE, 0);
1630         gtk_widget_show (vbox2);
1631         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1632
1633         PACK_CHECK_BUTTON
1634                 (vbox2, chkbtn_transhdr,
1635                  _("Translate header name (such as `From:', `Subject:')"));
1636
1637         PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1638                            _("Display unread number next to folder name"));
1639
1640         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1641
1642         hbox1 = gtk_hbox_new (FALSE, 8);
1643         gtk_widget_show (hbox1);
1644         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1645
1646         label_ng_abbrev = gtk_label_new
1647                 (_("Abbreviate newsgroup names longer than"));
1648         gtk_widget_show (label_ng_abbrev);
1649         gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1650
1651         spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1652         spinbtn_ng_abbrev_len = gtk_spin_button_new
1653                 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1654         gtk_widget_show (spinbtn_ng_abbrev_len);
1655         gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1656                             FALSE, FALSE, 0);
1657         gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
1658         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1659                                      TRUE);
1660
1661         label_ng_abbrev = gtk_label_new
1662                 (_("letters"));
1663         gtk_widget_show (label_ng_abbrev);
1664         gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1665
1666         /* ---- Summary ---- */
1667
1668         PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1669
1670         vbox2 = gtk_vbox_new (FALSE, 0);
1671         gtk_widget_show (vbox2);
1672         gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1673         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1674
1675         PACK_CHECK_BUTTON
1676                 (vbox2, chkbtn_swapfrom,
1677                  _("Display recipient in `From' column if sender is yourself"));
1678         PACK_CHECK_BUTTON
1679                 (vbox2, chkbtn_useaddrbook,
1680                  _("Display sender using address book"));
1681         PACK_CHECK_BUTTON
1682                 (vbox2, chkbtn_threadsubj,
1683                  _("Thread using subject in addition to standard headers"));
1684
1685         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1686
1687         hbox1 = gtk_hbox_new (FALSE, 8);
1688         gtk_widget_show (hbox1);
1689         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1690
1691         label_datefmt = gtk_label_new (_("Date format"));
1692         gtk_widget_show (label_datefmt);
1693         gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1694
1695         entry_datefmt = gtk_entry_new ();
1696         gtk_widget_show (entry_datefmt);
1697         gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1698
1699         button_datefmt = gtk_button_new_with_label (" ... ");
1700
1701         gtk_widget_show (button_datefmt);
1702         gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1703         gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1704                             GTK_SIGNAL_FUNC (date_format_create), NULL);
1705
1706         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1707
1708         hbox1 = gtk_hbox_new (FALSE, 8);
1709         gtk_widget_show (hbox1);
1710         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1711
1712         button_dispitem = gtk_button_new_with_label
1713                 (_(" Set displayed items in summary... "));
1714         gtk_widget_show (button_dispitem);
1715         gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1716         gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1717                             GTK_SIGNAL_FUNC (prefs_summary_column_open),
1718                             NULL);
1719
1720         display.chkbtn_transhdr           = chkbtn_transhdr;
1721         display.chkbtn_folder_unread      = chkbtn_folder_unread;
1722         display.spinbtn_ng_abbrev_len     = spinbtn_ng_abbrev_len;
1723         display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1724
1725         display.chkbtn_swapfrom      = chkbtn_swapfrom;
1726         display.chkbtn_useaddrbook   = chkbtn_useaddrbook;
1727         display.chkbtn_threadsubj    = chkbtn_threadsubj;
1728         display.entry_datefmt        = entry_datefmt;
1729 }
1730
1731 static void prefs_message_create(void)
1732 {
1733         GtkWidget *vbox1;
1734         GtkWidget *vbox2;
1735         GtkWidget *vbox3;
1736         GtkWidget *hbox1;
1737         GtkWidget *chkbtn_mbalnum;
1738         GtkWidget *chkbtn_disphdrpane;
1739         GtkWidget *chkbtn_disphdr;
1740         GtkWidget *button_edit_disphdr;
1741         GtkWidget *hbox_linespc;
1742         GtkWidget *label_linespc;
1743         GtkObject *spinbtn_linespc_adj;
1744         GtkWidget *spinbtn_linespc;
1745         GtkWidget *chkbtn_headspc;
1746
1747         GtkWidget *frame_scr;
1748         GtkWidget *vbox_scr;
1749         GtkWidget *chkbtn_smoothscroll;
1750         GtkWidget *hbox_scr;
1751         GtkWidget *label_scr;
1752         GtkObject *spinbtn_scrollstep_adj;
1753         GtkWidget *spinbtn_scrollstep;
1754         GtkWidget *chkbtn_halfpage;
1755
1756         GtkWidget *chkbtn_attach_desc;
1757
1758         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1759         gtk_widget_show (vbox1);
1760         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1761         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1762
1763         vbox2 = gtk_vbox_new (FALSE, 0);
1764         gtk_widget_show (vbox2);
1765         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1766
1767         PACK_CHECK_BUTTON
1768                 (vbox2, chkbtn_mbalnum,
1769                  _("Display multi-byte alphanumeric as\n"
1770                    "ASCII character (Japanese only)"));
1771         gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1772                                GTK_JUSTIFY_LEFT);
1773
1774         PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1775                           _("Display header pane above message view"));
1776
1777         hbox1 = gtk_hbox_new (FALSE, 8);
1778         gtk_widget_show (hbox1);
1779         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1780
1781         PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1782                           _("Display short headers on message view"));
1783
1784         button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1785         gtk_widget_show (button_edit_disphdr);
1786         gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1787                           FALSE, TRUE, 0);
1788         gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1789                             GTK_SIGNAL_FUNC (prefs_display_header_open),
1790                             NULL);
1791
1792         SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1793
1794         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1795
1796         hbox1 = gtk_hbox_new (FALSE, 32);
1797         gtk_widget_show (hbox1);
1798         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1799
1800         hbox_linespc = gtk_hbox_new (FALSE, 8);
1801         gtk_widget_show (hbox1);
1802         gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1803
1804         label_linespc = gtk_label_new (_("Line space"));
1805         gtk_widget_show (label_linespc);
1806         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1807                             FALSE, FALSE, 0);
1808
1809         spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1810         spinbtn_linespc = gtk_spin_button_new
1811                 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1812         gtk_widget_show (spinbtn_linespc);
1813         gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1814                             FALSE, FALSE, 0);
1815         gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1816         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1817
1818         label_linespc = gtk_label_new (_("pixel(s)"));
1819         gtk_widget_show (label_linespc);
1820         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1821                             FALSE, FALSE, 0);
1822
1823         PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Indent text"));
1824
1825         PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1826
1827         vbox_scr = gtk_vbox_new (FALSE, 0);
1828         gtk_widget_show (vbox_scr);
1829         gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1830         gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1831
1832         PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1833
1834         hbox1 = gtk_hbox_new (FALSE, 32);
1835         gtk_widget_show (hbox1);
1836         gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1837
1838         PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1839
1840         hbox_scr = gtk_hbox_new (FALSE, 8);
1841         gtk_widget_show (hbox_scr);
1842         gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1843
1844         label_scr = gtk_label_new (_("Step"));
1845         gtk_widget_show (label_scr);
1846         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1847
1848         spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1849         spinbtn_scrollstep = gtk_spin_button_new
1850                 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1851         gtk_widget_show (spinbtn_scrollstep);
1852         gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1853                             FALSE, FALSE, 0);
1854         gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1855         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1856                                      TRUE);
1857
1858         label_scr = gtk_label_new (_("pixel(s)"));
1859         gtk_widget_show (label_scr);
1860         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1861
1862         SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1863
1864         vbox3 = gtk_vbox_new (FALSE, 0);
1865         gtk_widget_show (vbox3);
1866         gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1867
1868         PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1869                           _("Show attachment descriptions (rather than names)"));
1870
1871         message.chkbtn_mbalnum     = chkbtn_mbalnum;
1872         message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1873         message.chkbtn_disphdr     = chkbtn_disphdr;
1874         message.spinbtn_linespc    = spinbtn_linespc;
1875         message.chkbtn_headspc     = chkbtn_headspc;
1876
1877         message.chkbtn_smoothscroll    = chkbtn_smoothscroll;
1878         message.spinbtn_scrollstep     = spinbtn_scrollstep;
1879         message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1880         message.chkbtn_halfpage        = chkbtn_halfpage;
1881
1882         message.chkbtn_attach_desc  = chkbtn_attach_desc;
1883 }
1884
1885 static void prefs_interface_create(void)
1886 {
1887         GtkWidget *vbox1;
1888         GtkWidget *vbox2;
1889         GtkWidget *vbox3;
1890         /* GtkWidget *checkbtn_emacs; */
1891         GtkWidget *checkbtn_always_show_msg;
1892         GtkWidget *checkbtn_openunread;
1893         GtkWidget *checkbtn_mark_as_read_on_newwin;
1894         GtkWidget *checkbtn_openinbox;
1895         GtkWidget *checkbtn_immedexec;
1896         GtkTooltips *immedexec_tooltip;
1897         GtkWidget *hbox1;
1898         GtkWidget *label;
1899         GtkWidget *menu;
1900         GtkWidget *menuitem;
1901
1902         GtkWidget *button_keybind;
1903
1904         GtkWidget *hbox_nextunreadmsgdialog;
1905         GtkWidget *optmenu_nextunreadmsgdialog;
1906
1907         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1908         gtk_widget_show (vbox1);
1909         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1910         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1911
1912         vbox2 = gtk_vbox_new (FALSE, 0);
1913         gtk_widget_show (vbox2);
1914         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1915
1916         /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1917                            _("Emulate the behavior of mouse operation of\n"
1918                              "Emacs-based mailer"));
1919         gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1920                                GTK_JUSTIFY_LEFT);   */
1921
1922         PACK_CHECK_BUTTON
1923                 (vbox2, checkbtn_always_show_msg,
1924                  _("Always open messages in summary when selected"));
1925
1926         PACK_CHECK_BUTTON
1927                 (vbox2, checkbtn_openunread,
1928                  _("Open first unread message when entering a folder"));
1929
1930         PACK_CHECK_BUTTON
1931                 (vbox2, checkbtn_mark_as_read_on_newwin,
1932                  _("Only mark message as read when opened in new window"));
1933
1934         PACK_CHECK_BUTTON
1935                 (vbox2, checkbtn_openinbox,
1936                  _("Go to inbox after receiving new mail"));
1937
1938         vbox3 = gtk_vbox_new (FALSE, 0);
1939         gtk_widget_show (vbox3);
1940         gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1941
1942         immedexec_tooltip = gtk_tooltips_new();
1943
1944         PACK_CHECK_BUTTON
1945                 (vbox3, checkbtn_immedexec,
1946                  _("Execute immediately when moving or deleting messages"));
1947         gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1948                              _("Messages will be marked until execution"
1949                                " if this is turned off"),
1950                              NULL);
1951
1952         hbox1 = gtk_hbox_new (FALSE, 0);
1953         gtk_widget_show (hbox1);
1954         gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1955
1956         /* Next Unread Message Dialog */
1957         hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1958         gtk_widget_show (hbox1);
1959         gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1960
1961         label = gtk_label_new (_("Show no-unread-message dialog"));
1962         gtk_widget_show (label);
1963         gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1964
1965         optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1966         gtk_widget_show (optmenu_nextunreadmsgdialog);
1967         gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1968         
1969         menu = gtk_menu_new ();
1970         MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1971         MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"), 
1972                       NEXTUNREADMSGDIALOG_ASSUME_YES);
1973         MENUITEM_ADD (menu, menuitem, _("Assume 'No'"), 
1974                       NEXTUNREADMSGDIALOG_ASSUME_NO);
1975
1976         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1977
1978         hbox1 = gtk_hbox_new (FALSE, 8);
1979         gtk_widget_show (hbox1);
1980         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1981
1982         button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1983         gtk_widget_show (button_keybind);
1984         gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1985         gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
1986                             GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
1987
1988         /* interface.checkbtn_emacs          = checkbtn_emacs; */
1989         interface.checkbtn_always_show_msg    = checkbtn_always_show_msg;
1990         interface.checkbtn_openunread         = checkbtn_openunread;
1991         interface.checkbtn_mark_as_read_on_newwin
1992                                               = checkbtn_mark_as_read_on_newwin;
1993         interface.checkbtn_openinbox          = checkbtn_openinbox;
1994         interface.checkbtn_immedexec          = checkbtn_immedexec;
1995         interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
1996 }
1997
1998 static void prefs_other_create(void)
1999 {
2000         GtkWidget *vbox1;
2001         GtkWidget *hbox1;
2002
2003         GtkWidget *frame_addr;
2004         GtkWidget *vbox_addr;
2005         GtkWidget *checkbtn_addaddrbyclick;
2006         
2007         GtkWidget *frame_cliplog;
2008         GtkWidget *vbox_cliplog;
2009         GtkWidget *hbox_cliplog;
2010         GtkWidget *checkbtn_cliplog;
2011         GtkWidget *loglength_label;
2012         GtkWidget *loglength_entry;
2013         GtkTooltips *loglength_tooltip;
2014
2015         GtkWidget *frame_exit;
2016         GtkWidget *vbox_exit;
2017         GtkWidget *checkbtn_confonexit;
2018         GtkWidget *checkbtn_cleanonexit;
2019         GtkWidget *checkbtn_askonclean;
2020         GtkWidget *checkbtn_warnqueued;
2021
2022         GtkWidget *label_iotimeout;
2023         GtkWidget *spinbtn_iotimeout;
2024         GtkObject *spinbtn_iotimeout_adj;
2025
2026 #if 0
2027 #ifdef USE_OPENSSL
2028         GtkWidget *frame_ssl;
2029         GtkWidget *vbox_ssl;
2030         GtkWidget *hbox_ssl;
2031         GtkWidget *checkbtn_ssl_ask_unknown_valid;
2032 #endif
2033 #endif
2034         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2035         gtk_widget_show (vbox1);
2036         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2037         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2038
2039         PACK_FRAME (vbox1, frame_addr, _("Address book"));
2040
2041         vbox_addr = gtk_vbox_new (FALSE, 0);
2042         gtk_widget_show (vbox_addr);
2043         gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2044         gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2045
2046         PACK_CHECK_BUTTON
2047                 (vbox_addr, checkbtn_addaddrbyclick,
2048                  _("Add address to destination when double-clicked"));
2049
2050         /* Clip Log */
2051         PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2052
2053         vbox_cliplog = gtk_vbox_new (FALSE, 0);
2054         gtk_widget_show (vbox_cliplog);
2055         gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2056         gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2057         PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2058                            _("Clip the log size"));
2059         hbox_cliplog = gtk_hbox_new (FALSE, 3);
2060         gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2061         gtk_widget_show (hbox_cliplog);
2062         
2063         loglength_label = gtk_label_new (_("Log window length"));
2064         gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2065                             FALSE, TRUE, 0);
2066         gtk_widget_show (GTK_WIDGET (loglength_label));
2067         
2068         loglength_tooltip = gtk_tooltips_new();
2069         
2070         loglength_entry = gtk_entry_new ();
2071         gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2072         gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2073                             FALSE, TRUE, 0);
2074         gtk_widget_show (GTK_WIDGET (loglength_entry));
2075         gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2076                              _("0 to stop logging in the log window"),
2077                              NULL);
2078         SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2079
2080 #if 0
2081 #ifdef USE_OPENSSL
2082         /* SSL */
2083         PACK_FRAME (vbox1, frame_ssl, _("Security"));
2084
2085         vbox_ssl = gtk_vbox_new (FALSE, 0);
2086         gtk_widget_show (vbox_ssl);
2087         gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2088         gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2089         PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid, 
2090                            _("Ask before accepting SSL certificates"));
2091         hbox_ssl = gtk_hbox_new (FALSE, 3);
2092         gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2093         gtk_widget_show (hbox_ssl);
2094 #endif
2095 #endif
2096         
2097         /* On Exit */
2098         PACK_FRAME (vbox1, frame_exit, _("On exit"));
2099
2100         vbox_exit = gtk_vbox_new (FALSE, 0);
2101         gtk_widget_show (vbox_exit);
2102         gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2103         gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2104
2105         PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2106                            _("Confirm on exit"));
2107
2108         hbox1 = gtk_hbox_new (FALSE, 32);
2109         gtk_widget_show (hbox1);
2110         gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2111
2112         PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2113                            _("Empty trash on exit"));
2114         PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2115                            _("Ask before emptying"));
2116         SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2117
2118         PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2119                            _("Warn if there are queued messages"));
2120
2121         hbox1 = gtk_hbox_new (FALSE, 8);
2122         gtk_widget_show (hbox1);
2123         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2124
2125         label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2126         gtk_widget_show (label_iotimeout);
2127         gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2128
2129         spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2130         spinbtn_iotimeout = gtk_spin_button_new
2131                 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2132         gtk_widget_show (spinbtn_iotimeout);
2133         gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2134                             FALSE, FALSE, 0);
2135         gtk_widget_set_usize (spinbtn_iotimeout, 64, -1);
2136         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2137
2138         label_iotimeout = gtk_label_new (_("seconds"));
2139         gtk_widget_show (label_iotimeout);
2140         gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2141
2142         other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2143         
2144         other.checkbtn_cliplog     = checkbtn_cliplog;
2145         other.loglength_entry      = loglength_entry;
2146
2147         other.checkbtn_confonexit  = checkbtn_confonexit;
2148         other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2149         other.checkbtn_askonclean  = checkbtn_askonclean;
2150         other.checkbtn_warnqueued  = checkbtn_warnqueued;
2151
2152         other.spinbtn_iotimeout     = spinbtn_iotimeout;
2153         other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2154         
2155 #if 0
2156 #ifdef USE_OPENSSL
2157         other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2158 #endif
2159 #endif
2160 }
2161
2162 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2163 {
2164         GtkWidget *datefmt_sample = NULL;
2165         gchar *text;
2166
2167         g_return_if_fail(widget != NULL);
2168         g_return_if_fail(*widget != NULL);
2169         g_return_if_fail(display.entry_datefmt != NULL);
2170
2171         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2172                                     (GTK_OBJECT(*widget), "datefmt_sample"));
2173         g_return_if_fail(datefmt_sample != NULL);
2174
2175         text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2176         g_free(prefs_common.date_format);
2177         prefs_common.date_format = text;
2178         gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2179
2180         gtk_widget_destroy(*widget);
2181         *widget = NULL;
2182 }
2183
2184 static void date_format_cancel_btn_clicked(GtkButton *button,
2185                                            GtkWidget **widget)
2186 {
2187         g_return_if_fail(widget != NULL);
2188         g_return_if_fail(*widget != NULL);
2189
2190         gtk_widget_destroy(*widget);
2191         *widget = NULL;
2192 }
2193
2194 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2195                                     GtkWidget **widget)
2196 {
2197         if (event && event->keyval == GDK_Escape)
2198                 date_format_cancel_btn_clicked(NULL, widget);
2199 }
2200
2201 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2202                                       GdkEventAny *event, GtkWidget **widget)
2203 {
2204         g_return_val_if_fail(widget != NULL, FALSE);
2205         g_return_val_if_fail(*widget != NULL, FALSE);
2206
2207         *widget = NULL;
2208         return FALSE;
2209 }
2210
2211 static void date_format_entry_on_change(GtkEditable *editable,
2212                                         GtkLabel *example)
2213 {
2214         time_t cur_time;
2215         struct tm *cal_time;
2216         gchar buffer[100];
2217         gchar *text;
2218
2219         cur_time = time(NULL);
2220         cal_time = localtime(&cur_time);
2221         buffer[0] = 0;
2222         text = gtk_editable_get_chars(editable, 0, -1);
2223         if (text)
2224                 strftime(buffer, sizeof buffer, text, cal_time); 
2225         g_free(text);
2226         gtk_label_set_text(example, buffer);
2227 }
2228
2229 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2230                                    gint column, GdkEventButton *event,
2231                                    GtkWidget *date_format)
2232 {
2233         gint cur_pos;
2234         gchar *format;
2235         gchar *old_format;
2236         gchar *new_format;
2237         GtkWidget *datefmt_sample;
2238
2239         /* only on double click */
2240         if (!event || event->type != GDK_2BUTTON_PRESS) return;
2241
2242
2243         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2244                                     (GTK_OBJECT(date_format), "datefmt_sample"));
2245
2246         g_return_if_fail(date_format_list != NULL);
2247         g_return_if_fail(date_format != NULL);
2248         g_return_if_fail(datefmt_sample != NULL);
2249
2250         /* get format from clist */
2251         gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2252
2253         cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2254         old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2255
2256         /* insert the format into the text entry */
2257         new_format = g_malloc(strlen(old_format) + 3);
2258
2259         strncpy(new_format, old_format, cur_pos);
2260         new_format[cur_pos] = '\0';
2261         strcat(new_format, format);
2262         strcat(new_format, &old_format[cur_pos]);
2263
2264         gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2265         gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2266
2267         g_free(new_format);
2268 }
2269
2270 static GtkWidget *date_format_create(GtkButton *button, void *data)
2271 {
2272         static GtkWidget *datefmt_win = NULL;
2273         GtkWidget *vbox1;
2274         GtkWidget *scrolledwindow1;
2275         GtkWidget *datefmt_clist;
2276         GtkWidget *table;
2277         GtkWidget *label1;
2278         GtkWidget *label2;
2279         GtkWidget *label3;
2280         GtkWidget *confirm_area;
2281         GtkWidget *ok_btn;
2282         GtkWidget *cancel_btn;
2283         GtkWidget *datefmt_entry;
2284
2285         struct {
2286                 gchar *fmt;
2287                 gchar *txt;
2288         } time_format[] = {
2289                 { "%a", NULL },
2290                 { "%A", NULL },
2291                 { "%b", NULL },
2292                 { "%B", NULL },
2293                 { "%c", NULL },
2294                 { "%C", NULL },
2295                 { "%d", NULL },
2296                 { "%H", NULL },
2297                 { "%I", NULL },
2298                 { "%j", NULL },
2299                 { "%m", NULL },
2300                 { "%M", NULL },
2301                 { "%p", NULL },
2302                 { "%S", NULL },
2303                 { "%w", NULL },
2304                 { "%x", NULL },
2305                 { "%y", NULL },
2306                 { "%Y", NULL },
2307                 { "%Z", NULL }
2308         };
2309
2310         gchar *titles[2];
2311         gint i;
2312         const gint TIME_FORMAT_ELEMS =
2313                 sizeof time_format / sizeof time_format[0];
2314
2315         time_format[0].txt  = _("the full abbreviated weekday name");
2316         time_format[1].txt  = _("the full weekday name");
2317         time_format[2].txt  = _("the abbreviated month name");
2318         time_format[3].txt  = _("the full month name");
2319         time_format[4].txt  = _("the preferred date and time for the current locale");
2320         time_format[5].txt  = _("the century number (year/100)");
2321         time_format[6].txt  = _("the day of the month as a decimal number");
2322         time_format[7].txt  = _("the hour as a decimal number using a 24-hour clock");
2323         time_format[8].txt  = _("the hour as a decimal number using a 12-hour clock");
2324         time_format[9].txt  = _("the day of the year as a decimal number");
2325         time_format[10].txt = _("the month as a decimal number");
2326         time_format[11].txt = _("the minute as a decimal number");
2327         time_format[12].txt = _("either AM or PM");
2328         time_format[13].txt = _("the second as a decimal number");
2329         time_format[14].txt = _("the day of the week as a decimal number");
2330         time_format[15].txt = _("the preferred date for the current locale");
2331         time_format[16].txt = _("the last two digits of a year");
2332         time_format[17].txt = _("the year as a decimal number");
2333         time_format[18].txt = _("the time zone or name or abbreviation");
2334
2335         if (datefmt_win) return datefmt_win;
2336
2337         datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2338         gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2339         gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2340         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2341         gtk_widget_set_usize(datefmt_win, 440, 280);
2342
2343         vbox1 = gtk_vbox_new(FALSE, 10);
2344         gtk_widget_show(vbox1);
2345         gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2346
2347         scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2348         gtk_scrolled_window_set_policy
2349                 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2350                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2351         gtk_widget_show(scrolledwindow1);
2352         gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2353
2354         titles[0] = _("Specifier");
2355         titles[1] = _("Description");
2356         datefmt_clist = gtk_clist_new_with_titles(2, titles);
2357         gtk_widget_show(datefmt_clist);
2358         gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2359         /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2360         gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2361                                      GTK_SELECTION_BROWSE);
2362
2363         for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2364                 gchar *text[2];
2365                 /* phoney casting necessary because of gtk... */
2366                 text[0] = (gchar *)time_format[i].fmt;
2367                 text[1] = (gchar *)time_format[i].txt;
2368                 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2369         }
2370
2371         table = gtk_table_new(2, 2, FALSE);
2372         gtk_widget_show(table);
2373         gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2374         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2375         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2376
2377         label1 = gtk_label_new(_("Date format"));
2378         gtk_widget_show(label1);
2379         gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2380                          GTK_FILL, 0, 0, 0);
2381         gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2382         gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2383
2384         datefmt_entry = gtk_entry_new_with_max_length(256);
2385         gtk_widget_show(datefmt_entry);
2386         gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2387                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2388
2389         /* we need the "sample" entry box; add it as data so callbacks can
2390          * get the entry box */
2391         gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2392                             datefmt_entry);
2393
2394         label2 = gtk_label_new(_("Example"));
2395         gtk_widget_show(label2);
2396         gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2397                          GTK_FILL, 0, 0, 0);
2398         gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2399         gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2400
2401         label3 = gtk_label_new("");
2402         gtk_widget_show(label3);
2403         gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2404                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2405         gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2406         gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2407
2408         gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2409                                 &cancel_btn, _("Cancel"), NULL, NULL);
2410         gtk_widget_grab_default(ok_btn);
2411         gtk_widget_show(confirm_area);
2412
2413         gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2414
2415         /* set the current format */
2416         gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2417         date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2418                                     GTK_LABEL(label3));
2419
2420         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2421                            GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2422                            &datefmt_win);
2423         gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2424                            GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2425                            &datefmt_win);
2426         gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2427                            GTK_SIGNAL_FUNC(date_format_key_pressed),
2428                            &datefmt_win);
2429         gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2430                            GTK_SIGNAL_FUNC(date_format_on_delete),
2431                            &datefmt_win);
2432         gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2433                            GTK_SIGNAL_FUNC(date_format_entry_on_change),
2434                            label3);
2435
2436         gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2437                            GTK_SIGNAL_FUNC(date_format_select_row),
2438                            datefmt_win);
2439
2440         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2441         gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2442
2443         gtk_widget_show(datefmt_win);
2444         manage_window_set_transient(GTK_WINDOW(datefmt_win));
2445
2446         gtk_widget_grab_focus(ok_btn);
2447
2448         return datefmt_win;
2449 }
2450
2451 static void prefs_keybind_select(void)
2452 {
2453         GtkWidget *window;
2454         GtkWidget *vbox1;
2455         GtkWidget *hbox1;
2456         GtkWidget *label;
2457         GtkWidget *combo;
2458         GtkWidget *confirm_area;
2459         GtkWidget *ok_btn;
2460         GtkWidget *cancel_btn;
2461
2462         window = gtk_window_new (GTK_WINDOW_DIALOG);
2463         gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2464         gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2465         gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2466         gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2467         gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
2468         manage_window_set_transient (GTK_WINDOW (window));
2469
2470         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2471         gtk_container_add (GTK_CONTAINER (window), vbox1);
2472         gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2473
2474         hbox1 = gtk_hbox_new (FALSE, 8);
2475         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2476
2477         label = gtk_label_new
2478                 (_("Select preset:"));
2479         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2480         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2481
2482         hbox1 = gtk_hbox_new (FALSE, 8);
2483         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2484
2485         combo = gtk_combo_new ();
2486         gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2487         gtkut_combo_set_items (GTK_COMBO (combo),
2488                                _("Default"),
2489                                "Mew / Wanderlust",
2490                                "Mutt",
2491                                _("Old Sylpheed"),
2492                                NULL);
2493         gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE);
2494
2495         hbox1 = gtk_hbox_new (FALSE, 8);
2496         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2497
2498         label = gtk_label_new
2499                 (_("You can also modify each menu shortcut by pressing\n"
2500                    "any key(s) when placing the mouse pointer on the item."));
2501         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2502         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2503
2504         hbox1 = gtk_hbox_new (FALSE, 8);
2505         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2506
2507         gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
2508                                  &cancel_btn, _("Cancel"), NULL, NULL);
2509         gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2510         gtk_widget_grab_default (ok_btn);
2511
2512         MANAGE_WINDOW_SIGNALS_CONNECT(window);
2513         gtk_signal_connect (GTK_OBJECT (window), "delete_event",
2514                             GTK_SIGNAL_FUNC (prefs_keybind_deleted), NULL);
2515         gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
2516                             GTK_SIGNAL_FUNC (prefs_keybind_key_pressed), NULL);
2517         gtk_signal_connect (GTK_OBJECT (ok_btn), "clicked",
2518                             GTK_SIGNAL_FUNC (prefs_keybind_apply_clicked),
2519                             NULL);
2520         gtk_signal_connect (GTK_OBJECT (cancel_btn), "clicked",
2521                             GTK_SIGNAL_FUNC (prefs_keybind_cancel),
2522                             NULL);
2523
2524         gtk_widget_show_all(window);
2525
2526         keybind.window = window;
2527         keybind.combo = combo;
2528 }
2529
2530 static void prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2531                                       gpointer data)
2532 {
2533         if (event && event->keyval == GDK_Escape)
2534                 prefs_keybind_cancel();
2535 }
2536
2537 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2538                                   gpointer data)
2539 {
2540         prefs_keybind_cancel();
2541         return TRUE;
2542 }
2543
2544 static void prefs_keybind_cancel(void)
2545 {
2546         gtk_widget_destroy(keybind.window);
2547         keybind.window = NULL;
2548         keybind.combo = NULL;
2549 }
2550
2551 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2552 {
2553         GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2554         gchar *text;
2555         gchar *rc_str;
2556
2557         static gchar *default_menurc =
2558                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2559                 "(menu-path \"<Main>/File/Save as...\" \"<control>S\")\n"
2560                 "(menu-path \"<Main>/File/Print...\" \"\")\n"
2561                 "(menu-path \"<Main>/File/Exit\" \"<control>Q\")\n"
2562
2563                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2564                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2565                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2566                 "(menu-path \"<Main>/Edit/Search folder...\" \"<shift><control>F\")\n"
2567
2568                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"V\")\n"
2569                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2570                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2571                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2572                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2573                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2574                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
2575                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2576                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2577                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2578                 "(menu-path \"<Main>/View/Update summary\" \"<control><alt>U\")\n"
2579
2580                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2581                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2582                 "(menu-path \"<Main>/Message/Compose an email message\" \"<control>M\")\n"
2583                 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
2584                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><control>R\")\n"
2585                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2586                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2587                 "(menu-path \"<Main>/Message/Forward\" \"<control><alt>F\")\n"
2588                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n" */
2589                 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
2590                 "(menu-path \"<Main>/Message/Copy...\" \"<shift><control>O\")\n"
2591                 "(menu-path \"<Main>/Message/Delete\" \"<control>D\")\n"
2592                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2593                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2594                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2595                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2596
2597                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2598                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2599                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2600
2601                 "(menu-path \"<Compose>/Message/Close\" \"<control>W\")\n"
2602                 "(menu-path \"<Compose>/Edit/Select all\" \"<control>A\")\n"
2603                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"\")\n"
2604                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"\")\n"
2605                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"\")\n"
2606                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"\")\n"
2607                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"\")";
2608
2609         static gchar *mew_wl_menurc =
2610                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"<shift>D\")\n"
2611                 "(menu-path \"<Main>/File/Save as...\" \"Y\")\n"
2612                 "(menu-path \"<Main>/File/Print...\" \"<shift>numbersign\")\n"
2613                 "(menu-path \"<Main>/File/Exit\" \"<shift>Q\")\n"
2614
2615                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2616                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2617                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2618                 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
2619
2620                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"\")\n"
2621                 "(menu-path \"<Main>/View/Thread view\" \"<shift>T\")\n"
2622                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2623                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2624                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2625                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2626                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
2627                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2628                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2629                 "(menu-path \"<Main>/View/Show all headers\" \"<shift>H\")\n"
2630                 "(menu-path \"<Main>/View/Update summary\" \"<shift>S\")\n"
2631
2632                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2633                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2634                 "(menu-path \"<Main>/Message/Compose an email message\" \"W\")\n"
2635                 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
2636                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift>A\")\n"
2637                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2638                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2639                 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
2640                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift>F\")\n" */
2641                 "(menu-path \"<Main>/Message/Move...\" \"O\")\n"
2642                 "(menu-path \"<Main>/Message/Copy...\" \"<shift>O\")\n"
2643                 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
2644                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2645                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2646                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2647                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"<shift>R\")\n"
2648
2649                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2650                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2651                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2652
2653                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2654                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2655                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2656                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2657                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2658                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2659                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2660
2661         static gchar *mutt_menurc =
2662                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2663                 "(menu-path \"<Main>/File/Save as...\" \"S\")\n"
2664                 "(menu-path \"<Main>/File/Print...\" \"P\")\n"
2665                 "(menu-path \"<Main>/File/Exit\" \"Q\")\n"
2666
2667                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2668                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2669                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2670                 "(menu-path \"<Main>/Edit/Search messages...\" \"slash\")\n"
2671
2672                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"V\")\n"
2673                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2674                 "(menu-path \"<Main>/View/Go to/Prev message\" \"\")\n"
2675                 "(menu-path \"<Main>/View/Go to/Next message\" \"\")\n"
2676                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"\")\n"
2677                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"\")\n"
2678                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"C\")\n"
2679                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2680                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2681                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2682                 "(menu-path \"<Main>/View/Update summary\" \"<control><alt>U\")\n"
2683
2684                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2685                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2686                 "(menu-path \"<Main>/Message/Compose an email message\" \"M\")\n"
2687                 "(menu-path \"<Main>/Message/Reply\" \"R\")\n"
2688                 "(menu-path \"<Main>/Message/Reply to/all\" \"G\")\n"
2689                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2690                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2691                 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
2692                 "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n"
2693                 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
2694                 "(menu-path \"<Main>/Message/Copy...\" \"<shift>C\")\n"
2695                 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
2696                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>F\")\n"
2697                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2698                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>N\")\n"
2699                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2700
2701                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2702                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2703                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2704
2705                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2706                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2707                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2708                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2709                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2710                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2711                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2712
2713         static gchar *old_sylpheed_menurc =
2714                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2715                 "(menu-path \"<Main>/File/Save as...\" \"\")\n"
2716                 "(menu-path \"<Main>/File/Print...\" \"<alt>P\")\n"
2717                 "(menu-path \"<Main>/File/Exit\" \"<alt>Q\")\n"
2718
2719                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2720                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2721                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2722                 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
2723
2724                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"\")\n"
2725                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2726                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2727                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2728                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2729                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2730                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"<alt>G\")\n"
2731                 "(menu-path \"<Main>/View/Open in new window\" \"<shift><control>N\")\n"
2732                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2733                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2734                 "(menu-path \"<Main>/View/Update summary\" \"<alt>U\")\n"
2735
2736                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<alt>I\")\n"
2737                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><alt>I\")\n"
2738                 "(menu-path \"<Main>/Message/Compose an email message\" \"<alt>N\")\n"
2739                 "(menu-path \"<Main>/Message/Reply\" \"<alt>R\")\n"
2740                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><alt>R\")\n"
2741                 "(menu-path \"<Main>/Message/Reply to/sender\" \"<control><alt>R\")\n"
2742                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2743                 "(menu-path \"<Main>/Message/Forward\" \"<shift><alt>F\")\n"
2744                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift><control>F\")\n" */
2745                 "(menu-path \"<Main>/Message/Move...\" \"<alt>O\")\n"
2746                 "(menu-path \"<Main>/Message/Copy...\" \"\")\n"
2747                 "(menu-path \"<Main>/Message/Delete\" \"<alt>D\")\n"
2748                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2749                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2750                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2751                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2752
2753                 "(menu-path \"<Main>/Tools/Address book\" \"<alt>A\")\n"
2754                 "(menu-path \"<Main>/Tools/Execute\" \"<alt>X\")\n"
2755                 "(menu-path \"<Main>/Tools/Log window\" \"<alt>L\")\n"
2756
2757                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2758                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2759                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2760                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2761                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2762                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2763                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2764
2765         text = gtk_entry_get_text(entry);
2766
2767         if (!strcmp(text, _("Default")))
2768                 rc_str = default_menurc;
2769         else if (!strcmp(text, "Mew / Wanderlust"))
2770                 rc_str = mew_wl_menurc;
2771         else if (!strcmp(text, "Mutt"))
2772                 rc_str = mutt_menurc;
2773         else if (!strcmp(text, _("Old Sylpheed")))
2774                 rc_str = old_sylpheed_menurc;
2775         else
2776                 return;
2777
2778         menu_factory_clear_rc(rc_str);
2779         gtk_item_factory_parse_rc_string(rc_str);
2780
2781         gtk_widget_destroy(keybind.window);
2782         keybind.window = NULL;
2783         keybind.combo = NULL;
2784 }
2785
2786 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2787 {
2788         GtkWidget *menu;
2789         GtkWidget *menuitem;
2790         gchar *charset;
2791
2792         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2793         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2794         charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2795         g_free(*((gchar **)pparam->data));
2796         *((gchar **)pparam->data) = g_strdup(charset);
2797 }
2798
2799 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2800 {
2801         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2802         gint index;
2803
2804         g_return_if_fail(optmenu != NULL);
2805         g_return_if_fail(*((gchar **)pparam->data) != NULL);
2806
2807         index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2808                                             (GCompareFunc)strcmp);
2809         if (index >= 0)
2810                 gtk_option_menu_set_history(optmenu, index);
2811         else {
2812                 gtk_option_menu_set_history(optmenu, 0);
2813                 prefs_common_charset_set_data_from_optmenu(pparam);
2814         }
2815 }
2816
2817 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2818 {
2819         GtkWidget *menu;
2820         GtkWidget *menuitem;
2821
2822         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2823         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2824         *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2825                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2826 }
2827
2828 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2829 {
2830         TransferEncodingMethod method =
2831                 *((TransferEncodingMethod *)pparam->data);
2832         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2833         gint index;
2834
2835         g_return_if_fail(optmenu != NULL);
2836
2837         index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2838                                             NULL);
2839         if (index >= 0)
2840                 gtk_option_menu_set_history(optmenu, index);
2841         else {
2842                 gtk_option_menu_set_history(optmenu, 0);
2843                 prefs_common_encoding_set_data_from_optmenu(pparam);
2844         }
2845 }
2846
2847 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2848 {
2849         GtkWidget *menu;
2850         GtkWidget *menuitem;
2851
2852         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2853         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2854         *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2855                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2856 }
2857
2858 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2859 {
2860         RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2861         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2862         GtkWidget *menu;
2863         GtkWidget *menuitem;
2864         gint index;
2865
2866         index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2867                                             NULL);
2868         if (index >= 0)
2869                 gtk_option_menu_set_history(optmenu, index);
2870         else {
2871                 gtk_option_menu_set_history(optmenu, 0);
2872                 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2873         }
2874
2875         menu = gtk_option_menu_get_menu(optmenu);
2876         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2877         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2878 }
2879
2880 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2881 {
2882         GtkWidget *menu;
2883         GtkWidget *menuitem;
2884
2885         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2886         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2887         *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2888                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2889 }
2890
2891 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2892 {
2893         SendDialogMode mode = *((SendDialogMode *)pparam->data);
2894         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2895         GtkWidget *menu;
2896         GtkWidget *menuitem;
2897
2898         switch (mode) {
2899         case SEND_DIALOG_ALWAYS:
2900                 gtk_option_menu_set_history(optmenu, 0);
2901                 break;
2902         case SEND_DIALOG_NEVER:
2903                 gtk_option_menu_set_history(optmenu, 1);
2904                 break;
2905         default:
2906                 break;
2907         }
2908
2909         menu = gtk_option_menu_get_menu(optmenu);
2910         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2911         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2912 }
2913
2914 static void prefs_common_apply(void)
2915 {
2916         MainWindow *mainwindow;
2917
2918         prefs_set_data_from_dialog(param);
2919         sock_set_io_timeout(prefs_common.io_timeout_secs);
2920         main_window_reflect_prefs_all_real(FALSE);
2921         prefs_common_write_config();
2922
2923         mainwindow = mainwindow_get_mainwindow();
2924         log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
2925                                 prefs_common.loglength);
2926         
2927         inc_autocheck_timer_remove();
2928         inc_autocheck_timer_set();
2929 }
2930
2931 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
2932 {
2933         GtkWidget *menu;
2934         GtkWidget *menuitem;
2935
2936         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2937         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2938         *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
2939                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2940 }
2941
2942 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
2943 {
2944         NextUnreadMsgDialogShow dialog_show;
2945         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2946         GtkWidget *menu;
2947         GtkWidget *menuitem;
2948
2949         dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
2950
2951         switch (dialog_show) {
2952         case NEXTUNREADMSGDIALOG_ALWAYS:
2953                 gtk_option_menu_set_history(optmenu, 0);
2954                 break;
2955         case NEXTUNREADMSGDIALOG_ASSUME_YES:
2956                 gtk_option_menu_set_history(optmenu, 1);
2957                 break;
2958         case NEXTUNREADMSGDIALOG_ASSUME_NO:
2959                 gtk_option_menu_set_history(optmenu, 2);
2960                 break;
2961         }
2962
2963         menu = gtk_option_menu_get_menu(optmenu);
2964         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2965         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2966 }
2967
2968 /*
2969 static void prefs_common_cancel(void)
2970 {
2971         gtk_widget_hide(dialog.window);
2972         inc_unlock();
2973 }
2974 */
2975
2976 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
2977 {
2978         GtkWidget *menu;
2979         GtkWidget *menuitem;
2980
2981         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2982         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2983         *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
2984                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2985 }  */
2986
2987 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
2988 {
2989         RecvDialogShow dialog_show;
2990         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2991         GtkWidget *menu;
2992         GtkWidget *menuitem;
2993
2994         dialog_show = *((RecvDialogShow *)pparam->data);
2995
2996         switch (dialog_show) {
2997         case RECVDIALOG_ALWAYS:
2998                 gtk_option_menu_set_history(optmenu, 0);
2999                 break;
3000         case RECVDIALOG_WINDOW_ACTIVE:
3001                 gtk_option_menu_set_history(optmenu, 1);
3002                 break;
3003         case RECVDIALOG_NEVER:
3004                 gtk_option_menu_set_history(optmenu, 2);
3005                 break;
3006         default:
3007         }
3008
3009         menu = gtk_option_menu_get_menu(optmenu);
3010         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3011         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3012 }     */