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