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