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