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;
143 GtkWidget *checkbtn_addaddrbyclick;
146 static struct Other {
147 GtkWidget *uri_combo;
148 GtkWidget *uri_entry;
149 GtkWidget *printcmd_entry;
150 GtkWidget *exteditor_combo;
151 GtkWidget *exteditor_entry;
154 static struct MessageColorButtons {
155 GtkWidget *quote_level1_btn;
156 GtkWidget *quote_level2_btn;
157 GtkWidget *quote_level3_btn;
161 static GtkWidget *quote_desc_win;
162 static GtkWidget *font_sel_win;
163 static GtkWidget *quote_color_win;
164 static GtkWidget *color_dialog;
166 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
167 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
169 static void prefs_common_default_signkey_set_data_from_optmenu
171 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
175 parameter name, default value, pointer to the prefs variable, data type,
176 pointer to the widget pointer,
177 pointer to the function for data setting,
178 pointer to the function for widget setting
181 static PrefParam param[] = {
183 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
184 &receive.checkbtn_incext,
185 prefs_set_data_from_toggle, prefs_set_toggle},
186 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
187 &receive.entry_incext,
188 prefs_set_data_from_entry, prefs_set_entry},
190 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
191 &receive.checkbtn_local,
192 prefs_set_data_from_toggle, prefs_set_toggle},
193 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
194 &receive.checkbtn_filter_on_inc,
195 prefs_set_data_from_toggle, prefs_set_toggle},
196 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
197 &receive.entry_spool,
198 prefs_set_data_from_entry, prefs_set_entry},
200 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
201 &receive.checkbtn_autochk,
202 prefs_set_data_from_toggle, prefs_set_toggle},
203 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
204 &receive.spinbtn_autochk,
205 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
206 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
207 &receive.checkbtn_chkonstartup,
208 prefs_set_data_from_toggle, prefs_set_toggle},
210 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
211 &receive.spinbtn_maxarticle,
212 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
215 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
216 &send.checkbtn_sendext,
217 prefs_set_data_from_toggle, prefs_set_toggle},
218 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
219 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
220 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
221 &send.checkbtn_savemsg,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
224 &send.checkbtn_queuemsg,
225 prefs_set_data_from_toggle, prefs_set_toggle},
227 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
228 &send.optmenu_charset,
229 prefs_common_charset_set_data_from_optmenu,
230 prefs_common_charset_set_optmenu},
233 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
234 &compose.checkbtn_quote,
235 prefs_set_data_from_toggle, prefs_set_toggle},
236 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
237 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
238 {"quote_format", "On %d\\n%f wrote:\\n\\n",
239 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
240 prefs_set_data_from_text, prefs_set_text},
242 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
243 &compose.checkbtn_autosig,
244 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
246 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
248 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
249 &compose.spinbtn_linewrap,
250 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
251 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
252 &compose.checkbtn_wrapquote,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"linewrap_before_sending", "FALSE",
255 &prefs_common.linewrap_at_send, P_BOOL,
256 &compose.checkbtn_wrapatsend,
257 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
263 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
265 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
266 &prefs_common.textfont, P_STRING,
267 &display.entry_textfont,
268 prefs_set_data_from_entry, prefs_set_entry},
270 {"display_folder_unread_num", "TRUE",
271 &prefs_common.display_folder_unread, P_BOOL,
272 &display.chkbtn_folder_unread,
273 prefs_set_data_from_toggle, prefs_set_toggle},
275 /* Display: Summary View */
276 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
277 &display.chkbtn_transhdr,
278 prefs_set_data_from_toggle, prefs_set_toggle},
279 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
280 &display.chkbtn_swapfrom,
281 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
283 &display.chkbtn_hscrollbar,
284 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
288 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
290 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
293 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
295 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
297 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
299 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
301 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
303 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
305 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
307 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
311 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
313 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
315 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
317 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
319 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
321 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
323 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
325 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
327 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
329 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
331 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
333 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
335 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
337 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
339 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
341 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
342 P_INT, NULL, NULL, NULL},
343 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
345 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
347 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
349 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
351 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
353 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
355 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
357 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
359 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
361 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
363 {"compose_width", "600", &prefs_common.compose_width, P_INT,
365 {"compose_height", "560", &prefs_common.compose_height, P_INT,
369 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
370 &message.chkbtn_enablecol,
371 prefs_set_data_from_toggle, prefs_set_toggle},
373 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
375 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
377 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
379 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
381 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
383 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
384 P_BOOL, NULL, NULL, NULL},
386 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
387 &message.chkbtn_mbalnum,
388 prefs_set_data_from_toggle, prefs_set_toggle},
389 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
390 P_BOOL, &message.chkbtn_disphdrpane,
391 prefs_set_data_from_toggle, prefs_set_toggle},
392 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
393 &message.chkbtn_disphdr,
394 prefs_set_data_from_toggle, prefs_set_toggle},
395 {"line_space", "2", &prefs_common.line_space, P_INT,
396 &message.spinbtn_linespc,
397 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
398 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
399 &message.chkbtn_headspc,
400 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"enable_smooth_scroll", "FALSE",
403 &prefs_common.enable_smooth_scroll, P_BOOL,
404 &message.chkbtn_smoothscroll,
405 prefs_set_data_from_toggle, prefs_set_toggle},
406 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
407 &message.spinbtn_scrollstep,
408 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
409 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
410 &message.chkbtn_halfpage,
411 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"mime_image_viewer", "display '%s'",
415 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
416 {"mime_audio_player", "play '%s'",
417 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
421 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
422 &privacy.checkbtn_default_encrypt,
423 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
425 &privacy.checkbtn_default_sign,
426 prefs_set_data_from_toggle, prefs_set_toggle},
427 {"auto_check_signatures", "TRUE",
428 &prefs_common.auto_check_signatures, P_BOOL,
429 &privacy.checkbtn_auto_check_signatures,
430 prefs_set_data_from_toggle, prefs_set_toggle},
431 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
432 &privacy.checkbtn_passphrase_grab,
433 prefs_set_data_from_toggle, prefs_set_toggle},
434 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
435 &privacy.optmenu_default_signkey,
436 prefs_common_default_signkey_set_data_from_optmenu,
437 prefs_common_default_signkey_set_optmenu},
438 #endif /* USE_GPGME */
441 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
443 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
446 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
447 &interface.checkbtn_emacs,
448 prefs_set_data_from_toggle, prefs_set_toggle},
449 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
450 P_BOOL, &interface.checkbtn_openunread,
451 prefs_set_data_from_toggle, prefs_set_toggle},
452 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
453 P_BOOL, &interface.checkbtn_openinbox,
454 prefs_set_data_from_toggle, prefs_set_toggle},
455 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
456 &interface.checkbtn_immedexec,
457 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
459 P_BOOL, &interface.checkbtn_addaddrbyclick,
460 prefs_set_data_from_toggle, prefs_set_toggle},
462 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
463 &interface.checkbtn_confonexit,
464 prefs_set_data_from_toggle, prefs_set_toggle},
465 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
466 &interface.checkbtn_cleanonexit,
467 prefs_set_data_from_toggle, prefs_set_toggle},
468 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
469 &interface.checkbtn_askonclean,
470 prefs_set_data_from_toggle, prefs_set_toggle},
473 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
474 &prefs_common.uri_cmd, P_STRING,
475 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
476 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
477 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
478 {"ext_editor_command", "gedit %s",
479 &prefs_common.ext_editor_cmd, P_STRING,
480 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
482 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
486 #define VSPACING_NARROW 4
487 #define VBOX_BORDER 16
488 #define DEFAULT_ENTRY_WIDTH 80
489 #define PREFSBUFSIZE 1024
491 /* widget creating functions */
492 static void prefs_common_create (void);
493 static void prefs_receive_create (void);
494 static void prefs_send_create (void);
495 static void prefs_compose_create (void);
496 static void prefs_display_create (void);
497 static void prefs_message_create (void);
499 static void prefs_privacy_create (void);
501 static void prefs_interface_create (void);
502 static void prefs_other_create (void);
504 static void prefs_quote_description (void);
505 static void prefs_quote_description_create (void);
506 static void prefs_quote_colors_dialog (void);
507 static void prefs_quote_colors_dialog_create (void);
508 static void quote_color_set_dialog (GtkWidget *widget,
510 static void quote_colors_set_dialog_ok (GtkWidget *widget,
512 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
514 static void set_button_bg_color (GtkWidget *widget,
516 static void prefs_enable_message_color_toggled (void);
517 static void prefs_recycle_colors_toggled (GtkWidget *widget);
519 /* functions for setting items of SummaryView */
520 static void prefs_summary_display_item_dialog_create
521 (gboolean *cancelled);
522 static void display_item_ok (GtkWidget *widget,
523 gboolean *cancelled);
524 static void display_item_cancel (GtkWidget *widget,
525 gboolean *cancelled);
526 static gint display_item_delete_event (GtkWidget *widget,
528 gboolean *cancelled);
529 static void display_item_key_pressed (GtkWidget *widget,
531 gboolean *cancelled);
533 static void prefs_font_select (GtkButton *button);
534 static void prefs_font_selection_key_pressed (GtkWidget *widget,
537 static void prefs_font_selection_ok (GtkButton *button);
539 static void prefs_common_key_pressed (GtkWidget *widget,
542 static void prefs_common_ok (GtkButton *button);
543 static void prefs_common_apply (GtkButton *button);
545 void prefs_common_read_config(void)
547 prefs_read_config(param, "Common", COMMON_RC);
550 void prefs_common_save_config(void)
552 prefs_save_config(param, "Common", COMMON_RC);
555 void prefs_common_open(void)
557 if (!dialog.window) {
558 prefs_common_create();
561 manage_window_set_transient(GTK_WINDOW(dialog.window));
562 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
563 gtk_widget_grab_focus(dialog.ok_btn);
565 prefs_set_dialog(param);
567 gtk_widget_show(dialog.window);
570 static void prefs_common_create(void)
574 debug_print(_("Creating common preferences window...\n"));
576 prefs_dialog_create(&dialog);
577 gtk_window_set_title (GTK_WINDOW(dialog.window),
578 _("Common Preferences"));
579 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
580 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
581 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
582 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
583 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
584 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
585 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
586 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
587 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
588 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
589 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
590 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
591 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
592 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
593 GTK_OBJECT(dialog.window));
595 /* create all widgets on notebook */
596 prefs_receive_create();
597 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
599 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
600 prefs_compose_create();
601 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
602 prefs_display_create();
603 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
604 prefs_message_create();
605 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
607 prefs_privacy_create();
608 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
610 prefs_interface_create();
611 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
612 prefs_other_create();
613 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
615 gtk_widget_show_all(dialog.window);
618 static void prefs_receive_create(void)
622 GtkWidget *frame_incext;
623 GtkWidget *checkbtn_incext;
625 GtkWidget *label_incext;
626 GtkWidget *entry_incext;
627 GtkWidget *button_incext;
629 GtkWidget *frame_spool;
630 GtkWidget *checkbtn_local;
631 GtkWidget *checkbtn_filter_on_inc;
632 GtkWidget *label_spool;
633 GtkWidget *entry_spool;
635 GtkWidget *hbox_autochk;
636 GtkWidget *checkbtn_autochk;
637 GtkWidget *label_autochk1;
638 GtkObject *spinbtn_autochk_adj;
639 GtkWidget *spinbtn_autochk;
640 GtkWidget *label_autochk2;
641 GtkWidget *checkbtn_chkonstartup;
643 GtkWidget *frame_news;
644 GtkWidget *label_maxarticle;
645 GtkWidget *spinbtn_maxarticle;
646 GtkObject *spinbtn_maxarticle_adj;
648 vbox1 = gtk_vbox_new (FALSE, VSPACING);
649 gtk_widget_show (vbox1);
650 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
651 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
653 PACK_FRAME(vbox1, frame_incext, _("External program"));
655 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
656 gtk_widget_show (vbox2);
657 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
658 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
660 /* Use of external incorporation program */
661 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
662 _("Use external program for incorporation"));
664 hbox = gtk_hbox_new (FALSE, 8);
665 gtk_widget_show (hbox);
666 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
667 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
669 label_incext = gtk_label_new (_("Program path"));
670 gtk_widget_show (label_incext);
671 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
673 entry_incext = gtk_entry_new ();
674 gtk_widget_show (entry_incext);
675 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
677 button_incext = gtk_button_new_with_label ("... ");
678 gtk_widget_show (button_incext);
679 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
681 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
683 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
684 gtk_widget_show (vbox2);
685 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
686 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
688 hbox = gtk_hbox_new (FALSE, 32);
689 gtk_widget_show (hbox);
690 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
692 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
693 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
694 _("Filter on incorporation"));
695 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
697 hbox = gtk_hbox_new (FALSE, 8);
698 gtk_widget_show (hbox);
699 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
700 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
702 label_spool = gtk_label_new (_("Spool directory"));
703 gtk_widget_show (label_spool);
704 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
706 entry_spool = gtk_entry_new ();
707 gtk_widget_show (entry_spool);
708 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
710 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
711 gtk_widget_show (vbox2);
712 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
715 hbox_autochk = gtk_hbox_new (FALSE, 8);
716 gtk_widget_show (hbox_autochk);
717 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
719 gtk_widget_set_sensitive(hbox_autochk, FALSE);
721 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
722 _("Auto-check new mail"));
724 label_autochk1 = gtk_label_new (_("each"));
725 gtk_widget_show (label_autochk1);
726 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
728 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
729 spinbtn_autochk = gtk_spin_button_new
730 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
731 gtk_widget_show (spinbtn_autochk);
732 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
733 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
734 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
736 label_autochk2 = gtk_label_new (_("minute(s)"));
737 gtk_widget_show (label_autochk2);
738 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
740 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
741 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
742 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
744 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
745 _("Check new mail on startup"));
747 PACK_FRAME(vbox1, frame_news, _("News"));
749 hbox = gtk_hbox_new (FALSE, 8);
750 gtk_widget_show (hbox);
751 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
752 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
754 label_maxarticle = gtk_label_new
755 (_("Maximum article number to download\n"
756 "(unlimited if 0 is specified)"));
757 gtk_widget_show (label_maxarticle);
758 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
759 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
761 spinbtn_maxarticle_adj =
762 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
763 spinbtn_maxarticle = gtk_spin_button_new
764 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
765 gtk_widget_show (spinbtn_maxarticle);
766 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
768 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
769 gtk_spin_button_set_numeric
770 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
772 receive.checkbtn_incext = checkbtn_incext;
773 receive.entry_incext = entry_incext;
774 receive.button_incext = button_incext;
776 receive.checkbtn_local = checkbtn_local;
777 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
778 receive.entry_spool = entry_spool;
780 receive.checkbtn_autochk = checkbtn_autochk;
781 receive.spinbtn_autochk = spinbtn_autochk;
782 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
784 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
786 receive.spinbtn_maxarticle = spinbtn_maxarticle;
787 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
790 static void prefs_send_create(void)
794 GtkWidget *frame_sendext;
795 GtkWidget *vbox_sendext;
796 GtkWidget *checkbtn_sendext;
798 GtkWidget *label_sendext;
799 GtkWidget *entry_sendext;
800 GtkWidget *button_sendext;
801 GtkWidget *checkbtn_savemsg;
802 GtkWidget *checkbtn_queuemsg;
803 GtkWidget *label_outcharset;
805 GtkWidget *optmenu_menu;
808 vbox1 = gtk_vbox_new (FALSE, VSPACING);
809 gtk_widget_show (vbox1);
810 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
811 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
813 PACK_FRAME(vbox1, frame_sendext, _("External program"));
815 gtk_widget_set_sensitive(frame_sendext, FALSE);
817 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
818 gtk_widget_show (vbox_sendext);
819 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
820 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
822 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
823 _("Use external program for sending"));
825 hbox1 = gtk_hbox_new (FALSE, 8);
826 gtk_widget_show (hbox1);
827 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
828 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
830 label_sendext = gtk_label_new (_("Program path"));
831 gtk_widget_show (label_sendext);
832 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
834 entry_sendext = gtk_entry_new ();
835 gtk_widget_show (entry_sendext);
836 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
838 button_sendext = gtk_button_new_with_label ("... ");
839 gtk_widget_show (button_sendext);
840 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
842 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
843 gtk_widget_show (vbox2);
844 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
846 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
847 _("Save sent message to outbox"));
848 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
849 _("Queue message that failed to send"));
851 hbox1 = gtk_hbox_new (FALSE, 8);
852 gtk_widget_show (hbox1);
853 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
855 label_outcharset = gtk_label_new (_("Outgoing codeset"));
856 gtk_widget_show (label_outcharset);
857 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
859 optmenu = gtk_option_menu_new ();
860 gtk_widget_show (optmenu);
861 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
863 optmenu_menu = gtk_menu_new ();
865 #define SET_MENUITEM(str, charset) \
867 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
870 SET_MENUITEM(_("Automatic"), CS_AUTO);
871 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
873 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
875 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
877 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
878 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
879 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
880 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
881 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
882 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
883 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
884 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
885 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
886 #endif /* HAVE_LIBJCONV */
887 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
889 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
890 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
893 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
894 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
896 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
897 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
899 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
900 #endif /* HAVE_LIBJCONV */
902 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
904 send.checkbtn_sendext = checkbtn_sendext;
905 send.entry_sendext = entry_sendext;
906 send.button_sendext = button_sendext;
908 send.checkbtn_savemsg = checkbtn_savemsg;
909 send.checkbtn_queuemsg = checkbtn_queuemsg;
911 send.optmenu_charset = optmenu;
914 static void prefs_compose_create(void)
917 GtkWidget *frame_quote;
918 GtkWidget *vbox_quote;
919 GtkWidget *checkbtn_quote;
921 GtkWidget *label_quotemark;
922 GtkWidget *entry_quotemark;
924 GtkWidget *label_quotefmt;
925 GtkWidget *btn_quotedesc;
926 GtkWidget *scrolledwin_quotefmt;
927 GtkWidget *text_quotefmt;
929 GtkWidget *frame_sig;
931 GtkWidget *checkbtn_autosig;
932 GtkWidget *label_sigsep;
933 GtkWidget *entry_sigsep;
935 GtkWidget *vbox_linewrap;
938 GtkWidget *label_linewrap;
939 GtkObject *spinbtn_linewrap_adj;
940 GtkWidget *spinbtn_linewrap;
941 GtkWidget *checkbtn_wrapquote;
942 GtkWidget *checkbtn_wrapatsend;
944 vbox1 = gtk_vbox_new (FALSE, VSPACING);
945 gtk_widget_show (vbox1);
946 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
947 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
949 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
951 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
952 gtk_widget_show (vbox_quote);
953 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
954 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
956 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
957 _("Quote message when replying"));
959 hbox1 = gtk_hbox_new (FALSE, 8);
960 gtk_widget_show (hbox1);
961 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
963 label_quotemark = gtk_label_new (_("Quotation mark"));
964 gtk_widget_show (label_quotemark);
965 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
967 entry_quotemark = gtk_entry_new ();
968 gtk_widget_show (entry_quotemark);
969 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
970 gtk_widget_set_usize (entry_quotemark, 64, -1);
972 hbox2 = gtk_hbox_new (FALSE, 0);
973 gtk_widget_show (hbox2);
974 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
976 label_quotefmt = gtk_label_new (_("Quotation format:"));
977 gtk_widget_show (label_quotefmt);
978 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
981 gtk_button_new_with_label (_(" Description of symbols "));
982 gtk_widget_show (btn_quotedesc);
983 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
984 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
985 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
987 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
988 gtk_widget_show (scrolledwin_quotefmt);
989 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
990 gtk_scrolled_window_set_policy
991 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
992 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
994 text_quotefmt = gtk_text_new (NULL, NULL);
995 gtk_widget_show (text_quotefmt);
996 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
997 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
998 gtk_widget_set_usize(text_quotefmt, -1, 60);
1000 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1002 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1003 gtk_widget_show (vbox_sig);
1004 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1005 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1007 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1008 _("Insert signature automatically"));
1010 hbox1 = gtk_hbox_new (FALSE, 8);
1011 gtk_widget_show (hbox1);
1012 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1014 label_sigsep = gtk_label_new (_("Signature separator"));
1015 gtk_widget_show (label_sigsep);
1016 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1018 entry_sigsep = gtk_entry_new ();
1019 gtk_widget_show (entry_sigsep);
1020 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1021 gtk_widget_set_usize (entry_sigsep, 64, -1);
1024 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1025 gtk_widget_show (vbox_linewrap);
1026 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1028 hbox3 = gtk_hbox_new (FALSE, 8);
1029 gtk_widget_show (hbox3);
1030 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1032 label_linewrap = gtk_label_new (_("Wrap messages at"));
1033 gtk_widget_show (label_linewrap);
1034 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1036 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1037 spinbtn_linewrap = gtk_spin_button_new
1038 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1039 gtk_widget_show (spinbtn_linewrap);
1040 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1041 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1042 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1044 label_linewrap = gtk_label_new (_("characters"));
1045 gtk_widget_show (label_linewrap);
1046 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1048 hbox4 = gtk_hbox_new (FALSE, 32);
1049 gtk_widget_show (hbox4);
1050 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1052 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1054 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1056 compose.checkbtn_quote = checkbtn_quote;
1057 compose.entry_quotemark = entry_quotemark;
1058 compose.text_quotefmt = text_quotefmt;
1059 compose.checkbtn_autosig = checkbtn_autosig;
1060 compose.entry_sigsep = entry_sigsep;
1062 compose.spinbtn_linewrap = spinbtn_linewrap;
1063 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1064 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1065 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1068 static void prefs_display_create(void)
1071 GtkWidget *frame_font;
1073 GtkWidget *label_textfont;
1074 GtkWidget *entry_textfont;
1075 GtkWidget *button_textfont;
1076 GtkWidget *chkbtn_folder_unread;
1077 GtkWidget *chkbtn_transhdr;
1078 GtkWidget *frame_summary;
1080 GtkWidget *chkbtn_swapfrom;
1081 GtkWidget *chkbtn_hscrollbar;
1083 GtkWidget *button_dispitem;
1085 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1086 gtk_widget_show (vbox1);
1087 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1088 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1090 PACK_FRAME(vbox1, frame_font, _("Font"));
1092 table1 = gtk_table_new (1, 3, FALSE);
1093 gtk_widget_show (table1);
1094 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1095 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1096 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1097 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1099 label_textfont = gtk_label_new (_("Text"));
1100 gtk_widget_show (label_textfont);
1101 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1102 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1104 entry_textfont = gtk_entry_new ();
1105 gtk_widget_show (entry_textfont);
1106 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1107 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1109 button_textfont = gtk_button_new_with_label ("... ");
1110 gtk_widget_show (button_textfont);
1111 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1113 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1114 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1116 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1117 gtk_widget_show (vbox2);
1118 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1121 (vbox2, chkbtn_transhdr,
1122 _("Translate header name (such as `From:', `Subject:')"));
1124 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1125 _("Display unread number next to folder name"));
1127 /* ---- Summary ---- */
1129 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1131 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1132 gtk_widget_show (vbox2);
1133 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1134 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1137 (vbox2, chkbtn_swapfrom,
1138 _("Display recipient on `From' column if sender is yourself"));
1140 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1142 hbox1 = gtk_hbox_new (FALSE, 8);
1143 gtk_widget_show (hbox1);
1144 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1146 button_dispitem = gtk_button_new_with_label
1147 (_(" Set display item of summary... "));
1148 gtk_widget_show (button_dispitem);
1149 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1150 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1151 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1154 display.entry_textfont = entry_textfont;
1155 display.button_textfont = button_textfont;
1157 display.chkbtn_folder_unread = chkbtn_folder_unread;
1159 display.chkbtn_transhdr = chkbtn_transhdr;
1160 display.chkbtn_swapfrom = chkbtn_swapfrom;
1161 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1164 static void prefs_message_create(void)
1169 GtkWidget *chkbtn_enablecol;
1170 GtkWidget *button_edit_col;
1171 GtkWidget *chkbtn_mbalnum;
1172 GtkWidget *chkbtn_disphdrpane;
1173 GtkWidget *chkbtn_disphdr;
1174 GtkWidget *hbox_linespc;
1175 GtkWidget *label_linespc;
1176 GtkObject *spinbtn_linespc_adj;
1177 GtkWidget *spinbtn_linespc;
1178 GtkWidget *chkbtn_headspc;
1180 GtkWidget *frame_scr;
1181 GtkWidget *vbox_scr;
1182 GtkWidget *chkbtn_smoothscroll;
1183 GtkWidget *hbox_scr;
1184 GtkWidget *label_scr;
1185 GtkObject *spinbtn_scrollstep_adj;
1186 GtkWidget *spinbtn_scrollstep;
1187 GtkWidget *chkbtn_halfpage;
1189 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1190 gtk_widget_show (vbox1);
1191 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1192 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1194 hbox1 = gtk_hbox_new (FALSE, 8);
1195 gtk_widget_show (hbox1);
1196 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1198 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1199 _("Enable coloration of message"));
1200 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1201 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1204 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1205 gtk_widget_show (button_edit_col);
1206 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1207 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1208 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1210 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1212 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1213 gtk_widget_show (vbox2);
1214 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1217 (vbox2, chkbtn_mbalnum,
1218 _("Display 2-byte alphabet and numeric with 1-byte character"));
1219 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1220 _("Display header pane above message view"));
1221 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1222 _("Display short headers on message view"));
1224 hbox1 = gtk_hbox_new (FALSE, 32);
1225 gtk_widget_show (hbox1);
1226 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1228 hbox_linespc = gtk_hbox_new (FALSE, 8);
1229 gtk_widget_show (hbox1);
1230 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1232 label_linespc = gtk_label_new (_("Line space"));
1233 gtk_widget_show (label_linespc);
1234 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1237 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1238 spinbtn_linespc = gtk_spin_button_new
1239 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1240 gtk_widget_show (spinbtn_linespc);
1241 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1243 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1244 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1246 label_linespc = gtk_label_new (_("pixel(s)"));
1247 gtk_widget_show (label_linespc);
1248 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1251 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1253 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1255 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1256 gtk_widget_show (vbox_scr);
1257 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1258 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1260 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1262 hbox1 = gtk_hbox_new (FALSE, 32);
1263 gtk_widget_show (hbox1);
1264 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1266 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1268 hbox_scr = gtk_hbox_new (FALSE, 8);
1269 gtk_widget_show (hbox_scr);
1270 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1272 label_scr = gtk_label_new (_("Step"));
1273 gtk_widget_show (label_scr);
1274 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1276 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1277 spinbtn_scrollstep = gtk_spin_button_new
1278 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1279 gtk_widget_show (spinbtn_scrollstep);
1280 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1282 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1283 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1286 label_scr = gtk_label_new (_("pixel(s)"));
1287 gtk_widget_show (label_scr);
1288 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1290 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1292 message.chkbtn_enablecol = chkbtn_enablecol;
1293 message.button_edit_col = button_edit_col;
1294 message.chkbtn_mbalnum = chkbtn_mbalnum;
1295 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1296 message.chkbtn_disphdr = chkbtn_disphdr;
1297 message.spinbtn_linespc = spinbtn_linespc;
1298 message.chkbtn_headspc = chkbtn_headspc;
1300 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1301 message.spinbtn_scrollstep = spinbtn_scrollstep;
1302 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1303 message.chkbtn_halfpage = chkbtn_halfpage;
1307 static void prefs_privacy_create(void)
1312 GtkWidget *checkbtn_default_encrypt;
1313 GtkWidget *checkbtn_default_sign;
1314 GtkWidget *checkbtn_auto_check_signatures;
1315 GtkWidget *checkbtn_passphrase_grab;
1317 GtkWidget *menuitem;
1319 GtkWidget *optmenu_menu;
1321 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1322 gtk_widget_show (vbox1);
1323 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1324 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1326 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1327 gtk_widget_show (vbox2);
1328 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1330 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1331 _("Encrypt message by default"));
1333 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1334 _("Sign message by default"));
1336 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1337 _("Automatically check signatures"));
1339 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1340 _("Grab input while entering a passphrase"));
1342 hbox1 = gtk_hbox_new (FALSE, 8);
1343 gtk_widget_show (hbox1);
1344 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1346 /* create default signkey box */
1347 label = gtk_label_new (_("Default Sign Key"));
1348 gtk_widget_show (label);
1349 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1350 optmenu = gtk_option_menu_new ();
1351 gtk_widget_show (optmenu);
1352 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1353 optmenu_menu = gtk_menu_new ();
1355 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1356 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1357 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1358 /* FIXME: disabled because not implemented */
1359 gtk_widget_set_sensitive(optmenu, FALSE);
1361 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1362 privacy.checkbtn_default_sign = checkbtn_default_sign;
1363 privacy.checkbtn_auto_check_signatures
1364 = checkbtn_auto_check_signatures;
1365 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1366 privacy.optmenu_default_signkey = optmenu;
1370 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1374 GtkWidget *menuitem;
1377 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1378 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1379 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1380 g_free(*((gchar **)pparam->data));
1381 *((gchar **)pparam->data) = g_strdup(charset);
1385 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1389 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1391 GtkWidget *menuitem;
1395 g_return_if_fail(optmenu != NULL);
1396 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1398 menu = gtk_option_menu_get_menu(optmenu);
1399 for (cur = GTK_MENU_SHELL(menu)->children;
1400 cur != NULL; cur = cur->next) {
1401 menuitem = GTK_WIDGET(cur->data);
1402 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1403 if (!strcmp(charset, *((gchar **)pparam->data))) {
1404 gtk_option_menu_set_history(optmenu, n);
1410 gtk_option_menu_set_history(optmenu, 0);
1411 prefs_common_charset_set_data_from_optmenu(pparam);
1414 #endif /* USE_GPGME */
1416 static void prefs_interface_create(void)
1421 GtkWidget *checkbtn_emacs;
1422 GtkWidget *checkbtn_openunread;
1423 GtkWidget *checkbtn_openinbox;
1424 GtkWidget *checkbtn_immedexec;
1425 GtkWidget *checkbtn_addaddrbyclick;
1428 GtkWidget *frame_exit;
1429 GtkWidget *vbox_exit;
1431 GtkWidget *checkbtn_confonexit;
1432 GtkWidget *checkbtn_cleanonexit;
1433 GtkWidget *checkbtn_askonclean;
1435 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1436 gtk_widget_show (vbox1);
1437 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1438 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1440 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1441 gtk_widget_show (vbox2);
1442 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1444 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1445 _("Emulate the behavior of mouse operation of\n"
1446 "Emacs-based mailer"));
1447 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1451 (vbox2, checkbtn_openunread,
1452 _("Open first unread message when entering a folder"));
1455 (vbox2, checkbtn_openinbox,
1456 _("Go to inbox after receiving new mail"));
1458 vbox3 = gtk_vbox_new (FALSE, 0);
1459 gtk_widget_show (vbox3);
1460 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1463 (vbox3, checkbtn_immedexec,
1464 _("Execute immediately when moving or deleting messages"));
1466 hbox1 = gtk_hbox_new (FALSE, 0);
1467 gtk_widget_show (hbox1);
1468 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1470 label = gtk_label_new
1471 (_("(Messages will be just marked till execution\n"
1472 " if this is turned off)"));
1473 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1474 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1477 (vbox2, checkbtn_addaddrbyclick,
1478 _("Add address to destination when double-clicked"));
1480 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1482 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1483 gtk_widget_show (vbox_exit);
1484 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1485 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1487 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1488 _("Confirm on exit"));
1490 hbox1 = gtk_hbox_new (FALSE, 32);
1491 gtk_widget_show (hbox1);
1492 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1494 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1495 _("Empty trash on exit"));
1496 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1497 _("Ask before emptying"));
1498 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1500 interface.checkbtn_emacs = checkbtn_emacs;
1501 interface.checkbtn_openunread = checkbtn_openunread;
1502 interface.checkbtn_openinbox = checkbtn_openinbox;
1503 interface.checkbtn_immedexec = checkbtn_immedexec;
1504 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1505 interface.checkbtn_confonexit = checkbtn_confonexit;
1506 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1507 interface.checkbtn_askonclean = checkbtn_askonclean;
1510 static void prefs_other_create(void)
1515 GtkWidget *uri_frame;
1516 GtkWidget *uri_label;
1517 GtkWidget *uri_combo;
1518 GtkWidget *uri_entry;
1520 GtkWidget *print_frame;
1521 GtkWidget *printcmd_label;
1522 GtkWidget *printcmd_entry;
1524 GtkWidget *exteditor_frame;
1525 GtkWidget *exteditor_label;
1526 GtkWidget *exteditor_combo;
1527 GtkWidget *exteditor_entry;
1529 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1530 gtk_widget_show (vbox1);
1531 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1532 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1534 PACK_FRAME(vbox1, uri_frame,
1535 _("External Web browser (%s will be replaced with URI)"));
1537 hbox1 = gtk_hbox_new (FALSE, 8);
1538 gtk_widget_show (hbox1);
1539 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1540 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1542 uri_label = gtk_label_new (_("Command"));
1543 gtk_widget_show(uri_label);
1544 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1546 uri_combo = gtk_combo_new ();
1547 gtk_widget_show (uri_combo);
1548 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1549 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1550 "netscape -remote 'openURL(%s,raise)'",
1551 "gnome-moz-remote --raise --newwin '%s'",
1552 "kterm -e w3m '%s'",
1553 "kterm -e lynx '%s'",
1556 uri_entry = GTK_COMBO (uri_combo)->entry;
1558 PACK_FRAME(vbox1, print_frame,
1559 _("Printing (%s will be replaced with file name)"));
1561 hbox1 = gtk_hbox_new (FALSE, 8);
1562 gtk_widget_show (hbox1);
1563 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1564 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1566 printcmd_label = gtk_label_new (_("Command"));
1567 gtk_widget_show (printcmd_label);
1568 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1570 printcmd_entry = gtk_entry_new ();
1571 gtk_widget_show (printcmd_entry);
1572 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1574 PACK_FRAME(vbox1, exteditor_frame,
1575 _("External editor (%s will be replaced with file name)"));
1577 hbox1 = gtk_hbox_new (FALSE, 8);
1578 gtk_widget_show (hbox1);
1579 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1580 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1582 exteditor_label = gtk_label_new (_("Command"));
1583 gtk_widget_show (exteditor_label);
1584 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1586 exteditor_combo = gtk_combo_new ();
1587 gtk_widget_show (exteditor_combo);
1588 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1589 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1591 "mgedit --no-fork %s",
1597 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1599 other.uri_combo = uri_combo;
1600 other.uri_entry = uri_entry;
1601 other.printcmd_entry = printcmd_entry;
1603 other.exteditor_combo = exteditor_combo;
1604 other.exteditor_entry = exteditor_entry;
1607 void prefs_quote_colors_dialog(void)
1609 if (!quote_color_win)
1610 prefs_quote_colors_dialog_create();
1611 gtk_widget_show(quote_color_win);
1614 gtk_widget_hide(quote_color_win);
1616 textview_update_message_colors();
1619 static void prefs_quote_colors_dialog_create(void)
1624 GtkWidget *quotelevel1_label;
1625 GtkWidget *quotelevel2_label;
1626 GtkWidget *quotelevel3_label;
1627 GtkWidget *uri_label;
1630 //GtkWidget *cancel_btn;
1631 GtkWidget *recycle_colors_btn;
1632 GtkWidget *frame_colors;
1634 window = gtk_window_new(GTK_WINDOW_DIALOG);
1635 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1636 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1637 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1638 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1639 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1641 vbox = gtk_vbox_new (FALSE, VSPACING);
1642 gtk_container_add (GTK_CONTAINER (window), vbox);
1643 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1644 PACK_FRAME(vbox, frame_colors, _("Colors"));
1646 table = gtk_table_new (4, 2, FALSE);
1647 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1648 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1649 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1650 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1652 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1654 color_buttons.quote_level1_btn = gtk_button_new();
1655 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1656 (GtkAttachOptions) (0),
1657 (GtkAttachOptions) (0), 0, 0);
1658 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1659 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1661 color_buttons.quote_level2_btn = gtk_button_new();
1662 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1663 (GtkAttachOptions) (0),
1664 (GtkAttachOptions) (0), 0, 0);
1665 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1666 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1668 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1669 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1670 (GtkAttachOptions) (0),
1671 (GtkAttachOptions) (0), 0, 0);
1672 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1673 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1675 color_buttons.uri_btn = gtk_button_new_with_label ("");
1676 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1677 (GtkAttachOptions) (0),
1678 (GtkAttachOptions) (0), 0, 0);
1679 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1680 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1682 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1683 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1684 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1685 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1686 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1688 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1689 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1690 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1691 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1692 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1694 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1695 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1696 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1697 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1698 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1700 uri_label = gtk_label_new (_("URI link"));
1701 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1702 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1703 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1704 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1706 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1707 _("Recycle quote colors"));
1709 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1710 NULL, NULL, NULL, NULL);
1711 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1713 gtk_widget_grab_default(ok_btn);
1714 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1715 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1716 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1717 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1719 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1720 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1721 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1722 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1723 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1724 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1725 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1726 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1727 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1728 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1730 /* show message button colors and recycle options */
1731 set_button_bg_color(color_buttons.quote_level1_btn,
1732 prefs_common.quote_level1_col);
1733 set_button_bg_color(color_buttons.quote_level2_btn,
1734 prefs_common.quote_level2_col);
1735 set_button_bg_color(color_buttons.quote_level3_btn,
1736 prefs_common.quote_level3_col);
1737 set_button_bg_color(color_buttons.uri_btn,
1738 prefs_common.uri_col);
1739 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1740 prefs_common.recycle_quote_colors);
1742 gtk_widget_show_all(vbox);
1743 quote_color_win = window;
1746 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1748 gchar *type = (gchar *)data;
1749 gchar *title = NULL;
1750 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1752 GtkColorSelectionDialog *dialog;
1754 if(g_strcasecmp(type, "LEVEL1") == 0) {
1755 title = _("Pick color for quotation level 1");
1756 rgbvalue = prefs_common.quote_level1_col;
1757 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1758 title = _("Pick color for quotation level 2");
1759 rgbvalue = prefs_common.quote_level2_col;
1760 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1761 title = _("Pick color for quotation level 3");
1762 rgbvalue = prefs_common.quote_level3_col;
1763 } else if(g_strcasecmp(type, "URI") == 0) {
1764 title = _("Pick color for URI");
1765 rgbvalue = prefs_common.uri_col;
1766 } else { /* Should never be called */
1767 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1771 color_dialog = gtk_color_selection_dialog_new(title);
1772 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1773 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1774 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1776 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1777 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1778 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1779 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1781 /* preselect the previous color in the color selection dialog */
1782 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1783 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1784 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1785 dialog = (GtkColorSelectionDialog *)color_dialog;
1786 gtk_color_selection_set_color
1787 ((GtkColorSelection *)dialog->colorsel, color);
1789 gtk_widget_show(color_dialog);
1792 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1794 GtkColorSelection *colorsel = (GtkColorSelection *)
1795 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1797 gint red, green, blue, rgbvalue;
1798 gchar *type = (gchar *)data;
1800 gtk_color_selection_get_color(colorsel, color);
1802 red = (gint) (color[0] * 255.0);
1803 green = (gint) (color[1] * 255.0);
1804 blue = (gint) (color[2] * 255.0);
1805 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1808 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1809 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1810 fprintf(stderr, "Color is %x\n", rgbvalue);
1813 if (g_strcasecmp(type, "LEVEL1") == 0) {
1814 prefs_common.quote_level1_col = rgbvalue;
1815 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1816 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1817 prefs_common.quote_level2_col = rgbvalue;
1818 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1819 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1820 prefs_common.quote_level3_col = rgbvalue;
1821 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1822 } else if (g_strcasecmp(type, "URI") == 0) {
1823 prefs_common.uri_col = rgbvalue;
1824 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1826 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1828 gtk_widget_hide(color_dialog);
1831 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1833 gtk_widget_hide(color_dialog);
1836 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1841 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1842 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1843 newstyle->bg[GTK_STATE_NORMAL] = color;
1844 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1845 newstyle->bg[GTK_STATE_ACTIVE] = color;
1847 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1850 static void prefs_enable_message_color_toggled(void)
1854 is_active = gtk_toggle_button_get_active
1855 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1856 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1857 prefs_common.enable_color = is_active;
1860 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1864 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1865 prefs_common.recycle_quote_colors = is_active;
1868 static void prefs_quote_description(void)
1870 if (!quote_desc_win)
1871 prefs_quote_description_create();
1873 gtk_widget_show(quote_desc_win);
1875 gtk_widget_hide(quote_desc_win);
1878 static void prefs_quote_description_create(void)
1886 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1887 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1888 _("Description of symbols"));
1889 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1890 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1891 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1892 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1894 vbox = gtk_vbox_new(FALSE, 8);
1895 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1897 hbox = gtk_hbox_new(FALSE, 4);
1898 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1900 label = gtk_label_new
1911 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1912 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1914 label = gtk_label_new
1917 "Full Name of Sender\n"
1918 "First Name of Sender\n"
1919 "Initial of Sender\n"
1925 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1926 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1928 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1929 NULL, NULL, NULL, NULL);
1930 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1932 gtk_widget_grab_default(ok_btn);
1933 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1934 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1936 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
1937 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1939 gtk_widget_show_all(vbox);
1942 /* functions for setting items of SummaryView */
1944 static struct _SummaryDisplayItem
1948 GtkWidget *chkbtn[N_SUMMARY_COLS];
1951 GtkWidget *cancel_btn;
1954 #define SET_ACTIVE(column, var) \
1955 gtk_toggle_button_set_active \
1956 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
1958 #define GET_ACTIVE(column, var) \
1959 prefs_common.var = gtk_toggle_button_get_active \
1960 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
1962 void prefs_summary_display_item_set(void)
1964 static gboolean cancelled;
1966 if (!summarydispitem.window)
1967 prefs_summary_display_item_dialog_create(&cancelled);
1968 gtk_widget_grab_focus(summarydispitem.ok_btn);
1969 gtk_widget_show(summarydispitem.window);
1970 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
1972 SET_ACTIVE(S_COL_MARK, show_mark);
1973 SET_ACTIVE(S_COL_UNREAD, show_unread);
1974 SET_ACTIVE(S_COL_MIME, show_mime);
1975 SET_ACTIVE(S_COL_NUMBER, show_number);
1976 SET_ACTIVE(S_COL_SIZE, show_size);
1977 SET_ACTIVE(S_COL_DATE, show_date);
1978 SET_ACTIVE(S_COL_FROM, show_from);
1979 SET_ACTIVE(S_COL_SUBJECT, show_subject);
1982 gtk_widget_hide(summarydispitem.window);
1984 if (cancelled != TRUE) {
1985 GET_ACTIVE(S_COL_MARK, show_mark);
1986 GET_ACTIVE(S_COL_UNREAD, show_unread);
1987 GET_ACTIVE(S_COL_MIME, show_mime);
1988 GET_ACTIVE(S_COL_NUMBER, show_number);
1989 GET_ACTIVE(S_COL_SIZE, show_size);
1990 GET_ACTIVE(S_COL_DATE, show_date);
1991 GET_ACTIVE(S_COL_FROM, show_from);
1992 GET_ACTIVE(S_COL_SUBJECT, show_subject);
1994 main_window_reflect_prefs_all();
1998 #define SET_CHECK_BUTTON(column, label) \
2000 summarydispitem.chkbtn[column] = \
2001 gtk_check_button_new_with_label(label); \
2002 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2003 summarydispitem.chkbtn[column], \
2007 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2011 GtkWidget *chkbtn_vbox;
2014 GtkWidget *cancel_btn;
2016 window = gtk_window_new(GTK_WINDOW_DIALOG);
2017 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2018 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2019 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2020 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2021 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2022 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2023 GTK_SIGNAL_FUNC(display_item_delete_event),
2025 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2026 GTK_SIGNAL_FUNC(display_item_key_pressed),
2029 vbox = gtk_vbox_new(FALSE, 8);
2030 gtk_container_add(GTK_CONTAINER(window), vbox);
2032 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2033 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2035 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2036 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2037 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2038 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2039 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2040 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2041 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2042 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2044 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2045 &cancel_btn, _("Cancel"), NULL, NULL);
2046 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2047 gtk_widget_grab_default(ok_btn);
2049 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2050 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2051 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2052 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2054 gtk_widget_show_all(vbox);
2056 summarydispitem.window = window;
2057 summarydispitem.ok_btn = ok_btn;
2058 summarydispitem.cancel_btn = cancel_btn;
2061 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2067 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2073 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2074 gboolean *cancelled)
2082 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2083 gboolean *cancelled)
2085 if (event && event->keyval == GDK_Escape) {
2091 static void prefs_font_select(GtkButton *button)
2093 if (!font_sel_win) {
2094 font_sel_win = gtk_font_selection_dialog_new
2095 (_("Font selection"));
2096 gtk_window_position(GTK_WINDOW(font_sel_win),
2097 GTK_WIN_POS_CENTER);
2098 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2099 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2102 (GTK_OBJECT(font_sel_win), "key_press_event",
2103 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2106 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2108 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2110 gtk_signal_connect_object
2111 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2113 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2114 GTK_OBJECT(font_sel_win));
2117 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2118 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2119 gtk_widget_grab_focus
2120 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2121 gtk_widget_show(font_sel_win);
2124 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2128 if (event && event->keyval == GDK_Escape)
2129 gtk_widget_hide(font_sel_win);
2132 static void prefs_font_selection_ok(GtkButton *button)
2136 fontname = gtk_font_selection_dialog_get_font_name
2137 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2140 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2144 gtk_widget_hide(font_sel_win);
2147 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2150 GtkWidget *menuitem;
2153 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2154 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2155 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2156 g_free(*((gchar **)pparam->data));
2157 *((gchar **)pparam->data) = g_strdup(charset);
2160 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2163 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2165 GtkWidget *menuitem;
2169 g_return_if_fail(optmenu != NULL);
2170 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2172 menu = gtk_option_menu_get_menu(optmenu);
2173 for (cur = GTK_MENU_SHELL(menu)->children;
2174 cur != NULL; cur = cur->next) {
2175 menuitem = GTK_WIDGET(cur->data);
2176 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2177 if (!strcmp(charset, *((gchar **)pparam->data))) {
2178 gtk_option_menu_set_history(optmenu, n);
2184 gtk_option_menu_set_history(optmenu, 0);
2185 prefs_common_charset_set_data_from_optmenu(pparam);
2188 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2191 if (event && event->keyval == GDK_Escape)
2192 gtk_widget_hide(dialog.window);
2195 static void prefs_common_ok(GtkButton *button)
2197 prefs_common_apply(button);
2198 gtk_widget_hide(dialog.window);
2199 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2200 gtk_widget_hide(quote_desc_win);
2203 static void prefs_common_apply(GtkButton *button)
2205 prefs_set_data_from_dialog(param);
2206 main_window_reflect_prefs_all();
2207 prefs_common_save_config();