2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
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.
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.
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.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "mainwindow.h"
41 #include "summaryview.h"
42 #include "messageview.h"
43 #include "manage_window.h"
48 #include "alertpanel.h"
51 PrefsCommon prefs_common;
53 static PrefsDialog dialog;
55 static struct Receive {
56 GtkWidget *checkbtn_incext;
57 GtkWidget *entry_incext;
58 GtkWidget *button_incext;
60 GtkWidget *checkbtn_local;
61 GtkWidget *checkbtn_filter_on_inc;
62 GtkWidget *entry_spool;
64 GtkWidget *checkbtn_autochk;
65 GtkWidget *spinbtn_autochk;
66 GtkObject *spinbtn_autochk_adj;
68 GtkWidget *checkbtn_chkonstartup;
70 GtkWidget *spinbtn_maxarticle;
71 GtkObject *spinbtn_maxarticle_adj;
75 GtkWidget *checkbtn_sendext;
76 GtkWidget *entry_sendext;
77 GtkWidget *button_sendext;
79 GtkWidget *checkbtn_savemsg;
80 GtkWidget *checkbtn_queuemsg;
82 GtkWidget *optmenu_charset;
85 static struct Compose {
86 GtkWidget *checkbtn_quote;
87 GtkWidget *entry_quotemark;
88 GtkWidget *text_quotefmt;
89 GtkWidget *checkbtn_autosig;
90 GtkWidget *entry_sigsep;
92 GtkWidget *spinbtn_linewrap;
93 GtkObject *spinbtn_linewrap_adj;
94 GtkWidget *checkbtn_wrapquote;
95 GtkWidget *checkbtn_wrapatsend;
98 static struct Display {
99 GtkWidget *entry_textfont;
100 GtkWidget *button_textfont;
102 GtkWidget *chkbtn_folder_unread;
104 GtkWidget *chkbtn_transhdr;
105 GtkWidget *chkbtn_swapfrom;
106 GtkWidget *chkbtn_hscrollbar;
109 static struct Message {
110 GtkWidget *chkbtn_enablecol;
111 GtkWidget *button_edit_col;
112 GtkWidget *chkbtn_mbalnum;
113 GtkWidget *chkbtn_disphdrpane;
114 GtkWidget *chkbtn_disphdr;
115 GtkWidget *spinbtn_linespc;
116 GtkObject *spinbtn_linespc_adj;
117 GtkWidget *chkbtn_headspc;
119 GtkWidget *chkbtn_smoothscroll;
120 GtkWidget *spinbtn_scrollstep;
121 GtkObject *spinbtn_scrollstep_adj;
122 GtkWidget *chkbtn_halfpage;
126 static struct Privacy {
127 GtkWidget *checkbtn_default_encrypt;
128 GtkWidget *checkbtn_default_sign;
129 GtkWidget *checkbtn_auto_check_signatures;
130 GtkWidget *checkbtn_passphrase_grab;
131 GtkWidget *optmenu_default_signkey;
135 static struct Interface {
136 GtkWidget *checkbtn_emacs;
137 GtkWidget *checkbtn_openunread;
138 GtkWidget *checkbtn_openinbox;
139 GtkWidget *checkbtn_immedexec;
140 GtkWidget *checkbtn_confonexit;
141 GtkWidget *checkbtn_cleanonexit;
142 GtkWidget *checkbtn_askonclean;
145 static struct Other {
146 GtkWidget *uri_combo;
147 GtkWidget *uri_entry;
148 GtkWidget *printcmd_entry;
149 GtkWidget *exteditor_combo;
150 GtkWidget *exteditor_entry;
153 static struct MessageColorButtons {
154 GtkWidget *quote_level1_btn;
155 GtkWidget *quote_level2_btn;
156 GtkWidget *quote_level3_btn;
160 static GtkWidget *quote_desc_win;
161 static GtkWidget *font_sel_win;
162 static GtkWidget *quote_color_win;
163 static GtkWidget *color_dialog;
165 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
166 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
168 static void prefs_common_default_signkey_set_data_from_optmenu
170 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
174 parameter name, default value, pointer to the prefs variable, data type,
175 pointer to the widget pointer,
176 pointer to the function for data setting,
177 pointer to the function for widget setting
180 static PrefParam param[] = {
182 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
183 &receive.checkbtn_incext,
184 prefs_set_data_from_toggle, prefs_set_toggle},
185 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
186 &receive.entry_incext,
187 prefs_set_data_from_entry, prefs_set_entry},
189 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
190 &receive.checkbtn_local,
191 prefs_set_data_from_toggle, prefs_set_toggle},
192 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
193 &receive.checkbtn_filter_on_inc,
194 prefs_set_data_from_toggle, prefs_set_toggle},
195 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
196 &receive.entry_spool,
197 prefs_set_data_from_entry, prefs_set_entry},
199 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
200 &receive.checkbtn_autochk,
201 prefs_set_data_from_toggle, prefs_set_toggle},
202 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
203 &receive.spinbtn_autochk,
204 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
205 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
206 &receive.checkbtn_chkonstartup,
207 prefs_set_data_from_toggle, prefs_set_toggle},
209 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
210 &receive.spinbtn_maxarticle,
211 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
214 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
215 &send.checkbtn_sendext,
216 prefs_set_data_from_toggle, prefs_set_toggle},
217 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
218 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
219 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
220 &send.checkbtn_savemsg,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
223 &send.checkbtn_queuemsg,
224 prefs_set_data_from_toggle, prefs_set_toggle},
226 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
227 &send.optmenu_charset,
228 prefs_common_charset_set_data_from_optmenu,
229 prefs_common_charset_set_optmenu},
232 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
233 &compose.checkbtn_quote,
234 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
236 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
237 {"quote_format", "On %d\\n%f wrote:\\n\\n",
238 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
239 prefs_set_data_from_text, prefs_set_text},
241 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
242 &compose.checkbtn_autosig,
243 prefs_set_data_from_toggle, prefs_set_toggle},
244 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
245 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
247 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
248 &compose.spinbtn_linewrap,
249 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
250 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
251 &compose.checkbtn_wrapquote,
252 prefs_set_data_from_toggle, prefs_set_toggle},
253 {"linewrap_before_sending", "FALSE",
254 &prefs_common.linewrap_at_send, P_BOOL,
255 &compose.checkbtn_wrapatsend,
256 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
262 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
264 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
265 &prefs_common.textfont, P_STRING,
266 &display.entry_textfont,
267 prefs_set_data_from_entry, prefs_set_entry},
269 {"display_folder_unread_num", "TRUE",
270 &prefs_common.display_folder_unread, P_BOOL,
271 &display.chkbtn_folder_unread,
272 prefs_set_data_from_toggle, prefs_set_toggle},
274 /* Display: Summary View */
275 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
276 &display.chkbtn_transhdr,
277 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
279 &display.chkbtn_swapfrom,
280 prefs_set_data_from_toggle, prefs_set_toggle},
281 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
282 &display.chkbtn_hscrollbar,
283 prefs_set_data_from_toggle, prefs_set_toggle},
285 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
287 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
289 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
292 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
294 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
296 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
298 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
300 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
302 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
304 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
306 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
310 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
312 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
314 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
316 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
318 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
320 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
322 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
324 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
326 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
328 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
330 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
332 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
334 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
336 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
338 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
340 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
341 P_INT, NULL, NULL, NULL},
342 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
344 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
346 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
348 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
350 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
352 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
354 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
356 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
358 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
360 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
362 {"compose_width", "600", &prefs_common.compose_width, P_INT,
364 {"compose_height", "560", &prefs_common.compose_height, P_INT,
368 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
369 &message.chkbtn_enablecol,
370 prefs_set_data_from_toggle, prefs_set_toggle},
372 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
374 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
376 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
378 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
380 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
382 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
383 P_BOOL, NULL, NULL, NULL},
385 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
386 &message.chkbtn_mbalnum,
387 prefs_set_data_from_toggle, prefs_set_toggle},
388 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
389 P_BOOL, &message.chkbtn_disphdrpane,
390 prefs_set_data_from_toggle, prefs_set_toggle},
391 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
392 &message.chkbtn_disphdr,
393 prefs_set_data_from_toggle, prefs_set_toggle},
394 {"line_space", "2", &prefs_common.line_space, P_INT,
395 &message.spinbtn_linespc,
396 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
397 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
398 &message.chkbtn_headspc,
399 prefs_set_data_from_toggle, prefs_set_toggle},
401 {"enable_smooth_scroll", "FALSE",
402 &prefs_common.enable_smooth_scroll, P_BOOL,
403 &message.chkbtn_smoothscroll,
404 prefs_set_data_from_toggle, prefs_set_toggle},
405 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
406 &message.spinbtn_scrollstep,
407 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
408 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
409 &message.chkbtn_halfpage,
410 prefs_set_data_from_toggle, prefs_set_toggle},
413 {"mime_image_viewer", "display '%s'",
414 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
415 {"mime_audio_player", "play '%s'",
416 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
420 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
421 &privacy.checkbtn_default_encrypt,
422 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
424 &privacy.checkbtn_default_sign,
425 prefs_set_data_from_toggle, prefs_set_toggle},
426 {"auto_check_signatures", "TRUE",
427 &prefs_common.auto_check_signatures, P_BOOL,
428 &privacy.checkbtn_auto_check_signatures,
429 prefs_set_data_from_toggle, prefs_set_toggle},
430 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
431 &privacy.checkbtn_passphrase_grab,
432 prefs_set_data_from_toggle, prefs_set_toggle},
433 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
434 &privacy.optmenu_default_signkey,
435 prefs_common_default_signkey_set_data_from_optmenu,
436 prefs_common_default_signkey_set_optmenu},
437 #endif /* USE_GPGME */
440 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
442 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
445 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
446 &interface.checkbtn_emacs,
447 prefs_set_data_from_toggle, prefs_set_toggle},
448 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
449 P_BOOL, &interface.checkbtn_openunread,
450 prefs_set_data_from_toggle, prefs_set_toggle},
451 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
452 P_BOOL, &interface.checkbtn_openinbox,
453 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
455 &interface.checkbtn_immedexec,
456 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
459 &interface.checkbtn_confonexit,
460 prefs_set_data_from_toggle, prefs_set_toggle},
461 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
462 &interface.checkbtn_cleanonexit,
463 prefs_set_data_from_toggle, prefs_set_toggle},
464 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
465 &interface.checkbtn_askonclean,
466 prefs_set_data_from_toggle, prefs_set_toggle},
469 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
470 &prefs_common.uri_cmd, P_STRING,
471 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
472 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
473 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
474 {"ext_editor_command", "gedit %s",
475 &prefs_common.ext_editor_cmd, P_STRING,
476 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
478 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
482 #define VSPACING_NARROW 4
483 #define VBOX_BORDER 16
484 #define DEFAULT_ENTRY_WIDTH 80
485 #define PREFSBUFSIZE 1024
487 /* widget creating functions */
488 static void prefs_common_create (void);
489 static void prefs_receive_create (void);
490 static void prefs_send_create (void);
491 static void prefs_compose_create (void);
492 static void prefs_display_create (void);
493 static void prefs_message_create (void);
495 static void prefs_privacy_create (void);
497 static void prefs_interface_create (void);
498 static void prefs_other_create (void);
500 static void prefs_quote_description (void);
501 static void prefs_quote_description_create (void);
502 static void prefs_quote_colors_dialog (void);
503 static void prefs_quote_colors_dialog_create (void);
504 static void quote_color_set_dialog (GtkWidget *widget,
506 static void quote_colors_set_dialog_ok (GtkWidget *widget,
508 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
510 static void set_button_bg_color (GtkWidget *widget,
512 static void prefs_enable_message_color_toggled (void);
513 static void prefs_recycle_colors_toggled (GtkWidget *widget);
515 /* functions for setting items of SummaryView */
516 static void prefs_summary_display_item_dialog_create
517 (gboolean *cancelled);
518 static void display_item_ok (GtkWidget *widget,
519 gboolean *cancelled);
520 static void display_item_cancel (GtkWidget *widget,
521 gboolean *cancelled);
522 static gint display_item_delete_event (GtkWidget *widget,
524 gboolean *cancelled);
525 static void display_item_key_pressed (GtkWidget *widget,
527 gboolean *cancelled);
529 static void prefs_font_select (GtkButton *button);
530 static void prefs_font_selection_key_pressed (GtkWidget *widget,
533 static void prefs_font_selection_ok (GtkButton *button);
535 static void prefs_common_key_pressed (GtkWidget *widget,
538 static void prefs_common_ok (GtkButton *button);
539 static void prefs_common_apply (GtkButton *button);
541 void prefs_common_read_config(void)
543 prefs_read_config(param, "Common", COMMON_RC);
546 void prefs_common_save_config(void)
548 prefs_save_config(param, "Common", COMMON_RC);
551 void prefs_common_open(void)
553 if (!dialog.window) {
554 prefs_common_create();
557 manage_window_set_transient(GTK_WINDOW(dialog.window));
558 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
559 gtk_widget_grab_focus(dialog.ok_btn);
561 prefs_set_dialog(param);
563 gtk_widget_show(dialog.window);
566 static void prefs_common_create(void)
570 debug_print(_("Creating common preferences window...\n"));
572 prefs_dialog_create(&dialog);
573 gtk_window_set_title (GTK_WINDOW(dialog.window),
574 _("Common Preferences"));
575 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
576 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
577 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
578 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
579 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
580 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
581 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
582 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
583 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
584 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
585 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
586 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
587 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
588 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
589 GTK_OBJECT(dialog.window));
591 /* create all widgets on notebook */
592 prefs_receive_create();
593 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
595 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
596 prefs_compose_create();
597 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
598 prefs_display_create();
599 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
600 prefs_message_create();
601 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
603 prefs_privacy_create();
604 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
606 prefs_interface_create();
607 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
608 prefs_other_create();
609 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
611 gtk_widget_show_all(dialog.window);
614 static void prefs_receive_create(void)
618 GtkWidget *frame_incext;
619 GtkWidget *checkbtn_incext;
621 GtkWidget *label_incext;
622 GtkWidget *entry_incext;
623 GtkWidget *button_incext;
625 GtkWidget *frame_spool;
626 GtkWidget *checkbtn_local;
627 GtkWidget *checkbtn_filter_on_inc;
628 GtkWidget *label_spool;
629 GtkWidget *entry_spool;
631 GtkWidget *hbox_autochk;
632 GtkWidget *checkbtn_autochk;
633 GtkWidget *label_autochk1;
634 GtkObject *spinbtn_autochk_adj;
635 GtkWidget *spinbtn_autochk;
636 GtkWidget *label_autochk2;
637 GtkWidget *checkbtn_chkonstartup;
639 GtkWidget *frame_news;
640 GtkWidget *label_maxarticle;
641 GtkWidget *spinbtn_maxarticle;
642 GtkObject *spinbtn_maxarticle_adj;
644 vbox1 = gtk_vbox_new (FALSE, VSPACING);
645 gtk_widget_show (vbox1);
646 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
647 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
649 PACK_FRAME(vbox1, frame_incext, _("External program"));
651 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
652 gtk_widget_show (vbox2);
653 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
654 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
656 /* Use of external incorporation program */
657 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
658 _("Use external program for incorporation"));
660 hbox = gtk_hbox_new (FALSE, 8);
661 gtk_widget_show (hbox);
662 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
663 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
665 label_incext = gtk_label_new (_("Program path"));
666 gtk_widget_show (label_incext);
667 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
669 entry_incext = gtk_entry_new ();
670 gtk_widget_show (entry_incext);
671 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
673 button_incext = gtk_button_new_with_label ("... ");
674 gtk_widget_show (button_incext);
675 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
677 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
679 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
680 gtk_widget_show (vbox2);
681 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
682 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
684 hbox = gtk_hbox_new (FALSE, 32);
685 gtk_widget_show (hbox);
686 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
688 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
689 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
690 _("Filter on incorporation"));
691 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
693 hbox = gtk_hbox_new (FALSE, 8);
694 gtk_widget_show (hbox);
695 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
696 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
698 label_spool = gtk_label_new (_("Spool directory"));
699 gtk_widget_show (label_spool);
700 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
702 entry_spool = gtk_entry_new ();
703 gtk_widget_show (entry_spool);
704 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
706 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
707 gtk_widget_show (vbox2);
708 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
711 hbox_autochk = gtk_hbox_new (FALSE, 8);
712 gtk_widget_show (hbox_autochk);
713 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
715 gtk_widget_set_sensitive(hbox_autochk, FALSE);
717 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
718 _("Auto-check new mail"));
720 label_autochk1 = gtk_label_new (_("each"));
721 gtk_widget_show (label_autochk1);
722 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
724 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
725 spinbtn_autochk = gtk_spin_button_new
726 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
727 gtk_widget_show (spinbtn_autochk);
728 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
729 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
730 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
732 label_autochk2 = gtk_label_new (_("minute(s)"));
733 gtk_widget_show (label_autochk2);
734 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
736 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
737 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
738 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
740 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
741 _("Check new mail on startup"));
743 PACK_FRAME(vbox1, frame_news, _("News"));
745 hbox = gtk_hbox_new (FALSE, 8);
746 gtk_widget_show (hbox);
747 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
748 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
750 label_maxarticle = gtk_label_new
751 (_("Maximum article number to download\n"
752 "(unlimited if 0 is specified)"));
753 gtk_widget_show (label_maxarticle);
754 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
755 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
757 spinbtn_maxarticle_adj =
758 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
759 spinbtn_maxarticle = gtk_spin_button_new
760 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
761 gtk_widget_show (spinbtn_maxarticle);
762 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
764 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
765 gtk_spin_button_set_numeric
766 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
768 receive.checkbtn_incext = checkbtn_incext;
769 receive.entry_incext = entry_incext;
770 receive.button_incext = button_incext;
772 receive.checkbtn_local = checkbtn_local;
773 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
774 receive.entry_spool = entry_spool;
776 receive.checkbtn_autochk = checkbtn_autochk;
777 receive.spinbtn_autochk = spinbtn_autochk;
778 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
780 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
782 receive.spinbtn_maxarticle = spinbtn_maxarticle;
783 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
786 static void prefs_send_create(void)
790 GtkWidget *frame_sendext;
791 GtkWidget *vbox_sendext;
792 GtkWidget *checkbtn_sendext;
794 GtkWidget *label_sendext;
795 GtkWidget *entry_sendext;
796 GtkWidget *button_sendext;
797 GtkWidget *checkbtn_savemsg;
798 GtkWidget *checkbtn_queuemsg;
799 GtkWidget *label_outcharset;
801 GtkWidget *optmenu_menu;
804 vbox1 = gtk_vbox_new (FALSE, VSPACING);
805 gtk_widget_show (vbox1);
806 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
807 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
809 PACK_FRAME(vbox1, frame_sendext, _("External program"));
811 gtk_widget_set_sensitive(frame_sendext, FALSE);
813 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
814 gtk_widget_show (vbox_sendext);
815 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
816 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
818 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
819 _("Use external program for sending"));
821 hbox1 = gtk_hbox_new (FALSE, 8);
822 gtk_widget_show (hbox1);
823 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
824 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
826 label_sendext = gtk_label_new (_("Program path"));
827 gtk_widget_show (label_sendext);
828 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
830 entry_sendext = gtk_entry_new ();
831 gtk_widget_show (entry_sendext);
832 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
834 button_sendext = gtk_button_new_with_label ("... ");
835 gtk_widget_show (button_sendext);
836 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
838 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
839 gtk_widget_show (vbox2);
840 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
842 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
843 _("Save sent message to outbox"));
844 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
845 _("Queue message that failed to send"));
847 hbox1 = gtk_hbox_new (FALSE, 8);
848 gtk_widget_show (hbox1);
849 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
851 label_outcharset = gtk_label_new (_("Outgoing codeset"));
852 gtk_widget_show (label_outcharset);
853 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
855 optmenu = gtk_option_menu_new ();
856 gtk_widget_show (optmenu);
857 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
859 optmenu_menu = gtk_menu_new ();
861 #define SET_MENUITEM(str, charset) \
863 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
866 SET_MENUITEM(_("Automatic"), CS_AUTO);
867 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
869 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
871 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
873 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
874 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
875 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
876 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
877 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
878 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
879 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
880 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
881 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
882 #endif /* HAVE_LIBJCONV */
883 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
885 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
886 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
889 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
890 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
892 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
893 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
895 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
896 #endif /* HAVE_LIBJCONV */
898 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
900 send.checkbtn_sendext = checkbtn_sendext;
901 send.entry_sendext = entry_sendext;
902 send.button_sendext = button_sendext;
904 send.checkbtn_savemsg = checkbtn_savemsg;
905 send.checkbtn_queuemsg = checkbtn_queuemsg;
907 send.optmenu_charset = optmenu;
910 static void prefs_compose_create(void)
913 GtkWidget *frame_quote;
914 GtkWidget *vbox_quote;
915 GtkWidget *checkbtn_quote;
917 GtkWidget *label_quotemark;
918 GtkWidget *entry_quotemark;
920 GtkWidget *label_quotefmt;
921 GtkWidget *btn_quotedesc;
922 GtkWidget *scrolledwin_quotefmt;
923 GtkWidget *text_quotefmt;
925 GtkWidget *frame_sig;
927 GtkWidget *checkbtn_autosig;
928 GtkWidget *label_sigsep;
929 GtkWidget *entry_sigsep;
931 GtkWidget *vbox_linewrap;
934 GtkWidget *label_linewrap;
935 GtkObject *spinbtn_linewrap_adj;
936 GtkWidget *spinbtn_linewrap;
937 GtkWidget *checkbtn_wrapquote;
938 GtkWidget *checkbtn_wrapatsend;
940 vbox1 = gtk_vbox_new (FALSE, VSPACING);
941 gtk_widget_show (vbox1);
942 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
943 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
945 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
947 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
948 gtk_widget_show (vbox_quote);
949 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
950 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
952 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
953 _("Quote message when replying"));
955 hbox1 = gtk_hbox_new (FALSE, 8);
956 gtk_widget_show (hbox1);
957 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
959 label_quotemark = gtk_label_new (_("Quotation mark"));
960 gtk_widget_show (label_quotemark);
961 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
963 entry_quotemark = gtk_entry_new ();
964 gtk_widget_show (entry_quotemark);
965 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
966 gtk_widget_set_usize (entry_quotemark, 64, -1);
968 hbox2 = gtk_hbox_new (FALSE, 0);
969 gtk_widget_show (hbox2);
970 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
972 label_quotefmt = gtk_label_new (_("Quotation format:"));
973 gtk_widget_show (label_quotefmt);
974 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
977 gtk_button_new_with_label (_(" Description of symbols "));
978 gtk_widget_show (btn_quotedesc);
979 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
980 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
981 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
983 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
984 gtk_widget_show (scrolledwin_quotefmt);
985 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
986 gtk_scrolled_window_set_policy
987 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
988 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
990 text_quotefmt = gtk_text_new (NULL, NULL);
991 gtk_widget_show (text_quotefmt);
992 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
993 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
994 gtk_widget_set_usize(text_quotefmt, -1, 60);
996 PACK_FRAME(vbox1, frame_sig, _("Signature"));
998 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
999 gtk_widget_show (vbox_sig);
1000 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1001 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1003 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1004 _("Insert signature automatically"));
1006 hbox1 = gtk_hbox_new (FALSE, 8);
1007 gtk_widget_show (hbox1);
1008 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1010 label_sigsep = gtk_label_new (_("Signature separator"));
1011 gtk_widget_show (label_sigsep);
1012 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1014 entry_sigsep = gtk_entry_new ();
1015 gtk_widget_show (entry_sigsep);
1016 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1017 gtk_widget_set_usize (entry_sigsep, 64, -1);
1020 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1021 gtk_widget_show (vbox_linewrap);
1022 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1024 hbox3 = gtk_hbox_new (FALSE, 8);
1025 gtk_widget_show (hbox3);
1026 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1028 label_linewrap = gtk_label_new (_("Wrap messages at"));
1029 gtk_widget_show (label_linewrap);
1030 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1032 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1033 spinbtn_linewrap = gtk_spin_button_new
1034 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1035 gtk_widget_show (spinbtn_linewrap);
1036 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1037 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1038 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1040 label_linewrap = gtk_label_new (_("characters"));
1041 gtk_widget_show (label_linewrap);
1042 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1044 hbox4 = gtk_hbox_new (FALSE, 32);
1045 gtk_widget_show (hbox4);
1046 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1048 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1050 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1052 compose.checkbtn_quote = checkbtn_quote;
1053 compose.entry_quotemark = entry_quotemark;
1054 compose.text_quotefmt = text_quotefmt;
1055 compose.checkbtn_autosig = checkbtn_autosig;
1056 compose.entry_sigsep = entry_sigsep;
1058 compose.spinbtn_linewrap = spinbtn_linewrap;
1059 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1060 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1061 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1064 static void prefs_display_create(void)
1067 GtkWidget *frame_font;
1069 GtkWidget *label_textfont;
1070 GtkWidget *entry_textfont;
1071 GtkWidget *button_textfont;
1072 GtkWidget *chkbtn_folder_unread;
1073 GtkWidget *chkbtn_transhdr;
1074 GtkWidget *frame_summary;
1076 GtkWidget *chkbtn_swapfrom;
1077 GtkWidget *chkbtn_hscrollbar;
1079 GtkWidget *button_dispitem;
1081 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1082 gtk_widget_show (vbox1);
1083 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1084 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1086 PACK_FRAME(vbox1, frame_font, _("Font"));
1088 table1 = gtk_table_new (1, 3, FALSE);
1089 gtk_widget_show (table1);
1090 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1091 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1092 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1093 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1095 label_textfont = gtk_label_new (_("Text"));
1096 gtk_widget_show (label_textfont);
1097 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1098 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1100 entry_textfont = gtk_entry_new ();
1101 gtk_widget_show (entry_textfont);
1102 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1103 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1105 button_textfont = gtk_button_new_with_label ("... ");
1106 gtk_widget_show (button_textfont);
1107 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1109 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1110 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1112 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1113 gtk_widget_show (vbox2);
1114 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1117 (vbox2, chkbtn_transhdr,
1118 _("Translate header name (such as `From:', `Subject:')"));
1120 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1121 _("Display unread number next to folder name"));
1123 /* ---- Summary ---- */
1125 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1127 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1128 gtk_widget_show (vbox2);
1129 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1130 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1133 (vbox2, chkbtn_swapfrom,
1134 _("Display recipient on `From' column if sender is yourself"));
1136 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1138 hbox1 = gtk_hbox_new (FALSE, 8);
1139 gtk_widget_show (hbox1);
1140 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1142 button_dispitem = gtk_button_new_with_label
1143 (_(" Set display item of summary... "));
1144 gtk_widget_show (button_dispitem);
1145 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1146 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1147 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1150 display.entry_textfont = entry_textfont;
1151 display.button_textfont = button_textfont;
1153 display.chkbtn_folder_unread = chkbtn_folder_unread;
1155 display.chkbtn_transhdr = chkbtn_transhdr;
1156 display.chkbtn_swapfrom = chkbtn_swapfrom;
1157 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1160 static void prefs_message_create(void)
1165 GtkWidget *chkbtn_enablecol;
1166 GtkWidget *button_edit_col;
1167 GtkWidget *chkbtn_mbalnum;
1168 GtkWidget *chkbtn_disphdrpane;
1169 GtkWidget *chkbtn_disphdr;
1170 GtkWidget *hbox_linespc;
1171 GtkWidget *label_linespc;
1172 GtkObject *spinbtn_linespc_adj;
1173 GtkWidget *spinbtn_linespc;
1174 GtkWidget *chkbtn_headspc;
1176 GtkWidget *frame_scr;
1177 GtkWidget *vbox_scr;
1178 GtkWidget *chkbtn_smoothscroll;
1179 GtkWidget *hbox_scr;
1180 GtkWidget *label_scr;
1181 GtkObject *spinbtn_scrollstep_adj;
1182 GtkWidget *spinbtn_scrollstep;
1183 GtkWidget *chkbtn_halfpage;
1185 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1186 gtk_widget_show (vbox1);
1187 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1188 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1190 hbox1 = gtk_hbox_new (FALSE, 8);
1191 gtk_widget_show (hbox1);
1192 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1194 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1195 _("Enable coloration of message"));
1196 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1197 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1200 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1201 gtk_widget_show (button_edit_col);
1202 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1203 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1204 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1206 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1208 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1209 gtk_widget_show (vbox2);
1210 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1213 (vbox2, chkbtn_mbalnum,
1214 _("Display 2-byte alphabet and numeric with 1-byte character"));
1215 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1216 _("Display header pane above message view"));
1217 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1218 _("Display short headers on message view"));
1220 hbox1 = gtk_hbox_new (FALSE, 32);
1221 gtk_widget_show (hbox1);
1222 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1224 hbox_linespc = gtk_hbox_new (FALSE, 8);
1225 gtk_widget_show (hbox1);
1226 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1228 label_linespc = gtk_label_new (_("Line space"));
1229 gtk_widget_show (label_linespc);
1230 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1233 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1234 spinbtn_linespc = gtk_spin_button_new
1235 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1236 gtk_widget_show (spinbtn_linespc);
1237 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1239 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1240 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1242 label_linespc = gtk_label_new (_("pixel(s)"));
1243 gtk_widget_show (label_linespc);
1244 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1247 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1249 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1251 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1252 gtk_widget_show (vbox_scr);
1253 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1254 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1256 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1258 hbox1 = gtk_hbox_new (FALSE, 32);
1259 gtk_widget_show (hbox1);
1260 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1262 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1264 hbox_scr = gtk_hbox_new (FALSE, 8);
1265 gtk_widget_show (hbox_scr);
1266 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1268 label_scr = gtk_label_new (_("Step"));
1269 gtk_widget_show (label_scr);
1270 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1272 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1273 spinbtn_scrollstep = gtk_spin_button_new
1274 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1275 gtk_widget_show (spinbtn_scrollstep);
1276 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1278 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1279 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1282 label_scr = gtk_label_new (_("pixel(s)"));
1283 gtk_widget_show (label_scr);
1284 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1286 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1288 message.chkbtn_enablecol = chkbtn_enablecol;
1289 message.button_edit_col = button_edit_col;
1290 message.chkbtn_mbalnum = chkbtn_mbalnum;
1291 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1292 message.chkbtn_disphdr = chkbtn_disphdr;
1293 message.spinbtn_linespc = spinbtn_linespc;
1294 message.chkbtn_headspc = chkbtn_headspc;
1296 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1297 message.spinbtn_scrollstep = spinbtn_scrollstep;
1298 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1299 message.chkbtn_halfpage = chkbtn_halfpage;
1303 static void prefs_privacy_create(void)
1308 GtkWidget *checkbtn_default_encrypt;
1309 GtkWidget *checkbtn_default_sign;
1310 GtkWidget *checkbtn_auto_check_signatures;
1311 GtkWidget *checkbtn_passphrase_grab;
1313 GtkWidget *menuitem;
1315 GtkWidget *optmenu_menu;
1317 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1318 gtk_widget_show (vbox1);
1319 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1320 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1322 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1323 gtk_widget_show (vbox2);
1324 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1326 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1327 _("Encrypt message by default"));
1329 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1330 _("Sign message by default"));
1332 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1333 _("Automatically check signatures"));
1335 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1336 _("Grab input while entering a passphrase"));
1338 hbox1 = gtk_hbox_new (FALSE, 8);
1339 gtk_widget_show (hbox1);
1340 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1342 /* create default signkey box */
1343 label = gtk_label_new (_("Default Sign Key"));
1344 gtk_widget_show (label);
1345 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1346 optmenu = gtk_option_menu_new ();
1347 gtk_widget_show (optmenu);
1348 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1349 optmenu_menu = gtk_menu_new ();
1351 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1352 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1353 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1354 /* FIXME: disabled because not implemented */
1355 gtk_widget_set_sensitive(optmenu, FALSE);
1357 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1358 privacy.checkbtn_default_sign = checkbtn_default_sign;
1359 privacy.checkbtn_auto_check_signatures
1360 = checkbtn_auto_check_signatures;
1361 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1362 privacy.optmenu_default_signkey = optmenu;
1366 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1370 GtkWidget *menuitem;
1373 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1374 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1375 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1376 g_free(*((gchar **)pparam->data));
1377 *((gchar **)pparam->data) = g_strdup(charset);
1381 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1385 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1387 GtkWidget *menuitem;
1391 g_return_if_fail(optmenu != NULL);
1392 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1394 menu = gtk_option_menu_get_menu(optmenu);
1395 for (cur = GTK_MENU_SHELL(menu)->children;
1396 cur != NULL; cur = cur->next) {
1397 menuitem = GTK_WIDGET(cur->data);
1398 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1399 if (!strcmp(charset, *((gchar **)pparam->data))) {
1400 gtk_option_menu_set_history(optmenu, n);
1406 gtk_option_menu_set_history(optmenu, 0);
1407 prefs_common_charset_set_data_from_optmenu(pparam);
1410 #endif /* USE_GPGME */
1412 static void prefs_interface_create(void)
1417 GtkWidget *checkbtn_emacs;
1418 GtkWidget *checkbtn_openunread;
1419 GtkWidget *checkbtn_openinbox;
1420 GtkWidget *checkbtn_immedexec;
1423 GtkWidget *frame_exit;
1424 GtkWidget *vbox_exit;
1426 GtkWidget *checkbtn_confonexit;
1427 GtkWidget *checkbtn_cleanonexit;
1428 GtkWidget *checkbtn_askonclean;
1430 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1431 gtk_widget_show (vbox1);
1432 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1433 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1435 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1436 gtk_widget_show (vbox2);
1437 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1439 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1440 _("Emulate the behavior of mouse operation of\n"
1441 "Emacs-based mailer"));
1442 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1446 (vbox2, checkbtn_openunread,
1447 _("Open first unread message when entering a folder"));
1450 (vbox2, checkbtn_openinbox,
1451 _("Go to inbox after receiving new mail"));
1453 vbox3 = gtk_vbox_new (FALSE, 0);
1454 gtk_widget_show (vbox3);
1455 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1458 (vbox3, checkbtn_immedexec,
1459 _("Execute immediately when moving or deleting messages"));
1461 hbox1 = gtk_hbox_new (FALSE, 0);
1462 gtk_widget_show (hbox1);
1463 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1465 label = gtk_label_new
1466 (_("(Messages will be just marked till execution\n"
1467 " if this is turned off)"));
1468 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1469 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1471 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1473 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1474 gtk_widget_show (vbox_exit);
1475 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1476 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1478 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1479 _("Confirm on exit"));
1481 hbox1 = gtk_hbox_new (FALSE, 32);
1482 gtk_widget_show (hbox1);
1483 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1485 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1486 _("Empty trash on exit"));
1487 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1488 _("Ask before emptying"));
1489 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1491 interface.checkbtn_emacs = checkbtn_emacs;
1492 interface.checkbtn_openunread = checkbtn_openunread;
1493 interface.checkbtn_openinbox = checkbtn_openinbox;
1494 interface.checkbtn_immedexec = checkbtn_immedexec;
1495 interface.checkbtn_confonexit = checkbtn_confonexit;
1496 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1497 interface.checkbtn_askonclean = checkbtn_askonclean;
1500 static void prefs_other_create(void)
1505 GtkWidget *uri_frame;
1506 GtkWidget *uri_label;
1507 GtkWidget *uri_combo;
1508 GtkWidget *uri_entry;
1510 GtkWidget *print_frame;
1511 GtkWidget *printcmd_label;
1512 GtkWidget *printcmd_entry;
1514 GtkWidget *exteditor_frame;
1515 GtkWidget *exteditor_label;
1516 GtkWidget *exteditor_combo;
1517 GtkWidget *exteditor_entry;
1519 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1520 gtk_widget_show (vbox1);
1521 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1522 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1524 PACK_FRAME(vbox1, uri_frame,
1525 _("External Web browser (%s will be replaced with URI)"));
1527 hbox1 = gtk_hbox_new (FALSE, 8);
1528 gtk_widget_show (hbox1);
1529 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1530 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1532 uri_label = gtk_label_new (_("Command"));
1533 gtk_widget_show(uri_label);
1534 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1536 uri_combo = gtk_combo_new ();
1537 gtk_widget_show (uri_combo);
1538 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1539 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1540 "netscape -remote 'openURL(%s,raise)'",
1541 "gnome-moz-remote --raise --newwin '%s'",
1542 "kterm -e w3m '%s'",
1543 "kterm -e lynx '%s'",
1546 uri_entry = GTK_COMBO (uri_combo)->entry;
1548 PACK_FRAME(vbox1, print_frame,
1549 _("Printing (%s will be replaced with file name)"));
1551 hbox1 = gtk_hbox_new (FALSE, 8);
1552 gtk_widget_show (hbox1);
1553 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1554 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1556 printcmd_label = gtk_label_new (_("Command"));
1557 gtk_widget_show (printcmd_label);
1558 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1560 printcmd_entry = gtk_entry_new ();
1561 gtk_widget_show (printcmd_entry);
1562 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1564 PACK_FRAME(vbox1, exteditor_frame,
1565 _("External editor (%s will be replaced with file name)"));
1567 hbox1 = gtk_hbox_new (FALSE, 8);
1568 gtk_widget_show (hbox1);
1569 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1570 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1572 exteditor_label = gtk_label_new (_("Command"));
1573 gtk_widget_show (exteditor_label);
1574 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1576 exteditor_combo = gtk_combo_new ();
1577 gtk_widget_show (exteditor_combo);
1578 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1579 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1581 "mgedit --no-fork %s",
1587 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1589 other.uri_combo = uri_combo;
1590 other.uri_entry = uri_entry;
1591 other.printcmd_entry = printcmd_entry;
1593 other.exteditor_combo = exteditor_combo;
1594 other.exteditor_entry = exteditor_entry;
1597 void prefs_quote_colors_dialog(void)
1599 if (!quote_color_win)
1600 prefs_quote_colors_dialog_create();
1601 gtk_widget_show(quote_color_win);
1604 gtk_widget_hide(quote_color_win);
1606 textview_update_message_colors();
1609 static void prefs_quote_colors_dialog_create(void)
1614 GtkWidget *quotelevel1_label;
1615 GtkWidget *quotelevel2_label;
1616 GtkWidget *quotelevel3_label;
1617 GtkWidget *uri_label;
1620 //GtkWidget *cancel_btn;
1621 GtkWidget *recycle_colors_btn;
1622 GtkWidget *frame_colors;
1624 window = gtk_window_new(GTK_WINDOW_DIALOG);
1625 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1626 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1627 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1628 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1629 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1631 vbox = gtk_vbox_new (FALSE, VSPACING);
1632 gtk_container_add (GTK_CONTAINER (window), vbox);
1633 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1634 PACK_FRAME(vbox, frame_colors, _("Colors"));
1636 table = gtk_table_new (4, 2, FALSE);
1637 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1638 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1639 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1640 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1642 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1644 color_buttons.quote_level1_btn = gtk_button_new();
1645 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1646 (GtkAttachOptions) (0),
1647 (GtkAttachOptions) (0), 0, 0);
1648 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1649 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1651 color_buttons.quote_level2_btn = gtk_button_new();
1652 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1653 (GtkAttachOptions) (0),
1654 (GtkAttachOptions) (0), 0, 0);
1655 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1656 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1658 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1659 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1660 (GtkAttachOptions) (0),
1661 (GtkAttachOptions) (0), 0, 0);
1662 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1663 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1665 color_buttons.uri_btn = gtk_button_new_with_label ("");
1666 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1667 (GtkAttachOptions) (0),
1668 (GtkAttachOptions) (0), 0, 0);
1669 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1670 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1672 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1673 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1674 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1675 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1676 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1678 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1679 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1680 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1681 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1682 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1684 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1685 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1686 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1687 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1688 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1690 uri_label = gtk_label_new (_("URI link"));
1691 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1692 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1693 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1694 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1696 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1697 _("Recycle quote colors"));
1699 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1700 NULL, NULL, NULL, NULL);
1701 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1703 gtk_widget_grab_default(ok_btn);
1704 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1705 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1706 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1707 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1709 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1710 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1711 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1712 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1713 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1714 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1715 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1716 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1717 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1718 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1720 /* show message button colors and recycle options */
1721 set_button_bg_color(color_buttons.quote_level1_btn,
1722 prefs_common.quote_level1_col);
1723 set_button_bg_color(color_buttons.quote_level2_btn,
1724 prefs_common.quote_level2_col);
1725 set_button_bg_color(color_buttons.quote_level3_btn,
1726 prefs_common.quote_level3_col);
1727 set_button_bg_color(color_buttons.uri_btn,
1728 prefs_common.uri_col);
1729 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1730 prefs_common.recycle_quote_colors);
1732 gtk_widget_show_all(vbox);
1733 quote_color_win = window;
1736 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1738 gchar *type = (gchar *)data;
1739 gchar *title = NULL;
1740 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1742 GtkColorSelectionDialog *dialog;
1744 if(g_strcasecmp(type, "LEVEL1") == 0) {
1745 title = _("Pick color for quotation level 1");
1746 rgbvalue = prefs_common.quote_level1_col;
1747 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1748 title = _("Pick color for quotation level 2");
1749 rgbvalue = prefs_common.quote_level2_col;
1750 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1751 title = _("Pick color for quotation level 3");
1752 rgbvalue = prefs_common.quote_level3_col;
1753 } else if(g_strcasecmp(type, "URI") == 0) {
1754 title = _("Pick color for URI");
1755 rgbvalue = prefs_common.uri_col;
1756 } else { /* Should never be called */
1757 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1761 color_dialog = gtk_color_selection_dialog_new(title);
1762 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1763 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1764 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1766 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1767 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1768 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1769 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1771 /* preselect the previous color in the color selection dialog */
1772 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1773 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1774 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1775 dialog = (GtkColorSelectionDialog *)color_dialog;
1776 gtk_color_selection_set_color
1777 ((GtkColorSelection *)dialog->colorsel, color);
1779 gtk_widget_show(color_dialog);
1782 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1784 GtkColorSelection *colorsel = (GtkColorSelection *)
1785 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1787 gint red, green, blue, rgbvalue;
1788 gchar *type = (gchar *)data;
1790 gtk_color_selection_get_color(colorsel, color);
1792 red = (gint) (color[0] * 255.0);
1793 green = (gint) (color[1] * 255.0);
1794 blue = (gint) (color[2] * 255.0);
1795 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1798 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1799 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1800 fprintf(stderr, "Color is %x\n", rgbvalue);
1803 if (g_strcasecmp(type, "LEVEL1") == 0) {
1804 prefs_common.quote_level1_col = rgbvalue;
1805 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1806 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1807 prefs_common.quote_level2_col = rgbvalue;
1808 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1809 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1810 prefs_common.quote_level3_col = rgbvalue;
1811 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1812 } else if (g_strcasecmp(type, "URI") == 0) {
1813 prefs_common.uri_col = rgbvalue;
1814 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1816 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1818 gtk_widget_hide(color_dialog);
1821 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1823 gtk_widget_hide(color_dialog);
1826 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1831 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1832 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1833 newstyle->bg[GTK_STATE_NORMAL] = color;
1834 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1835 newstyle->bg[GTK_STATE_ACTIVE] = color;
1837 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1840 static void prefs_enable_message_color_toggled(void)
1844 is_active = gtk_toggle_button_get_active
1845 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1846 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1847 prefs_common.enable_color = is_active;
1850 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1854 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1855 prefs_common.recycle_quote_colors = is_active;
1858 static void prefs_quote_description(void)
1860 if (!quote_desc_win)
1861 prefs_quote_description_create();
1863 gtk_widget_show(quote_desc_win);
1865 gtk_widget_hide(quote_desc_win);
1868 static void prefs_quote_description_create(void)
1876 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1877 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1878 _("Description of symbols"));
1879 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1880 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1881 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1882 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1884 vbox = gtk_vbox_new(FALSE, 8);
1885 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1887 hbox = gtk_hbox_new(FALSE, 4);
1888 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1890 label = gtk_label_new
1901 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1902 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1904 label = gtk_label_new
1907 "Full Name of Sender\n"
1908 "First Name of Sender\n"
1909 "Initial of Sender\n"
1915 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1916 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1918 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1919 NULL, NULL, NULL, NULL);
1920 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1922 gtk_widget_grab_default(ok_btn);
1923 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1924 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1926 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
1927 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1929 gtk_widget_show_all(vbox);
1932 /* functions for setting items of SummaryView */
1934 static struct _SummaryDisplayItem
1938 GtkWidget *chkbtn[N_SUMMARY_COLS];
1941 GtkWidget *cancel_btn;
1944 #define SET_ACTIVE(column, var) \
1945 gtk_toggle_button_set_active \
1946 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
1948 #define GET_ACTIVE(column, var) \
1949 prefs_common.var = gtk_toggle_button_get_active \
1950 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
1952 void prefs_summary_display_item_set(void)
1954 static gboolean cancelled;
1956 if (!summarydispitem.window)
1957 prefs_summary_display_item_dialog_create(&cancelled);
1958 gtk_widget_grab_focus(summarydispitem.ok_btn);
1959 gtk_widget_show(summarydispitem.window);
1960 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
1962 SET_ACTIVE(S_COL_MARK, show_mark);
1963 SET_ACTIVE(S_COL_UNREAD, show_unread);
1964 SET_ACTIVE(S_COL_MIME, show_mime);
1965 SET_ACTIVE(S_COL_NUMBER, show_number);
1966 SET_ACTIVE(S_COL_SIZE, show_size);
1967 SET_ACTIVE(S_COL_DATE, show_date);
1968 SET_ACTIVE(S_COL_FROM, show_from);
1969 SET_ACTIVE(S_COL_SUBJECT, show_subject);
1972 gtk_widget_hide(summarydispitem.window);
1974 if (cancelled != TRUE) {
1975 GET_ACTIVE(S_COL_MARK, show_mark);
1976 GET_ACTIVE(S_COL_UNREAD, show_unread);
1977 GET_ACTIVE(S_COL_MIME, show_mime);
1978 GET_ACTIVE(S_COL_NUMBER, show_number);
1979 GET_ACTIVE(S_COL_SIZE, show_size);
1980 GET_ACTIVE(S_COL_DATE, show_date);
1981 GET_ACTIVE(S_COL_FROM, show_from);
1982 GET_ACTIVE(S_COL_SUBJECT, show_subject);
1984 main_window_reflect_prefs_all();
1988 #define SET_CHECK_BUTTON(column, label) \
1990 summarydispitem.chkbtn[column] = \
1991 gtk_check_button_new_with_label(label); \
1992 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
1993 summarydispitem.chkbtn[column], \
1997 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2001 GtkWidget *chkbtn_vbox;
2004 GtkWidget *cancel_btn;
2006 window = gtk_window_new(GTK_WINDOW_DIALOG);
2007 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2008 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2009 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2010 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2011 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2012 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2013 GTK_SIGNAL_FUNC(display_item_delete_event),
2015 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2016 GTK_SIGNAL_FUNC(display_item_key_pressed),
2019 vbox = gtk_vbox_new(FALSE, 8);
2020 gtk_container_add(GTK_CONTAINER(window), vbox);
2022 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2023 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2025 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2026 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2027 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2028 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2029 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2030 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2031 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2032 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2034 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2035 &cancel_btn, _("Cancel"), NULL, NULL);
2036 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2037 gtk_widget_grab_default(ok_btn);
2039 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2040 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2041 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2042 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2044 gtk_widget_show_all(vbox);
2046 summarydispitem.window = window;
2047 summarydispitem.ok_btn = ok_btn;
2048 summarydispitem.cancel_btn = cancel_btn;
2051 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2057 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2063 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2064 gboolean *cancelled)
2072 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2073 gboolean *cancelled)
2075 if (event && event->keyval == GDK_Escape) {
2081 static void prefs_font_select(GtkButton *button)
2083 if (!font_sel_win) {
2084 font_sel_win = gtk_font_selection_dialog_new
2085 (_("Font selection"));
2086 gtk_window_position(GTK_WINDOW(font_sel_win),
2087 GTK_WIN_POS_CENTER);
2088 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2089 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2092 (GTK_OBJECT(font_sel_win), "key_press_event",
2093 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2096 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2098 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2100 gtk_signal_connect_object
2101 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2103 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2104 GTK_OBJECT(font_sel_win));
2107 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2108 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2109 gtk_widget_grab_focus
2110 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2111 gtk_widget_show(font_sel_win);
2114 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2118 if (event && event->keyval == GDK_Escape)
2119 gtk_widget_hide(font_sel_win);
2122 static void prefs_font_selection_ok(GtkButton *button)
2126 fontname = gtk_font_selection_dialog_get_font_name
2127 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2130 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2134 gtk_widget_hide(font_sel_win);
2137 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2140 GtkWidget *menuitem;
2143 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2144 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2145 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2146 g_free(*((gchar **)pparam->data));
2147 *((gchar **)pparam->data) = g_strdup(charset);
2150 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2153 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2155 GtkWidget *menuitem;
2159 g_return_if_fail(optmenu != NULL);
2160 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2162 menu = gtk_option_menu_get_menu(optmenu);
2163 for (cur = GTK_MENU_SHELL(menu)->children;
2164 cur != NULL; cur = cur->next) {
2165 menuitem = GTK_WIDGET(cur->data);
2166 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2167 if (!strcmp(charset, *((gchar **)pparam->data))) {
2168 gtk_option_menu_set_history(optmenu, n);
2174 gtk_option_menu_set_history(optmenu, 0);
2175 prefs_common_charset_set_data_from_optmenu(pparam);
2178 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2181 if (event && event->keyval == GDK_Escape)
2182 gtk_widget_hide(dialog.window);
2185 static void prefs_common_ok(GtkButton *button)
2187 prefs_common_apply(button);
2188 gtk_widget_hide(dialog.window);
2189 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2190 gtk_widget_hide(quote_desc_win);
2193 static void prefs_common_apply(GtkButton *button)
2195 prefs_set_data_from_dialog(param);
2196 main_window_reflect_prefs_all();
2197 prefs_common_save_config();