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