7cfa44a8b52ea61ef1f68ee09d3db2ece981c072
[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
698         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
699          P_INT, &other.spinbtn_iotimeout,
700          prefs_set_data_from_spinbtn, prefs_set_spinbtn},
701         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
702          NULL, NULL, NULL},
703         {"important_score", "1", &prefs_common.important_score, P_INT,
704          NULL, NULL, NULL},
705         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
706          &other.checkbtn_cliplog,
707          prefs_set_data_from_toggle, prefs_set_toggle},
708         {"log_length", "500", &prefs_common.loglength, P_INT,
709          &other.loglength_entry,
710          prefs_set_data_from_entry, prefs_set_entry},
711
712         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
713          NULL, NULL, NULL},
714         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
715          NULL, NULL, NULL},
716
717         {"color_new", "179", &prefs_common.color_new, P_COLOR,
718          NULL, NULL, NULL},
719
720         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
721 };
722
723 /* widget creating functions */
724 static void prefs_common_create         (void);
725 static void prefs_receive_create        (void);
726 static void prefs_send_create           (void);
727 static void prefs_compose_create        (void);
728 static void prefs_quote_create          (void);
729 static void prefs_display_create        (void);
730 static void prefs_message_create        (void);
731 static void prefs_interface_create      (void);
732 static void prefs_other_create          (void);
733
734 static void date_format_ok_btn_clicked          (GtkButton      *button,
735                                                  GtkWidget     **widget);
736 static void date_format_cancel_btn_clicked      (GtkButton      *button,
737                                                  GtkWidget     **widget);
738 static void date_format_key_pressed             (GtkWidget      *keywidget,
739                                                  GdkEventKey    *event,
740                                                  GtkWidget     **widget);
741 static gboolean date_format_on_delete           (GtkWidget      *dialogwidget,
742                                                  GdkEventAny    *event,
743                                                  GtkWidget     **widget);
744 static void date_format_entry_on_change         (GtkEditable    *editable,
745                                                  GtkLabel       *example);
746 static void date_format_select_row              (GtkWidget      *date_format_list,
747                                                  gint            row,
748                                                  gint            column,
749                                                  GdkEventButton *event,
750                                                  GtkWidget      *date_format);
751 static GtkWidget *date_format_create            (GtkButton      *button,
752                                                  void           *data);
753
754 static void prefs_keybind_select                (void);
755 static gint prefs_keybind_deleted               (GtkWidget      *widget,
756                                                  GdkEventAny    *event,
757                                                  gpointer        data);
758 static void prefs_keybind_key_pressed           (GtkWidget      *widget,
759                                                  GdkEventKey    *event,
760                                                  gpointer        data);
761 static void prefs_keybind_cancel                (void);
762 static void prefs_keybind_apply_clicked         (GtkWidget      *widget);
763
764 static void prefs_common_apply          (void);
765
766 typedef struct CommonPage
767 {
768         PrefsPage page;
769  
770         GtkWidget *vbox;
771 } CommonPage;
772
773 static CommonPage common_page;
774
775 static void create_widget_func(PrefsPage * _page,
776                                            GtkWindow * window,
777                                            gpointer data)
778 {
779         CommonPage *page = (CommonPage *) _page;
780         GtkWidget *vbox;
781
782         vbox = gtk_vbox_new(FALSE, 6);
783         gtk_widget_show(vbox);
784
785         if (notebook == NULL)
786                 prefs_common_create();
787         gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
788         gtk_notebook_set_page(GTK_NOTEBOOK(notebook), 0);
789
790         prefs_set_dialog(param);
791
792         page->vbox = vbox;
793
794         page->page.widget = vbox;
795 }
796
797 static void destroy_widget_func(PrefsPage *_page)
798 {
799         CommonPage *page = (CommonPage *) _page;
800
801         gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
802 }
803
804 static void save_func(PrefsPage * _page)
805 {
806         prefs_common_apply();
807 }
808
809 void prefs_common_init(void) 
810 {
811         static gchar *path[2];
812
813         prefs_common.disphdr_list = NULL;
814             
815         path[0] = _("Common");
816         path[2] = NULL;
817         
818         common_page.page.path = path;
819         common_page.page.weight = 1000.0;
820         common_page.page.create_widget = create_widget_func;
821         common_page.page.destroy_widget = destroy_widget_func;
822         common_page.page.save_page = save_func;
823
824         prefs_gtk_register_page((PrefsPage *) &common_page);
825 }
826
827 PrefsCommon *prefs_common_get(void)
828 {
829         return &prefs_common;
830 }
831
832 /*
833  * Read history list from the specified history file
834  */
835 GList *prefs_common_read_history(const gchar *history) 
836 {
837         FILE *fp;
838         gchar *path;
839         gchar buf[PREFSBUFSIZE];
840         GList *tmp = NULL;
841
842         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
843                            NULL);
844         if ((fp = fopen(path, "rb")) == NULL) {
845                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
846                 g_free(path);
847                 return NULL;
848         }
849         g_free(path);
850         while (fgets(buf, sizeof(buf), fp) != NULL) {
851                 g_strstrip(buf);
852                 if (buf[0] == '\0') continue;
853                 tmp = add_history(tmp, buf);
854         }
855         fclose(fp);
856
857         tmp = g_list_reverse(tmp);
858
859         return tmp;
860 }
861
862 void prefs_common_read_config(void)
863 {
864         prefs_read_config(param, "Common", COMMON_RC);
865
866         prefs_common.mime_open_cmd_history =
867                 prefs_common_read_history(COMMAND_HISTORY);
868         prefs_common.summary_quicksearch_history =
869                 prefs_common_read_history(QUICKSEARCH_HISTORY);
870 }
871
872 /*
873  * Save history list to the specified history file
874  */
875 void prefs_common_save_history(const gchar *history, GList *list)
876 {
877         GList *cur;
878         FILE *fp;
879         gchar *path;
880
881         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
882                            NULL);
883         if ((fp = fopen(path, "wb")) == NULL) {
884                 FILE_OP_ERROR(path, "fopen");
885                 g_free(path);
886                 return;
887         }
888
889         for (cur = list; cur != NULL; cur = cur->next) {
890                 fputs((gchar *)cur->data, fp);
891                 fputc('\n', fp);
892         }
893
894         fclose(fp);
895         g_free(path);
896 }
897
898 void prefs_common_write_config(void)
899 {
900         prefs_write_config(param, "Common", COMMON_RC);
901
902         prefs_common_save_history(COMMAND_HISTORY, 
903                 prefs_common.mime_open_cmd_history);
904         prefs_common_save_history(QUICKSEARCH_HISTORY, 
905                 prefs_common.summary_quicksearch_history);
906 }
907
908 static void prefs_common_create(void)
909 {
910         gint page = 0;
911
912         debug_print("Creating common preferences window...\n");
913
914         notebook = gtk_notebook_new ();
915         gtk_widget_show(notebook);
916         gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
917         /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
918         gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
919         
920         gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
921
922         gtk_widget_ref(notebook);
923
924         /* create all widgets on notebook */
925         prefs_receive_create();
926         SET_NOTEBOOK_LABEL(notebook, _("Receive"),   page++);
927         prefs_send_create();
928         SET_NOTEBOOK_LABEL(notebook, _("Send"),      page++);
929         prefs_compose_create();
930         SET_NOTEBOOK_LABEL(notebook, _("Compose"),   page++);
931         prefs_quote_create();
932         SET_NOTEBOOK_LABEL(notebook, _("Quote"),     page++);
933         prefs_display_create();
934         SET_NOTEBOOK_LABEL(notebook, _("Display"),   page++);
935         prefs_message_create();
936         SET_NOTEBOOK_LABEL(notebook, _("Message"),   page++);
937         prefs_interface_create();
938         SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
939         prefs_other_create();
940         SET_NOTEBOOK_LABEL(notebook, _("Other"),     page++);
941
942         gtk_widget_show_all(notebook);
943 }
944
945 static void prefs_receive_create(void)
946 {
947         GtkWidget *vbox1;
948         GtkWidget *vbox2;
949         GtkWidget *frame_incext;
950         GtkWidget *checkbtn_incext;
951         GtkWidget *hbox;
952         GtkWidget *label_incext;
953         GtkWidget *entry_incext;
954         /* GtkWidget *button_incext; */
955
956         GtkWidget *hbox_autochk;
957         GtkWidget *checkbtn_autochk;
958         GtkWidget *label_autochk1;
959         GtkObject *spinbtn_autochk_adj;
960         GtkWidget *spinbtn_autochk;
961         GtkWidget *label_autochk2;
962         GtkWidget *checkbtn_chkonstartup;
963         GtkWidget *checkbtn_scan_after_inc;
964
965
966         GtkWidget *frame_newmail;
967         GtkWidget *hbox_newmail_notify;
968         GtkWidget *checkbtn_newmail_auto;
969         GtkWidget *checkbtn_newmail_manu;
970         GtkWidget *entry_newmail_notify_cmd;
971         GtkWidget *label_newmail_notify_cmd;
972
973         GtkWidget *hbox_recvdialog;
974         GtkWidget *label_recvdialog;
975         GtkWidget *menu;
976         GtkWidget *menuitem;
977         GtkWidget *optmenu_recvdialog;
978         GtkWidget *checkbtn_no_recv_err_panel;
979         GtkWidget *checkbtn_close_recv_dialog;
980
981         vbox1 = gtk_vbox_new (FALSE, VSPACING);
982         gtk_widget_show (vbox1);
983         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
984         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
985
986         PACK_FRAME(vbox1, frame_incext, _("External program"));
987
988         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
989         gtk_widget_show (vbox2);
990         gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
991         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
992
993         /* Use of external incorporation program */
994         PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
995                            _("Use external program for incorporation"));
996
997         hbox = gtk_hbox_new (FALSE, 8);
998         gtk_widget_show (hbox);
999         gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1000         SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1001
1002         label_incext = gtk_label_new (_("Command"));
1003         gtk_widget_show (label_incext);
1004         gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1005
1006         entry_incext = gtk_entry_new ();
1007         gtk_widget_show (entry_incext);
1008         gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1009
1010 #if 0
1011         button_incext = gtk_button_new_with_label ("... ");
1012         gtk_widget_show (button_incext);
1013         gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1014 #endif
1015
1016         vbox2 = gtk_vbox_new (FALSE, 0);
1017         gtk_widget_show (vbox2);
1018         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1019
1020         /* Auto-checking */
1021         hbox_autochk = gtk_hbox_new (FALSE, 8);
1022         gtk_widget_show (hbox_autochk);
1023         gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1024
1025         PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1026                            _("Auto-check new mail"));
1027
1028         label_autochk1 = gtk_label_new (_("every"));
1029         gtk_widget_show (label_autochk1);
1030         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1031
1032         spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1033         spinbtn_autochk = gtk_spin_button_new
1034                 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1035         gtk_widget_show (spinbtn_autochk);
1036         gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1037         gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1038         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1039
1040         label_autochk2 = gtk_label_new (_("minute(s)"));
1041         gtk_widget_show (label_autochk2);
1042         gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1043
1044         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1045         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1046         SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1047
1048         PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1049                            _("Check new mail on startup"));
1050         PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1051                            _("Update all local folders after incorporation"));
1052
1053
1054         /* receive dialog */
1055         hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1056         gtk_widget_show (hbox_recvdialog);
1057         gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1058
1059         label_recvdialog = gtk_label_new (_("Show receive dialog"));
1060         gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1061         gtk_widget_show (label_recvdialog);
1062         gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1063
1064         optmenu_recvdialog = gtk_option_menu_new ();
1065         gtk_widget_show (optmenu_recvdialog);
1066         gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1067
1068         menu = gtk_menu_new ();
1069         MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1070         MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1071                       RECV_DIALOG_MANUAL);
1072         MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1073
1074         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1075
1076         PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1077                            _("Don't popup error dialog on receive error"));
1078
1079         PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1080                            _("Close receive dialog when finished"));
1081         
1082         PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1083                                            "arrives"));
1084         vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1085         gtk_widget_show (vbox2);
1086         gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1087         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1088
1089         hbox = gtk_hbox_new (TRUE, 8);
1090         gtk_widget_show (hbox);
1091         PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1092                            _("after autochecking"));
1093         PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1094                            _("after manual checking"));
1095         gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1096         gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1097                            GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1098                            NULL);
1099         gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1100                            GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1101                            NULL);
1102
1103         hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1104         gtk_widget_show (hbox);
1105         gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE, 
1106                             FALSE, 0);
1107
1108         label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1109                                                     "(use %d as number of new "
1110                                                     "mails)"));
1111         gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd), 
1112                               GTK_JUSTIFY_RIGHT);
1113         gtk_widget_show (label_newmail_notify_cmd);
1114         gtk_box_pack_start (GTK_BOX (hbox_newmail_notify), 
1115                             label_newmail_notify_cmd, FALSE, FALSE, 0);
1116
1117         entry_newmail_notify_cmd = gtk_entry_new ();
1118         gtk_widget_show (entry_newmail_notify_cmd);
1119         gtk_box_pack_start (GTK_BOX (hbox_newmail_notify), 
1120                             entry_newmail_notify_cmd, TRUE, TRUE, 0);
1121
1122         gtk_widget_set_sensitive(hbox_newmail_notify, 
1123                                  prefs_common.newmail_notify_auto || 
1124                                  prefs_common.newmail_notify_manu);
1125
1126         receive.checkbtn_incext = checkbtn_incext;
1127         receive.entry_incext    = entry_incext;
1128         /* receive.button_incext   = button_incext; */
1129
1130         receive.checkbtn_autochk    = checkbtn_autochk;
1131         receive.spinbtn_autochk     = spinbtn_autochk;
1132         receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1133
1134         receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1135         receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1136
1137
1138         receive.checkbtn_newmail_auto  = checkbtn_newmail_auto;
1139         receive.checkbtn_newmail_manu  = checkbtn_newmail_manu;
1140         receive.hbox_newmail_notify    = hbox_newmail_notify;
1141         receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1142         receive.optmenu_recvdialog          = optmenu_recvdialog;
1143         receive.checkbtn_no_recv_err_panel  = checkbtn_no_recv_err_panel;
1144         receive.checkbtn_close_recv_dialog  = checkbtn_close_recv_dialog;
1145 }
1146
1147 static void prefs_send_create(void)
1148 {
1149         GtkWidget *vbox1;
1150         GtkWidget *vbox2;
1151         GtkWidget *hbox1;
1152         GtkWidget *checkbtn_savemsg;
1153         GtkWidget *label_outcharset;
1154         GtkWidget *optmenu_charset;
1155         GtkWidget *optmenu_menu;
1156         GtkWidget *menuitem;
1157         GtkTooltips *charset_tooltip;
1158         GtkWidget *optmenu_encoding;
1159         GtkWidget *label_encoding;
1160         GtkTooltips *encoding_tooltip;
1161         GtkWidget *label_senddialog;
1162         GtkWidget *menu;
1163         GtkWidget *optmenu_senddialog;
1164         GtkWidget *hbox_senddialog;
1165
1166         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1167         gtk_widget_show (vbox1);
1168         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1169         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1170
1171         vbox2 = gtk_vbox_new (FALSE, 0);
1172         gtk_widget_show (vbox2);
1173         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1174
1175         PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1176                            _("Save sent messages to Sent folder"));
1177
1178         hbox_senddialog = gtk_hbox_new (FALSE, 8);
1179         gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1180
1181         label_senddialog = gtk_label_new (_("Show send dialog"));
1182         gtk_widget_show (label_senddialog);
1183         gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1184
1185         optmenu_senddialog = gtk_option_menu_new ();
1186         gtk_widget_show (optmenu_senddialog);
1187         gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1188         
1189         menu = gtk_menu_new ();
1190         MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1191         MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1192
1193         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1194
1195         hbox1 = gtk_hbox_new (FALSE, 8);
1196         gtk_widget_show (hbox1);
1197         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1198
1199         label_outcharset = gtk_label_new (_("Outgoing codeset"));
1200         gtk_widget_show (label_outcharset);
1201         gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1202
1203         charset_tooltip = gtk_tooltips_new();
1204
1205         optmenu_charset = gtk_option_menu_new ();
1206         gtk_widget_show (optmenu_charset);
1207         gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1208                              _("If `Automatic' is selected, the optimal encoding"
1209                                " for the current locale will be used"),
1210                              NULL);
1211         gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1212
1213         optmenu_menu = gtk_menu_new ();
1214
1215 #define SET_MENUITEM(str, data) \
1216 { \
1217         MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1218 }
1219
1220         SET_MENUITEM(_("Automatic (Recommended)"),       CS_AUTO);
1221         SET_MENUITEM(_("7bit ascii (US-ASCII)"),         CS_US_ASCII);
1222 #if HAVE_ICONV
1223         SET_MENUITEM(_("Unicode (UTF-8)"),               CS_UTF_8);
1224 #endif
1225         SET_MENUITEM(_("Western European (ISO-8859-1)"),  CS_ISO_8859_1);
1226         SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1227         SET_MENUITEM(_("Central European (ISO-8859-2)"),  CS_ISO_8859_2);
1228         SET_MENUITEM(_("Baltic (ISO-8859-13)"),           CS_ISO_8859_13);
1229         SET_MENUITEM(_("Baltic (ISO-8859-4)"),            CS_ISO_8859_4);
1230         SET_MENUITEM(_("Greek (ISO-8859-7)"),             CS_ISO_8859_7);
1231         SET_MENUITEM(_("Turkish (ISO-8859-9)"),           CS_ISO_8859_9);
1232 #if HAVE_ICONV
1233         SET_MENUITEM(_("Cyrillic (ISO-8859-5)"),          CS_ISO_8859_5);
1234 #endif
1235         SET_MENUITEM(_("Cyrillic (KOI8-R)"),             CS_KOI8_R);
1236 #if HAVE_ICONV
1237         SET_MENUITEM(_("Cyrillic (Windows-1251)"),       CS_WINDOWS_1251);
1238         SET_MENUITEM(_("Cyrillic (KOI8-U)"),             CS_KOI8_U);
1239 #endif
1240         SET_MENUITEM(_("Japanese (ISO-2022-JP)"),        CS_ISO_2022_JP);
1241 #if 0
1242         SET_MENUITEM(_("Japanese (EUC-JP)"),             CS_EUC_JP);
1243         SET_MENUITEM(_("Japanese (Shift_JIS)"),          CS_SHIFT_JIS);
1244 #endif /* 0 */
1245         SET_MENUITEM(_("Simplified Chinese (GB2312)"),   CS_GB2312);
1246         SET_MENUITEM(_("Traditional Chinese (Big5)"),    CS_BIG5);
1247 #if 0
1248         SET_MENUITEM(_("Traditional Chinese (EUC-TW)"),  CS_EUC_TW);
1249         SET_MENUITEM(_("Chinese (ISO-2022-CN)"),         CS_ISO_2022_CN);
1250 #endif /* 0 */
1251         SET_MENUITEM(_("Korean (EUC-KR)"),               CS_EUC_KR);
1252         SET_MENUITEM(_("Thai (TIS-620)"),                CS_TIS_620);
1253         SET_MENUITEM(_("Thai (Windows-874)"),            CS_WINDOWS_874);
1254
1255         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1256                                   optmenu_menu);
1257
1258         hbox1 = gtk_hbox_new (FALSE, 8);
1259         gtk_widget_show (hbox1);
1260         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1261
1262         hbox1 = gtk_hbox_new (FALSE, 8);
1263         gtk_widget_show (hbox1);
1264         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1265
1266         label_encoding = gtk_label_new (_("Transfer encoding"));
1267         gtk_widget_show (label_encoding);
1268         gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1269
1270         encoding_tooltip = gtk_tooltips_new();
1271
1272         optmenu_encoding = gtk_option_menu_new ();
1273         gtk_widget_show (optmenu_encoding);
1274         gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1275                              _("Specify Content-Transfer-Encoding used when"
1276                                " message body contains non-ASCII characters"),
1277                              NULL);
1278         gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1279
1280         optmenu_menu = gtk_menu_new ();
1281
1282         SET_MENUITEM(_("Automatic"),     CTE_AUTO);
1283         SET_MENUITEM("base64",           CTE_BASE64);
1284         SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1285         SET_MENUITEM("8bit",             CTE_8BIT);
1286
1287         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1288                                   optmenu_menu);
1289
1290         hbox1 = gtk_hbox_new (FALSE, 8);
1291         gtk_widget_show (hbox1);
1292         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1293
1294         p_send.checkbtn_savemsg  = checkbtn_savemsg;
1295         p_send.optmenu_senddialog = optmenu_senddialog;
1296
1297         p_send.optmenu_charset = optmenu_charset;
1298         p_send.optmenu_encoding_method = optmenu_encoding;
1299 }
1300
1301 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1302 {
1303         gboolean toggled;
1304
1305         toggled = gtk_toggle_button_get_active
1306                         (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1307                   gtk_toggle_button_get_active
1308                         (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1309         gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1310 }
1311
1312 static void prefs_compose_create(void)
1313 {
1314         GtkWidget *vbox1;
1315         GtkWidget *vbox2;
1316
1317         GtkWidget *checkbtn_autoextedit;
1318
1319         GtkWidget *frame_autosel;
1320         GtkWidget *hbox_autosel;
1321         GtkWidget *checkbtn_reply_account_autosel;
1322         GtkWidget *checkbtn_forward_account_autosel;
1323         GtkWidget *checkbtn_reedit_account_autosel;
1324
1325         GtkWidget *hbox_undolevel;
1326         GtkWidget *label_undolevel;
1327         GtkObject *spinbtn_undolevel_adj;
1328         GtkWidget *spinbtn_undolevel;
1329
1330         GtkWidget *hbox5;
1331
1332         GtkWidget *checkbtn_default_reply_list;
1333
1334         GtkWidget *checkbtn_forward_as_attachment;
1335         GtkWidget *checkbtn_redirect_keep_from;
1336         GtkWidget *checkbtn_block_cursor;
1337
1338         GtkWidget *hbox_autosave;
1339         GtkWidget *checkbtn_autosave;
1340         GtkWidget *entry_autosave_length;
1341         GtkWidget *label_autosave_length;
1342         
1343         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1344         gtk_widget_show (vbox1);
1345         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1346         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1347
1348         /* Account autoselection */
1349         PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1350
1351         hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1352         gtk_widget_show (hbox_autosel);
1353         gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1354         gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1355
1356         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1357                            _("when replying"));
1358         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1359                            _("when forwarding"));
1360         PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1361                            _("when re-editing"));
1362
1363         vbox2 = gtk_vbox_new (FALSE, 0);
1364         gtk_widget_show (vbox2);
1365         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1366
1367         PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1368                            _("Reply button invokes mailing list reply"));
1369
1370         PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1371                            _("Automatically launch the external editor"));
1372
1373         hbox5 = gtk_hbox_new (FALSE, 8);
1374         gtk_widget_show (hbox5);
1375         gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1376
1377         PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1378                            _("Forward as attachment"));
1379
1380         PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1381                           _("Block cursor"));
1382
1383         PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1384                            _("Keep the original 'From' header when redirecting"));
1385
1386         
1387         hbox_autosave = gtk_hbox_new (FALSE, 8);
1388         gtk_widget_show (hbox_autosave);
1389         gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1390         
1391         PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1392                            _("Autosave to Drafts folder every "));
1393
1394         entry_autosave_length = gtk_entry_new();
1395         gtk_widget_set_usize (entry_autosave_length, 64, -1);   
1396         gtk_widget_show (entry_autosave_length);
1397         gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1398         
1399         label_autosave_length = gtk_label_new(_("characters"));
1400         gtk_widget_show (label_autosave_length);
1401         gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1402         
1403         hbox_undolevel = gtk_hbox_new (FALSE, 8);
1404         gtk_widget_show (hbox_undolevel);
1405         gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1406
1407         label_undolevel = gtk_label_new (_("Undo level"));
1408         gtk_widget_show (label_undolevel);
1409         gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1410
1411         spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1412         spinbtn_undolevel = gtk_spin_button_new
1413                 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1414         gtk_widget_show (spinbtn_undolevel);
1415         gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1416         gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1417         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1418
1419        /*
1420         compose.checkbtn_quote   = checkbtn_quote;
1421         compose.entry_quotemark  = entry_quotemark;
1422         compose.text_quotefmt    = text_quotefmt;
1423         */
1424
1425         compose.checkbtn_autoextedit = checkbtn_autoextedit;
1426
1427         compose.checkbtn_reply_account_autosel   = checkbtn_reply_account_autosel;
1428         compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1429         compose.checkbtn_reedit_account_autosel  = checkbtn_reedit_account_autosel;
1430
1431         compose.spinbtn_undolevel     = spinbtn_undolevel;
1432         compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1433
1434         compose.checkbtn_autosave     = checkbtn_autosave;
1435         compose.entry_autosave_length = entry_autosave_length;
1436         
1437         compose.checkbtn_forward_as_attachment =
1438                 checkbtn_forward_as_attachment;
1439         compose.checkbtn_redirect_keep_from =
1440                 checkbtn_redirect_keep_from;
1441         compose.checkbtn_block_cursor   =
1442                 checkbtn_block_cursor;
1443         compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1444 }
1445
1446 static void prefs_quote_create(void)
1447 {
1448         GtkWidget *vbox1;
1449         GtkWidget *frame_quote;
1450         GtkWidget *vbox_quote;
1451         GtkWidget *hbox1;
1452         GtkWidget *hbox2;
1453         GtkWidget *label_quotemark;
1454         GtkWidget *entry_quotemark;
1455         GtkWidget *scrolledwin_quotefmt;
1456         GtkWidget *text_quotefmt;
1457
1458         GtkWidget *entry_fw_quotemark;
1459         GtkWidget *text_fw_quotefmt;
1460
1461         GtkWidget *entry_quote_chars;
1462         GtkWidget *label_quote_chars;
1463         
1464         GtkWidget *btn_quotedesc;
1465
1466         GtkWidget *checkbtn_reply_with_quote;
1467
1468         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1469         gtk_widget_show (vbox1);
1470         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1471         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1472
1473         /* reply */
1474
1475         PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1476
1477         PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1478
1479         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1480         gtk_widget_show (vbox_quote);
1481         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1482         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1483
1484         hbox1 = gtk_hbox_new (FALSE, 32);
1485         gtk_widget_show (hbox1);
1486         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1487
1488         hbox2 = gtk_hbox_new (FALSE, 8);
1489         gtk_widget_show (hbox2);
1490         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1491
1492         label_quotemark = gtk_label_new (_("Quotation mark"));
1493         gtk_widget_show (label_quotemark);
1494         gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1495
1496         entry_quotemark = gtk_entry_new ();
1497         gtk_widget_show (entry_quotemark);
1498         gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1499         gtk_widget_set_usize (entry_quotemark, 64, -1);
1500
1501         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1502         gtk_widget_show (scrolledwin_quotefmt);
1503         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1504         gtk_scrolled_window_set_policy
1505                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1506                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1507
1508         text_quotefmt = gtk_text_new (NULL, NULL);
1509         gtk_widget_show (text_quotefmt);
1510         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1511         gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1512         gtk_widget_set_usize(text_quotefmt, -1, 60);
1513
1514         /* forward */
1515
1516         PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1517
1518         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1519         gtk_widget_show (vbox_quote);
1520         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1521         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1522
1523         hbox1 = gtk_hbox_new (FALSE, 32);
1524         gtk_widget_show (hbox1);
1525         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1526
1527         hbox2 = gtk_hbox_new (FALSE, 8);
1528         gtk_widget_show (hbox2);
1529         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1530
1531         label_quotemark = gtk_label_new (_("Quotation mark"));
1532         gtk_widget_show (label_quotemark);
1533         gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1534
1535         entry_fw_quotemark = gtk_entry_new ();
1536         gtk_widget_show (entry_fw_quotemark);
1537         gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1538                             FALSE, FALSE, 0);
1539         gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
1540
1541         scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1542         gtk_widget_show (scrolledwin_quotefmt);
1543         gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1544         gtk_scrolled_window_set_policy
1545                 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1546                  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1547
1548         text_fw_quotefmt = gtk_text_new (NULL, NULL);
1549         gtk_widget_show (text_fw_quotefmt);
1550         gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1551                           text_fw_quotefmt);
1552         gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
1553         gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
1554
1555         hbox1 = gtk_hbox_new (FALSE, 32);
1556         gtk_widget_show (hbox1);
1557         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1558
1559         btn_quotedesc =
1560                 gtk_button_new_with_label (_(" Description of symbols "));
1561         gtk_widget_show (btn_quotedesc);
1562         gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1563         gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1564                            GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
1565
1566         /* quote chars */
1567
1568         PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1569
1570         vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1571         gtk_widget_show (vbox_quote);
1572         gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1573         gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1574
1575         hbox1 = gtk_hbox_new (FALSE, 32);
1576         gtk_widget_show (hbox1);
1577         gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1578
1579         hbox2 = gtk_hbox_new (FALSE, 8);
1580         gtk_widget_show (hbox2);
1581         gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1582
1583         label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1584         gtk_widget_show (label_quote_chars);
1585         gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1586
1587         entry_quote_chars = gtk_entry_new ();
1588         gtk_widget_show (entry_quote_chars);
1589         gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1590                             FALSE, FALSE, 0);
1591         gtk_widget_set_usize (entry_quote_chars, 64, -1);
1592
1593
1594         compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1595         quote.entry_quotemark    = entry_quotemark;
1596         quote.text_quotefmt      = text_quotefmt;
1597         quote.entry_fw_quotemark = entry_fw_quotemark;
1598         quote.text_fw_quotefmt   = text_fw_quotefmt;
1599         quote.entry_quote_chars  = entry_quote_chars;
1600 }
1601
1602 static void prefs_display_create(void)
1603 {
1604         GtkWidget *vbox1;
1605         GtkWidget *chkbtn_transhdr;
1606         GtkWidget *chkbtn_folder_unread;
1607         GtkWidget *hbox1;
1608         GtkWidget *label_ng_abbrev;
1609         GtkWidget *spinbtn_ng_abbrev_len;
1610         GtkObject *spinbtn_ng_abbrev_len_adj;
1611         GtkWidget *frame_summary;
1612         GtkWidget *vbox2;
1613         GtkWidget *chkbtn_swapfrom;
1614         GtkWidget *chkbtn_useaddrbook;
1615         GtkWidget *chkbtn_threadsubj;
1616         GtkWidget *vbox3;
1617         GtkWidget *label_datefmt;
1618         GtkWidget *button_datefmt;
1619         GtkWidget *entry_datefmt;
1620         GtkWidget *button_dispitem;
1621
1622         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1623         gtk_widget_show (vbox1);
1624         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1625         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1626
1627         vbox2 = gtk_vbox_new (FALSE, 0);
1628         gtk_widget_show (vbox2);
1629         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1630
1631         PACK_CHECK_BUTTON
1632                 (vbox2, chkbtn_transhdr,
1633                  _("Translate header name (such as `From:', `Subject:')"));
1634
1635         PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1636                            _("Display unread number next to folder name"));
1637
1638         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1639
1640         hbox1 = gtk_hbox_new (FALSE, 8);
1641         gtk_widget_show (hbox1);
1642         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1643
1644         label_ng_abbrev = gtk_label_new
1645                 (_("Abbreviate newsgroup names longer than"));
1646         gtk_widget_show (label_ng_abbrev);
1647         gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1648
1649         spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1650         spinbtn_ng_abbrev_len = gtk_spin_button_new
1651                 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1652         gtk_widget_show (spinbtn_ng_abbrev_len);
1653         gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1654                             FALSE, FALSE, 0);
1655         gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
1656         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1657                                      TRUE);
1658
1659         label_ng_abbrev = gtk_label_new
1660                 (_("letters"));
1661         gtk_widget_show (label_ng_abbrev);
1662         gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1663
1664         /* ---- Summary ---- */
1665
1666         PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1667
1668         vbox2 = gtk_vbox_new (FALSE, 0);
1669         gtk_widget_show (vbox2);
1670         gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1671         gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1672
1673         PACK_CHECK_BUTTON
1674                 (vbox2, chkbtn_swapfrom,
1675                  _("Display recipient in `From' column if sender is yourself"));
1676         PACK_CHECK_BUTTON
1677                 (vbox2, chkbtn_useaddrbook,
1678                  _("Display sender using address book"));
1679         PACK_CHECK_BUTTON
1680                 (vbox2, chkbtn_threadsubj,
1681                  _("Thread using subject in addition to standard headers"));
1682
1683         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1684
1685         hbox1 = gtk_hbox_new (FALSE, 8);
1686         gtk_widget_show (hbox1);
1687         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1688
1689         label_datefmt = gtk_label_new (_("Date format"));
1690         gtk_widget_show (label_datefmt);
1691         gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1692
1693         entry_datefmt = gtk_entry_new ();
1694         gtk_widget_show (entry_datefmt);
1695         gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1696
1697         button_datefmt = gtk_button_new_with_label (" ... ");
1698
1699         gtk_widget_show (button_datefmt);
1700         gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1701         gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1702                             GTK_SIGNAL_FUNC (date_format_create), NULL);
1703
1704         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1705
1706         hbox1 = gtk_hbox_new (FALSE, 8);
1707         gtk_widget_show (hbox1);
1708         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1709
1710         button_dispitem = gtk_button_new_with_label
1711                 (_(" Set displayed items in summary... "));
1712         gtk_widget_show (button_dispitem);
1713         gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1714         gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1715                             GTK_SIGNAL_FUNC (prefs_summary_column_open),
1716                             NULL);
1717
1718         display.chkbtn_transhdr           = chkbtn_transhdr;
1719         display.chkbtn_folder_unread      = chkbtn_folder_unread;
1720         display.spinbtn_ng_abbrev_len     = spinbtn_ng_abbrev_len;
1721         display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1722
1723         display.chkbtn_swapfrom      = chkbtn_swapfrom;
1724         display.chkbtn_useaddrbook   = chkbtn_useaddrbook;
1725         display.chkbtn_threadsubj    = chkbtn_threadsubj;
1726         display.entry_datefmt        = entry_datefmt;
1727 }
1728
1729 static void prefs_message_create(void)
1730 {
1731         GtkWidget *vbox1;
1732         GtkWidget *vbox2;
1733         GtkWidget *vbox3;
1734         GtkWidget *hbox1;
1735         GtkWidget *chkbtn_mbalnum;
1736         GtkWidget *chkbtn_disphdrpane;
1737         GtkWidget *chkbtn_disphdr;
1738         GtkWidget *button_edit_disphdr;
1739         GtkWidget *hbox_linespc;
1740         GtkWidget *label_linespc;
1741         GtkObject *spinbtn_linespc_adj;
1742         GtkWidget *spinbtn_linespc;
1743         GtkWidget *chkbtn_headspc;
1744
1745         GtkWidget *frame_scr;
1746         GtkWidget *vbox_scr;
1747         GtkWidget *chkbtn_smoothscroll;
1748         GtkWidget *hbox_scr;
1749         GtkWidget *label_scr;
1750         GtkObject *spinbtn_scrollstep_adj;
1751         GtkWidget *spinbtn_scrollstep;
1752         GtkWidget *chkbtn_halfpage;
1753
1754         GtkWidget *chkbtn_attach_desc;
1755
1756         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1757         gtk_widget_show (vbox1);
1758         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1759         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1760
1761         vbox2 = gtk_vbox_new (FALSE, 0);
1762         gtk_widget_show (vbox2);
1763         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1764
1765         PACK_CHECK_BUTTON
1766                 (vbox2, chkbtn_mbalnum,
1767                  _("Display multi-byte alphanumeric as\n"
1768                    "ASCII character (Japanese only)"));
1769         gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1770                                GTK_JUSTIFY_LEFT);
1771
1772         PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1773                           _("Display header pane above message view"));
1774
1775         hbox1 = gtk_hbox_new (FALSE, 8);
1776         gtk_widget_show (hbox1);
1777         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1778
1779         PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1780                           _("Display short headers on message view"));
1781
1782         button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1783         gtk_widget_show (button_edit_disphdr);
1784         gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1785                           FALSE, TRUE, 0);
1786         gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1787                             GTK_SIGNAL_FUNC (prefs_display_header_open),
1788                             NULL);
1789
1790         SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1791
1792         PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1793
1794         hbox1 = gtk_hbox_new (FALSE, 32);
1795         gtk_widget_show (hbox1);
1796         gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1797
1798         hbox_linespc = gtk_hbox_new (FALSE, 8);
1799         gtk_widget_show (hbox1);
1800         gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1801
1802         label_linespc = gtk_label_new (_("Line space"));
1803         gtk_widget_show (label_linespc);
1804         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1805                             FALSE, FALSE, 0);
1806
1807         spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1808         spinbtn_linespc = gtk_spin_button_new
1809                 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1810         gtk_widget_show (spinbtn_linespc);
1811         gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1812                             FALSE, FALSE, 0);
1813         gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1814         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1815
1816         label_linespc = gtk_label_new (_("pixel(s)"));
1817         gtk_widget_show (label_linespc);
1818         gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1819                             FALSE, FALSE, 0);
1820
1821         PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Indent text"));
1822
1823         PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1824
1825         vbox_scr = gtk_vbox_new (FALSE, 0);
1826         gtk_widget_show (vbox_scr);
1827         gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1828         gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1829
1830         PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1831
1832         hbox1 = gtk_hbox_new (FALSE, 32);
1833         gtk_widget_show (hbox1);
1834         gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1835
1836         PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1837
1838         hbox_scr = gtk_hbox_new (FALSE, 8);
1839         gtk_widget_show (hbox_scr);
1840         gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1841
1842         label_scr = gtk_label_new (_("Step"));
1843         gtk_widget_show (label_scr);
1844         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1845
1846         spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1847         spinbtn_scrollstep = gtk_spin_button_new
1848                 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1849         gtk_widget_show (spinbtn_scrollstep);
1850         gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1851                             FALSE, FALSE, 0);
1852         gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1853         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1854                                      TRUE);
1855
1856         label_scr = gtk_label_new (_("pixel(s)"));
1857         gtk_widget_show (label_scr);
1858         gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1859
1860         SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1861
1862         vbox3 = gtk_vbox_new (FALSE, 0);
1863         gtk_widget_show (vbox3);
1864         gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1865
1866         PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1867                           _("Show attachment descriptions (rather than names)"));
1868
1869         message.chkbtn_mbalnum     = chkbtn_mbalnum;
1870         message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1871         message.chkbtn_disphdr     = chkbtn_disphdr;
1872         message.spinbtn_linespc    = spinbtn_linespc;
1873         message.chkbtn_headspc     = chkbtn_headspc;
1874
1875         message.chkbtn_smoothscroll    = chkbtn_smoothscroll;
1876         message.spinbtn_scrollstep     = spinbtn_scrollstep;
1877         message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1878         message.chkbtn_halfpage        = chkbtn_halfpage;
1879
1880         message.chkbtn_attach_desc  = chkbtn_attach_desc;
1881 }
1882
1883 static void prefs_interface_create(void)
1884 {
1885         GtkWidget *vbox1;
1886         GtkWidget *vbox2;
1887         GtkWidget *vbox3;
1888         /* GtkWidget *checkbtn_emacs; */
1889         GtkWidget *checkbtn_always_show_msg;
1890         GtkWidget *checkbtn_openunread;
1891         GtkWidget *checkbtn_mark_as_read_on_newwin;
1892         GtkWidget *checkbtn_openinbox;
1893         GtkWidget *checkbtn_immedexec;
1894         GtkTooltips *immedexec_tooltip;
1895         GtkWidget *hbox1;
1896         GtkWidget *label;
1897         GtkWidget *menu;
1898         GtkWidget *menuitem;
1899
1900         GtkWidget *button_keybind;
1901
1902         GtkWidget *hbox_nextunreadmsgdialog;
1903         GtkWidget *optmenu_nextunreadmsgdialog;
1904
1905         vbox1 = gtk_vbox_new (FALSE, VSPACING);
1906         gtk_widget_show (vbox1);
1907         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1908         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1909
1910         vbox2 = gtk_vbox_new (FALSE, 0);
1911         gtk_widget_show (vbox2);
1912         gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1913
1914         /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1915                            _("Emulate the behavior of mouse operation of\n"
1916                              "Emacs-based mailer"));
1917         gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1918                                GTK_JUSTIFY_LEFT);   */
1919
1920         PACK_CHECK_BUTTON
1921                 (vbox2, checkbtn_always_show_msg,
1922                  _("Always open messages in summary when selected"));
1923
1924         PACK_CHECK_BUTTON
1925                 (vbox2, checkbtn_openunread,
1926                  _("Open first unread message when entering a folder"));
1927
1928         PACK_CHECK_BUTTON
1929                 (vbox2, checkbtn_mark_as_read_on_newwin,
1930                  _("Only mark message as read when opened in new window"));
1931
1932         PACK_CHECK_BUTTON
1933                 (vbox2, checkbtn_openinbox,
1934                  _("Go to inbox after receiving new mail"));
1935
1936         vbox3 = gtk_vbox_new (FALSE, 0);
1937         gtk_widget_show (vbox3);
1938         gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1939
1940         immedexec_tooltip = gtk_tooltips_new();
1941
1942         PACK_CHECK_BUTTON
1943                 (vbox3, checkbtn_immedexec,
1944                  _("Execute immediately when moving or deleting messages"));
1945         gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1946                              _("Messages will be marked until execution"
1947                                " if this is turned off"),
1948                              NULL);
1949
1950         hbox1 = gtk_hbox_new (FALSE, 0);
1951         gtk_widget_show (hbox1);
1952         gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1953
1954         /* Next Unread Message Dialog */
1955         hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1956         gtk_widget_show (hbox1);
1957         gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1958
1959         label = gtk_label_new (_("Show no-unread-message dialog"));
1960         gtk_widget_show (label);
1961         gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1962
1963         optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1964         gtk_widget_show (optmenu_nextunreadmsgdialog);
1965         gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1966         
1967         menu = gtk_menu_new ();
1968         MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1969         MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"), 
1970                       NEXTUNREADMSGDIALOG_ASSUME_YES);
1971         MENUITEM_ADD (menu, menuitem, _("Assume 'No'"), 
1972                       NEXTUNREADMSGDIALOG_ASSUME_NO);
1973
1974         gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1975
1976         hbox1 = gtk_hbox_new (FALSE, 8);
1977         gtk_widget_show (hbox1);
1978         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1979
1980         button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1981         gtk_widget_show (button_keybind);
1982         gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1983         gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
1984                             GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
1985
1986         /* interface.checkbtn_emacs          = checkbtn_emacs; */
1987         interface.checkbtn_always_show_msg    = checkbtn_always_show_msg;
1988         interface.checkbtn_openunread         = checkbtn_openunread;
1989         interface.checkbtn_mark_as_read_on_newwin
1990                                               = checkbtn_mark_as_read_on_newwin;
1991         interface.checkbtn_openinbox          = checkbtn_openinbox;
1992         interface.checkbtn_immedexec          = checkbtn_immedexec;
1993         interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
1994 }
1995
1996 static void prefs_other_create(void)
1997 {
1998         GtkWidget *vbox1;
1999         GtkWidget *hbox1;
2000
2001         GtkWidget *frame_addr;
2002         GtkWidget *vbox_addr;
2003         GtkWidget *checkbtn_addaddrbyclick;
2004         
2005         GtkWidget *frame_cliplog;
2006         GtkWidget *vbox_cliplog;
2007         GtkWidget *hbox_cliplog;
2008         GtkWidget *checkbtn_cliplog;
2009         GtkWidget *loglength_label;
2010         GtkWidget *loglength_entry;
2011         GtkTooltips *loglength_tooltip;
2012
2013         GtkWidget *frame_exit;
2014         GtkWidget *vbox_exit;
2015         GtkWidget *checkbtn_confonexit;
2016         GtkWidget *checkbtn_cleanonexit;
2017         GtkWidget *checkbtn_askonclean;
2018         GtkWidget *checkbtn_warnqueued;
2019
2020         GtkWidget *label_iotimeout;
2021         GtkWidget *spinbtn_iotimeout;
2022         GtkObject *spinbtn_iotimeout_adj;
2023
2024 #if 0
2025 #ifdef USE_OPENSSL
2026         GtkWidget *frame_ssl;
2027         GtkWidget *vbox_ssl;
2028         GtkWidget *hbox_ssl;
2029         GtkWidget *checkbtn_ssl_ask_unknown_valid;
2030 #endif
2031 #endif
2032         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2033         gtk_widget_show (vbox1);
2034         gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2035         gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2036
2037         PACK_FRAME (vbox1, frame_addr, _("Address book"));
2038
2039         vbox_addr = gtk_vbox_new (FALSE, 0);
2040         gtk_widget_show (vbox_addr);
2041         gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2042         gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2043
2044         PACK_CHECK_BUTTON
2045                 (vbox_addr, checkbtn_addaddrbyclick,
2046                  _("Add address to destination when double-clicked"));
2047
2048         /* Clip Log */
2049         PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2050
2051         vbox_cliplog = gtk_vbox_new (FALSE, 0);
2052         gtk_widget_show (vbox_cliplog);
2053         gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2054         gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2055         PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2056                            _("Clip the log size"));
2057         hbox_cliplog = gtk_hbox_new (FALSE, 3);
2058         gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2059         gtk_widget_show (hbox_cliplog);
2060         
2061         loglength_label = gtk_label_new (_("Log window length"));
2062         gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2063                             FALSE, TRUE, 0);
2064         gtk_widget_show (GTK_WIDGET (loglength_label));
2065         
2066         loglength_tooltip = gtk_tooltips_new();
2067         
2068         loglength_entry = gtk_entry_new ();
2069         gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2070         gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2071                             FALSE, TRUE, 0);
2072         gtk_widget_show (GTK_WIDGET (loglength_entry));
2073         gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2074                              _("0 to stop logging in the log window"),
2075                              NULL);
2076         SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2077
2078 #if 0
2079 #ifdef USE_OPENSSL
2080         /* SSL */
2081         PACK_FRAME (vbox1, frame_ssl, _("Security"));
2082
2083         vbox_ssl = gtk_vbox_new (FALSE, 0);
2084         gtk_widget_show (vbox_ssl);
2085         gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2086         gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2087         PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid, 
2088                            _("Ask before accepting SSL certificates"));
2089         hbox_ssl = gtk_hbox_new (FALSE, 3);
2090         gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2091         gtk_widget_show (hbox_ssl);
2092 #endif
2093 #endif
2094         
2095         /* On Exit */
2096         PACK_FRAME (vbox1, frame_exit, _("On exit"));
2097
2098         vbox_exit = gtk_vbox_new (FALSE, 0);
2099         gtk_widget_show (vbox_exit);
2100         gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2101         gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2102
2103         PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2104                            _("Confirm on exit"));
2105
2106         hbox1 = gtk_hbox_new (FALSE, 32);
2107         gtk_widget_show (hbox1);
2108         gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2109
2110         PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2111                            _("Empty trash on exit"));
2112         PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2113                            _("Ask before emptying"));
2114         SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2115
2116         PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2117                            _("Warn if there are queued messages"));
2118
2119         hbox1 = gtk_hbox_new (FALSE, 8);
2120         gtk_widget_show (hbox1);
2121         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2122
2123         label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2124         gtk_widget_show (label_iotimeout);
2125         gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2126
2127         spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2128         spinbtn_iotimeout = gtk_spin_button_new
2129                 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2130         gtk_widget_show (spinbtn_iotimeout);
2131         gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2132                             FALSE, FALSE, 0);
2133         gtk_widget_set_usize (spinbtn_iotimeout, 64, -1);
2134         gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2135
2136         label_iotimeout = gtk_label_new (_("seconds"));
2137         gtk_widget_show (label_iotimeout);
2138         gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2139
2140         other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2141         
2142         other.checkbtn_cliplog     = checkbtn_cliplog;
2143         other.loglength_entry      = loglength_entry;
2144
2145         other.checkbtn_confonexit  = checkbtn_confonexit;
2146         other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2147         other.checkbtn_askonclean  = checkbtn_askonclean;
2148         other.checkbtn_warnqueued  = checkbtn_warnqueued;
2149
2150         other.spinbtn_iotimeout     = spinbtn_iotimeout;
2151         other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2152         
2153 #if 0
2154 #ifdef USE_OPENSSL
2155         other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2156 #endif
2157 #endif
2158 }
2159
2160 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2161 {
2162         GtkWidget *datefmt_sample = NULL;
2163         gchar *text;
2164
2165         g_return_if_fail(widget != NULL);
2166         g_return_if_fail(*widget != NULL);
2167         g_return_if_fail(display.entry_datefmt != NULL);
2168
2169         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2170                                     (GTK_OBJECT(*widget), "datefmt_sample"));
2171         g_return_if_fail(datefmt_sample != NULL);
2172
2173         text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2174         g_free(prefs_common.date_format);
2175         prefs_common.date_format = text;
2176         gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2177
2178         gtk_widget_destroy(*widget);
2179         *widget = NULL;
2180 }
2181
2182 static void date_format_cancel_btn_clicked(GtkButton *button,
2183                                            GtkWidget **widget)
2184 {
2185         g_return_if_fail(widget != NULL);
2186         g_return_if_fail(*widget != NULL);
2187
2188         gtk_widget_destroy(*widget);
2189         *widget = NULL;
2190 }
2191
2192 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2193                                     GtkWidget **widget)
2194 {
2195         if (event && event->keyval == GDK_Escape)
2196                 date_format_cancel_btn_clicked(NULL, widget);
2197 }
2198
2199 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2200                                       GdkEventAny *event, GtkWidget **widget)
2201 {
2202         g_return_val_if_fail(widget != NULL, FALSE);
2203         g_return_val_if_fail(*widget != NULL, FALSE);
2204
2205         *widget = NULL;
2206         return FALSE;
2207 }
2208
2209 static void date_format_entry_on_change(GtkEditable *editable,
2210                                         GtkLabel *example)
2211 {
2212         time_t cur_time;
2213         struct tm *cal_time;
2214         gchar buffer[100];
2215         gchar *text;
2216
2217         cur_time = time(NULL);
2218         cal_time = localtime(&cur_time);
2219         buffer[0] = 0;
2220         text = gtk_editable_get_chars(editable, 0, -1);
2221         if (text)
2222                 strftime(buffer, sizeof buffer, text, cal_time); 
2223         g_free(text);
2224         gtk_label_set_text(example, buffer);
2225 }
2226
2227 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2228                                    gint column, GdkEventButton *event,
2229                                    GtkWidget *date_format)
2230 {
2231         gint cur_pos;
2232         gchar *format;
2233         gchar *old_format;
2234         gchar *new_format;
2235         GtkWidget *datefmt_sample;
2236
2237         /* only on double click */
2238         if (!event || event->type != GDK_2BUTTON_PRESS) return;
2239
2240
2241         datefmt_sample = GTK_WIDGET(gtk_object_get_data
2242                                     (GTK_OBJECT(date_format), "datefmt_sample"));
2243
2244         g_return_if_fail(date_format_list != NULL);
2245         g_return_if_fail(date_format != NULL);
2246         g_return_if_fail(datefmt_sample != NULL);
2247
2248         /* get format from clist */
2249         gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2250
2251         cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2252         old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2253
2254         /* insert the format into the text entry */
2255         new_format = g_malloc(strlen(old_format) + 3);
2256
2257         strncpy(new_format, old_format, cur_pos);
2258         new_format[cur_pos] = '\0';
2259         strcat(new_format, format);
2260         strcat(new_format, &old_format[cur_pos]);
2261
2262         gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2263         gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2264
2265         g_free(new_format);
2266 }
2267
2268 static GtkWidget *date_format_create(GtkButton *button, void *data)
2269 {
2270         static GtkWidget *datefmt_win = NULL;
2271         GtkWidget *vbox1;
2272         GtkWidget *scrolledwindow1;
2273         GtkWidget *datefmt_clist;
2274         GtkWidget *table;
2275         GtkWidget *label1;
2276         GtkWidget *label2;
2277         GtkWidget *label3;
2278         GtkWidget *confirm_area;
2279         GtkWidget *ok_btn;
2280         GtkWidget *cancel_btn;
2281         GtkWidget *datefmt_entry;
2282
2283         struct {
2284                 gchar *fmt;
2285                 gchar *txt;
2286         } time_format[] = {
2287                 { "%a", NULL },
2288                 { "%A", NULL },
2289                 { "%b", NULL },
2290                 { "%B", NULL },
2291                 { "%c", NULL },
2292                 { "%C", NULL },
2293                 { "%d", NULL },
2294                 { "%H", NULL },
2295                 { "%I", NULL },
2296                 { "%j", NULL },
2297                 { "%m", NULL },
2298                 { "%M", NULL },
2299                 { "%p", NULL },
2300                 { "%S", NULL },
2301                 { "%w", NULL },
2302                 { "%x", NULL },
2303                 { "%y", NULL },
2304                 { "%Y", NULL },
2305                 { "%Z", NULL }
2306         };
2307
2308         gchar *titles[2];
2309         gint i;
2310         const gint TIME_FORMAT_ELEMS =
2311                 sizeof time_format / sizeof time_format[0];
2312
2313         time_format[0].txt  = _("the full abbreviated weekday name");
2314         time_format[1].txt  = _("the full weekday name");
2315         time_format[2].txt  = _("the abbreviated month name");
2316         time_format[3].txt  = _("the full month name");
2317         time_format[4].txt  = _("the preferred date and time for the current locale");
2318         time_format[5].txt  = _("the century number (year/100)");
2319         time_format[6].txt  = _("the day of the month as a decimal number");
2320         time_format[7].txt  = _("the hour as a decimal number using a 24-hour clock");
2321         time_format[8].txt  = _("the hour as a decimal number using a 12-hour clock");
2322         time_format[9].txt  = _("the day of the year as a decimal number");
2323         time_format[10].txt = _("the month as a decimal number");
2324         time_format[11].txt = _("the minute as a decimal number");
2325         time_format[12].txt = _("either AM or PM");
2326         time_format[13].txt = _("the second as a decimal number");
2327         time_format[14].txt = _("the day of the week as a decimal number");
2328         time_format[15].txt = _("the preferred date for the current locale");
2329         time_format[16].txt = _("the last two digits of a year");
2330         time_format[17].txt = _("the year as a decimal number");
2331         time_format[18].txt = _("the time zone or name or abbreviation");
2332
2333         if (datefmt_win) return datefmt_win;
2334
2335         datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2336         gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2337         gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2338         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2339         gtk_widget_set_usize(datefmt_win, 440, 280);
2340
2341         vbox1 = gtk_vbox_new(FALSE, 10);
2342         gtk_widget_show(vbox1);
2343         gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2344
2345         scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2346         gtk_scrolled_window_set_policy
2347                 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2348                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2349         gtk_widget_show(scrolledwindow1);
2350         gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2351
2352         titles[0] = _("Specifier");
2353         titles[1] = _("Description");
2354         datefmt_clist = gtk_clist_new_with_titles(2, titles);
2355         gtk_widget_show(datefmt_clist);
2356         gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2357         /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2358         gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2359                                      GTK_SELECTION_BROWSE);
2360
2361         for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2362                 gchar *text[2];
2363                 /* phoney casting necessary because of gtk... */
2364                 text[0] = (gchar *)time_format[i].fmt;
2365                 text[1] = (gchar *)time_format[i].txt;
2366                 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2367         }
2368
2369         table = gtk_table_new(2, 2, FALSE);
2370         gtk_widget_show(table);
2371         gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2372         gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2373         gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2374
2375         label1 = gtk_label_new(_("Date format"));
2376         gtk_widget_show(label1);
2377         gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2378                          GTK_FILL, 0, 0, 0);
2379         gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2380         gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2381
2382         datefmt_entry = gtk_entry_new_with_max_length(256);
2383         gtk_widget_show(datefmt_entry);
2384         gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2385                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2386
2387         /* we need the "sample" entry box; add it as data so callbacks can
2388          * get the entry box */
2389         gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2390                             datefmt_entry);
2391
2392         label2 = gtk_label_new(_("Example"));
2393         gtk_widget_show(label2);
2394         gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2395                          GTK_FILL, 0, 0, 0);
2396         gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2397         gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2398
2399         label3 = gtk_label_new("");
2400         gtk_widget_show(label3);
2401         gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2402                          (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2403         gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2404         gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2405
2406         gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2407                                 &cancel_btn, _("Cancel"), NULL, NULL);
2408         gtk_widget_grab_default(ok_btn);
2409         gtk_widget_show(confirm_area);
2410
2411         gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2412
2413         /* set the current format */
2414         gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2415         date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2416                                     GTK_LABEL(label3));
2417
2418         gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2419                            GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2420                            &datefmt_win);
2421         gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2422                            GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2423                            &datefmt_win);
2424         gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2425                            GTK_SIGNAL_FUNC(date_format_key_pressed),
2426                            &datefmt_win);
2427         gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2428                            GTK_SIGNAL_FUNC(date_format_on_delete),
2429                            &datefmt_win);
2430         gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2431                            GTK_SIGNAL_FUNC(date_format_entry_on_change),
2432                            label3);
2433
2434         gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2435                            GTK_SIGNAL_FUNC(date_format_select_row),
2436                            datefmt_win);
2437
2438         gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2439         gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2440
2441         gtk_widget_show(datefmt_win);
2442         manage_window_set_transient(GTK_WINDOW(datefmt_win));
2443
2444         gtk_widget_grab_focus(ok_btn);
2445
2446         return datefmt_win;
2447 }
2448
2449 static void prefs_keybind_select(void)
2450 {
2451         GtkWidget *window;
2452         GtkWidget *vbox1;
2453         GtkWidget *hbox1;
2454         GtkWidget *label;
2455         GtkWidget *combo;
2456         GtkWidget *confirm_area;
2457         GtkWidget *ok_btn;
2458         GtkWidget *cancel_btn;
2459
2460         window = gtk_window_new (GTK_WINDOW_DIALOG);
2461         gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2462         gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2463         gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2464         gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2465         gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
2466         manage_window_set_transient (GTK_WINDOW (window));
2467
2468         vbox1 = gtk_vbox_new (FALSE, VSPACING);
2469         gtk_container_add (GTK_CONTAINER (window), vbox1);
2470         gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2471
2472         hbox1 = gtk_hbox_new (FALSE, 8);
2473         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2474
2475         label = gtk_label_new
2476                 (_("Select preset:"));
2477         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2478         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2479
2480         hbox1 = gtk_hbox_new (FALSE, 8);
2481         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2482
2483         combo = gtk_combo_new ();
2484         gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2485         gtkut_combo_set_items (GTK_COMBO (combo),
2486                                _("Default"),
2487                                "Mew / Wanderlust",
2488                                "Mutt",
2489                                _("Old Sylpheed"),
2490                                NULL);
2491         gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE);
2492
2493         hbox1 = gtk_hbox_new (FALSE, 8);
2494         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2495
2496         label = gtk_label_new
2497                 (_("You can also modify each menu shortcut by pressing\n"
2498                    "any key(s) when placing the mouse pointer on the item."));
2499         gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2500         gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2501
2502         hbox1 = gtk_hbox_new (FALSE, 8);
2503         gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2504
2505         gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
2506                                  &cancel_btn, _("Cancel"), NULL, NULL);
2507         gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2508         gtk_widget_grab_default (ok_btn);
2509
2510         MANAGE_WINDOW_SIGNALS_CONNECT(window);
2511         gtk_signal_connect (GTK_OBJECT (window), "delete_event",
2512                             GTK_SIGNAL_FUNC (prefs_keybind_deleted), NULL);
2513         gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
2514                             GTK_SIGNAL_FUNC (prefs_keybind_key_pressed), NULL);
2515         gtk_signal_connect (GTK_OBJECT (ok_btn), "clicked",
2516                             GTK_SIGNAL_FUNC (prefs_keybind_apply_clicked),
2517                             NULL);
2518         gtk_signal_connect (GTK_OBJECT (cancel_btn), "clicked",
2519                             GTK_SIGNAL_FUNC (prefs_keybind_cancel),
2520                             NULL);
2521
2522         gtk_widget_show_all(window);
2523
2524         keybind.window = window;
2525         keybind.combo = combo;
2526 }
2527
2528 static void prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2529                                       gpointer data)
2530 {
2531         if (event && event->keyval == GDK_Escape)
2532                 prefs_keybind_cancel();
2533 }
2534
2535 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2536                                   gpointer data)
2537 {
2538         prefs_keybind_cancel();
2539         return TRUE;
2540 }
2541
2542 static void prefs_keybind_cancel(void)
2543 {
2544         gtk_widget_destroy(keybind.window);
2545         keybind.window = NULL;
2546         keybind.combo = NULL;
2547 }
2548
2549 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2550 {
2551         GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2552         gchar *text;
2553         gchar *rc_str;
2554
2555         static gchar *default_menurc =
2556                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2557                 "(menu-path \"<Main>/File/Save as...\" \"<control>S\")\n"
2558                 "(menu-path \"<Main>/File/Print...\" \"\")\n"
2559                 "(menu-path \"<Main>/File/Exit\" \"<control>Q\")\n"
2560
2561                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2562                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2563                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2564                 "(menu-path \"<Main>/Edit/Search folder...\" \"<shift><control>F\")\n"
2565
2566                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"V\")\n"
2567                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2568                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2569                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2570                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2571                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2572                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
2573                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2574                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2575                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2576                 "(menu-path \"<Main>/View/Update summary\" \"<control><alt>U\")\n"
2577
2578                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2579                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2580                 "(menu-path \"<Main>/Message/Compose an email message\" \"<control>M\")\n"
2581                 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
2582                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><control>R\")\n"
2583                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2584                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2585                 "(menu-path \"<Main>/Message/Forward\" \"<control><alt>F\")\n"
2586                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n" */
2587                 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
2588                 "(menu-path \"<Main>/Message/Copy...\" \"<shift><control>O\")\n"
2589                 "(menu-path \"<Main>/Message/Delete\" \"<control>D\")\n"
2590                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2591                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2592                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2593                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2594
2595                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2596                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2597                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2598
2599                 "(menu-path \"<Compose>/Message/Close\" \"<control>W\")\n"
2600                 "(menu-path \"<Compose>/Edit/Select all\" \"<control>A\")\n"
2601                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"\")\n"
2602                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"\")\n"
2603                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"\")\n"
2604                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"\")\n"
2605                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"\")";
2606
2607         static gchar *mew_wl_menurc =
2608                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"<shift>D\")\n"
2609                 "(menu-path \"<Main>/File/Save as...\" \"Y\")\n"
2610                 "(menu-path \"<Main>/File/Print...\" \"<shift>numbersign\")\n"
2611                 "(menu-path \"<Main>/File/Exit\" \"<shift>Q\")\n"
2612
2613                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2614                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2615                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2616                 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
2617
2618                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"\")\n"
2619                 "(menu-path \"<Main>/View/Thread view\" \"<shift>T\")\n"
2620                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2621                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2622                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2623                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2624                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
2625                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2626                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2627                 "(menu-path \"<Main>/View/Show all headers\" \"<shift>H\")\n"
2628                 "(menu-path \"<Main>/View/Update summary\" \"<shift>S\")\n"
2629
2630                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2631                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2632                 "(menu-path \"<Main>/Message/Compose an email message\" \"W\")\n"
2633                 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
2634                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift>A\")\n"
2635                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2636                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2637                 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
2638                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift>F\")\n" */
2639                 "(menu-path \"<Main>/Message/Move...\" \"O\")\n"
2640                 "(menu-path \"<Main>/Message/Copy...\" \"<shift>O\")\n"
2641                 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
2642                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2643                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2644                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2645                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"<shift>R\")\n"
2646
2647                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2648                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2649                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2650
2651                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2652                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2653                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2654                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2655                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2656                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2657                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2658
2659         static gchar *mutt_menurc =
2660                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2661                 "(menu-path \"<Main>/File/Save as...\" \"S\")\n"
2662                 "(menu-path \"<Main>/File/Print...\" \"P\")\n"
2663                 "(menu-path \"<Main>/File/Exit\" \"Q\")\n"
2664
2665                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2666                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2667                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2668                 "(menu-path \"<Main>/Edit/Search messages...\" \"slash\")\n"
2669
2670                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"V\")\n"
2671                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2672                 "(menu-path \"<Main>/View/Go to/Prev message\" \"\")\n"
2673                 "(menu-path \"<Main>/View/Go to/Next message\" \"\")\n"
2674                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"\")\n"
2675                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"\")\n"
2676                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"C\")\n"
2677                 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
2678                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2679                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2680                 "(menu-path \"<Main>/View/Update summary\" \"<control><alt>U\")\n"
2681
2682                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<control>I\")\n"
2683                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><control>I\")\n"
2684                 "(menu-path \"<Main>/Message/Compose an email message\" \"M\")\n"
2685                 "(menu-path \"<Main>/Message/Reply\" \"R\")\n"
2686                 "(menu-path \"<Main>/Message/Reply to/all\" \"G\")\n"
2687                 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
2688                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2689                 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
2690                 "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n"
2691                 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
2692                 "(menu-path \"<Main>/Message/Copy...\" \"<shift>C\")\n"
2693                 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
2694                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>F\")\n"
2695                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2696                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>N\")\n"
2697                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2698
2699                 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
2700                 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
2701                 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
2702
2703                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2704                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2705                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2706                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2707                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2708                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2709                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2710
2711         static gchar *old_sylpheed_menurc =
2712                 "(menu-path \"<Main>/File/Empty all Trash folders\" \"\")\n"
2713                 "(menu-path \"<Main>/File/Save as...\" \"\")\n"
2714                 "(menu-path \"<Main>/File/Print...\" \"<alt>P\")\n"
2715                 "(menu-path \"<Main>/File/Exit\" \"<alt>Q\")\n"
2716
2717                 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
2718                 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
2719                 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
2720                 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
2721
2722                 "(menu-path \"<Main>/View/Show or hide/Message view\" \"\")\n"
2723                 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
2724                 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
2725                 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
2726                 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
2727                 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
2728                 "(menu-path \"<Main>/View/Go to/Other folder...\" \"<alt>G\")\n"
2729                 "(menu-path \"<Main>/View/Open in new window\" \"<shift><control>N\")\n"
2730                 "(menu-path \"<Main>/View/Message source\" \"<control>U\")\n"
2731                 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
2732                 "(menu-path \"<Main>/View/Update summary\" \"<alt>U\")\n"
2733
2734                 "(menu-path \"<Main>/Message/Receive/Get from current account\" \"<alt>I\")\n"
2735                 "(menu-path \"<Main>/Message/Receive/Get from all accounts\" \"<shift><alt>I\")\n"
2736                 "(menu-path \"<Main>/Message/Compose an email message\" \"<alt>N\")\n"
2737                 "(menu-path \"<Main>/Message/Reply\" \"<alt>R\")\n"
2738                 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><alt>R\")\n"
2739                 "(menu-path \"<Main>/Message/Reply to/sender\" \"<control><alt>R\")\n"
2740                 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
2741                 "(menu-path \"<Main>/Message/Forward\" \"<shift><alt>F\")\n"
2742                 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift><control>F\")\n" */
2743                 "(menu-path \"<Main>/Message/Move...\" \"<alt>O\")\n"
2744                 "(menu-path \"<Main>/Message/Copy...\" \"\")\n"
2745                 "(menu-path \"<Main>/Message/Delete\" \"<alt>D\")\n"
2746                 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
2747                 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
2748                 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
2749                 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
2750
2751                 "(menu-path \"<Main>/Tools/Address book\" \"<alt>A\")\n"
2752                 "(menu-path \"<Main>/Tools/Execute\" \"<alt>X\")\n"
2753                 "(menu-path \"<Main>/Tools/Log window\" \"<alt>L\")\n"
2754
2755                 "(menu-path \"<Compose>/Message/Close\" \"<alt>W\")\n"
2756                 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
2757                 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
2758                 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
2759                 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
2760                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
2761                 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
2762
2763         text = gtk_entry_get_text(entry);
2764
2765         if (!strcmp(text, _("Default")))
2766                 rc_str = default_menurc;
2767         else if (!strcmp(text, "Mew / Wanderlust"))
2768                 rc_str = mew_wl_menurc;
2769         else if (!strcmp(text, "Mutt"))
2770                 rc_str = mutt_menurc;
2771         else if (!strcmp(text, _("Old Sylpheed")))
2772                 rc_str = old_sylpheed_menurc;
2773         else
2774                 return;
2775
2776         menu_factory_clear_rc(rc_str);
2777         gtk_item_factory_parse_rc_string(rc_str);
2778
2779         gtk_widget_destroy(keybind.window);
2780         keybind.window = NULL;
2781         keybind.combo = NULL;
2782 }
2783
2784 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2785 {
2786         GtkWidget *menu;
2787         GtkWidget *menuitem;
2788         gchar *charset;
2789
2790         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2791         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2792         charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2793         g_free(*((gchar **)pparam->data));
2794         *((gchar **)pparam->data) = g_strdup(charset);
2795 }
2796
2797 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2798 {
2799         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2800         gint index;
2801
2802         g_return_if_fail(optmenu != NULL);
2803         g_return_if_fail(*((gchar **)pparam->data) != NULL);
2804
2805         index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2806                                             (GCompareFunc)strcmp);
2807         if (index >= 0)
2808                 gtk_option_menu_set_history(optmenu, index);
2809         else {
2810                 gtk_option_menu_set_history(optmenu, 0);
2811                 prefs_common_charset_set_data_from_optmenu(pparam);
2812         }
2813 }
2814
2815 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2816 {
2817         GtkWidget *menu;
2818         GtkWidget *menuitem;
2819
2820         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2821         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2822         *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2823                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2824 }
2825
2826 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2827 {
2828         TransferEncodingMethod method =
2829                 *((TransferEncodingMethod *)pparam->data);
2830         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2831         gint index;
2832
2833         g_return_if_fail(optmenu != NULL);
2834
2835         index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2836                                             NULL);
2837         if (index >= 0)
2838                 gtk_option_menu_set_history(optmenu, index);
2839         else {
2840                 gtk_option_menu_set_history(optmenu, 0);
2841                 prefs_common_encoding_set_data_from_optmenu(pparam);
2842         }
2843 }
2844
2845 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2846 {
2847         GtkWidget *menu;
2848         GtkWidget *menuitem;
2849
2850         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2851         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2852         *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2853                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2854 }
2855
2856 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2857 {
2858         RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2859         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2860         GtkWidget *menu;
2861         GtkWidget *menuitem;
2862         gint index;
2863
2864         index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2865                                             NULL);
2866         if (index >= 0)
2867                 gtk_option_menu_set_history(optmenu, index);
2868         else {
2869                 gtk_option_menu_set_history(optmenu, 0);
2870                 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2871         }
2872
2873         menu = gtk_option_menu_get_menu(optmenu);
2874         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2875         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2876 }
2877
2878 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2879 {
2880         GtkWidget *menu;
2881         GtkWidget *menuitem;
2882
2883         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2884         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2885         *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2886                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2887 }
2888
2889 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2890 {
2891         SendDialogMode mode = *((SendDialogMode *)pparam->data);
2892         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2893         GtkWidget *menu;
2894         GtkWidget *menuitem;
2895
2896         switch (mode) {
2897         case SEND_DIALOG_ALWAYS:
2898                 gtk_option_menu_set_history(optmenu, 0);
2899                 break;
2900         case SEND_DIALOG_NEVER:
2901                 gtk_option_menu_set_history(optmenu, 1);
2902                 break;
2903         default:
2904                 break;
2905         }
2906
2907         menu = gtk_option_menu_get_menu(optmenu);
2908         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2909         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2910 }
2911
2912 static void prefs_common_apply(void)
2913 {
2914         MainWindow *mainwindow;
2915
2916         prefs_set_data_from_dialog(param);
2917         sock_set_io_timeout(prefs_common.io_timeout_secs);
2918         main_window_reflect_prefs_all_real(FALSE);
2919         prefs_common_write_config();
2920
2921         mainwindow = mainwindow_get_mainwindow();
2922         log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
2923                                 prefs_common.loglength);
2924         
2925         inc_autocheck_timer_remove();
2926         inc_autocheck_timer_set();
2927 }
2928
2929 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
2930 {
2931         GtkWidget *menu;
2932         GtkWidget *menuitem;
2933
2934         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2935         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2936         *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
2937                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2938 }
2939
2940 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
2941 {
2942         NextUnreadMsgDialogShow dialog_show;
2943         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2944         GtkWidget *menu;
2945         GtkWidget *menuitem;
2946
2947         dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
2948
2949         switch (dialog_show) {
2950         case NEXTUNREADMSGDIALOG_ALWAYS:
2951                 gtk_option_menu_set_history(optmenu, 0);
2952                 break;
2953         case NEXTUNREADMSGDIALOG_ASSUME_YES:
2954                 gtk_option_menu_set_history(optmenu, 1);
2955                 break;
2956         case NEXTUNREADMSGDIALOG_ASSUME_NO:
2957                 gtk_option_menu_set_history(optmenu, 2);
2958                 break;
2959         }
2960
2961         menu = gtk_option_menu_get_menu(optmenu);
2962         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2963         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2964 }
2965
2966 /*
2967 static void prefs_common_cancel(void)
2968 {
2969         gtk_widget_hide(dialog.window);
2970         inc_unlock();
2971 }
2972 */
2973
2974 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
2975 {
2976         GtkWidget *menu;
2977         GtkWidget *menuitem;
2978
2979         menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2980         menuitem = gtk_menu_get_active(GTK_MENU(menu));
2981         *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
2982                 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
2983 }  */
2984
2985 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
2986 {
2987         RecvDialogShow dialog_show;
2988         GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2989         GtkWidget *menu;
2990         GtkWidget *menuitem;
2991
2992         dialog_show = *((RecvDialogShow *)pparam->data);
2993
2994         switch (dialog_show) {
2995         case RECVDIALOG_ALWAYS:
2996                 gtk_option_menu_set_history(optmenu, 0);
2997                 break;
2998         case RECVDIALOG_WINDOW_ACTIVE:
2999                 gtk_option_menu_set_history(optmenu, 1);
3000                 break;
3001         case RECVDIALOG_NEVER:
3002                 gtk_option_menu_set_history(optmenu, 2);
3003                 break;
3004         default:
3005         }
3006
3007         menu = gtk_option_menu_get_menu(optmenu);
3008         menuitem = gtk_menu_get_active(GTK_MENU(menu));
3009         gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3010 }     */