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_warnqueued;
144 GtkWidget *checkbtn_addaddrbyclick;
147 static struct Other {
148 GtkWidget *uri_combo;
149 GtkWidget *uri_entry;
150 GtkWidget *printcmd_entry;
151 GtkWidget *exteditor_combo;
152 GtkWidget *exteditor_entry;
155 static struct MessageColorButtons {
156 GtkWidget *quote_level1_btn;
157 GtkWidget *quote_level2_btn;
158 GtkWidget *quote_level3_btn;
162 static GtkWidget *quote_desc_win;
163 static GtkWidget *font_sel_win;
164 static GtkWidget *quote_color_win;
165 static GtkWidget *color_dialog;
167 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
168 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
170 static void prefs_common_default_signkey_set_data_from_optmenu
172 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
176 parameter name, default value, pointer to the prefs variable, data type,
177 pointer to the widget pointer,
178 pointer to the function for data setting,
179 pointer to the function for widget setting
182 static PrefParam param[] = {
184 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
185 &receive.checkbtn_incext,
186 prefs_set_data_from_toggle, prefs_set_toggle},
187 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
188 &receive.entry_incext,
189 prefs_set_data_from_entry, prefs_set_entry},
191 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
192 &receive.checkbtn_local,
193 prefs_set_data_from_toggle, prefs_set_toggle},
194 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
195 &receive.checkbtn_filter_on_inc,
196 prefs_set_data_from_toggle, prefs_set_toggle},
197 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
198 &receive.entry_spool,
199 prefs_set_data_from_entry, prefs_set_entry},
201 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
202 &receive.checkbtn_autochk,
203 prefs_set_data_from_toggle, prefs_set_toggle},
204 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
205 &receive.spinbtn_autochk,
206 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
207 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
208 &receive.checkbtn_chkonstartup,
209 prefs_set_data_from_toggle, prefs_set_toggle},
211 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
212 &receive.spinbtn_maxarticle,
213 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
216 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
217 &send.checkbtn_sendext,
218 prefs_set_data_from_toggle, prefs_set_toggle},
219 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
220 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
221 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
222 &send.checkbtn_savemsg,
223 prefs_set_data_from_toggle, prefs_set_toggle},
224 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
225 &send.checkbtn_queuemsg,
226 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
229 &send.optmenu_charset,
230 prefs_common_charset_set_data_from_optmenu,
231 prefs_common_charset_set_optmenu},
234 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
235 &compose.checkbtn_quote,
236 prefs_set_data_from_toggle, prefs_set_toggle},
237 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
238 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
239 {"quote_format", "On %d\\n%f wrote:\\n\\n",
240 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
241 prefs_set_data_from_text, prefs_set_text},
243 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
244 &compose.checkbtn_autosig,
245 prefs_set_data_from_toggle, prefs_set_toggle},
246 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
247 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
249 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
250 &compose.spinbtn_linewrap,
251 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
252 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
253 &compose.checkbtn_wrapquote,
254 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"linewrap_before_sending", "FALSE",
256 &prefs_common.linewrap_at_send, P_BOOL,
257 &compose.checkbtn_wrapatsend,
258 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
264 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
266 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
267 &prefs_common.textfont, P_STRING,
268 &display.entry_textfont,
269 prefs_set_data_from_entry, prefs_set_entry},
271 {"display_folder_unread_num", "TRUE",
272 &prefs_common.display_folder_unread, P_BOOL,
273 &display.chkbtn_folder_unread,
274 prefs_set_data_from_toggle, prefs_set_toggle},
276 /* Display: Summary View */
277 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
278 &display.chkbtn_transhdr,
279 prefs_set_data_from_toggle, prefs_set_toggle},
280 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
281 &display.chkbtn_swapfrom,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
284 &display.chkbtn_hscrollbar,
285 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
289 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
291 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
294 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
296 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
298 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
300 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
302 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
304 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
306 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
308 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
312 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
314 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
316 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
318 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
320 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
322 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
324 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
326 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
328 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
330 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
332 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
334 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
336 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
338 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
340 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
342 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
343 P_INT, NULL, NULL, NULL},
344 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
346 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
348 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
350 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
352 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
354 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
356 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
358 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
360 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
362 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
364 {"compose_width", "600", &prefs_common.compose_width, P_INT,
366 {"compose_height", "560", &prefs_common.compose_height, P_INT,
370 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
371 &message.chkbtn_enablecol,
372 prefs_set_data_from_toggle, prefs_set_toggle},
374 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
376 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
378 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
380 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
382 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
384 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
385 P_BOOL, NULL, NULL, NULL},
387 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
388 &message.chkbtn_mbalnum,
389 prefs_set_data_from_toggle, prefs_set_toggle},
390 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
391 P_BOOL, &message.chkbtn_disphdrpane,
392 prefs_set_data_from_toggle, prefs_set_toggle},
393 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
394 &message.chkbtn_disphdr,
395 prefs_set_data_from_toggle, prefs_set_toggle},
396 {"line_space", "2", &prefs_common.line_space, P_INT,
397 &message.spinbtn_linespc,
398 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
399 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
400 &message.chkbtn_headspc,
401 prefs_set_data_from_toggle, prefs_set_toggle},
403 {"enable_smooth_scroll", "FALSE",
404 &prefs_common.enable_smooth_scroll, P_BOOL,
405 &message.chkbtn_smoothscroll,
406 prefs_set_data_from_toggle, prefs_set_toggle},
407 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
408 &message.spinbtn_scrollstep,
409 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
410 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
411 &message.chkbtn_halfpage,
412 prefs_set_data_from_toggle, prefs_set_toggle},
415 {"mime_image_viewer", "display '%s'",
416 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
417 {"mime_audio_player", "play '%s'",
418 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
422 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
423 &privacy.checkbtn_default_encrypt,
424 prefs_set_data_from_toggle, prefs_set_toggle},
425 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
426 &privacy.checkbtn_default_sign,
427 prefs_set_data_from_toggle, prefs_set_toggle},
428 {"auto_check_signatures", "TRUE",
429 &prefs_common.auto_check_signatures, P_BOOL,
430 &privacy.checkbtn_auto_check_signatures,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
433 &privacy.checkbtn_passphrase_grab,
434 prefs_set_data_from_toggle, prefs_set_toggle},
435 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
436 &privacy.optmenu_default_signkey,
437 prefs_common_default_signkey_set_data_from_optmenu,
438 prefs_common_default_signkey_set_optmenu},
439 #endif /* USE_GPGME */
442 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
444 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
447 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
448 &interface.checkbtn_emacs,
449 prefs_set_data_from_toggle, prefs_set_toggle},
450 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
451 P_BOOL, &interface.checkbtn_openunread,
452 prefs_set_data_from_toggle, prefs_set_toggle},
453 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
454 P_BOOL, &interface.checkbtn_openinbox,
455 prefs_set_data_from_toggle, prefs_set_toggle},
456 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
457 &interface.checkbtn_immedexec,
458 prefs_set_data_from_toggle, prefs_set_toggle},
459 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
460 P_BOOL, &interface.checkbtn_addaddrbyclick,
461 prefs_set_data_from_toggle, prefs_set_toggle},
463 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
464 &interface.checkbtn_confonexit,
465 prefs_set_data_from_toggle, prefs_set_toggle},
466 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
467 &interface.checkbtn_cleanonexit,
468 prefs_set_data_from_toggle, prefs_set_toggle},
469 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
470 &interface.checkbtn_askonclean,
471 prefs_set_data_from_toggle, prefs_set_toggle},
472 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
473 P_BOOL, &interface.checkbtn_warnqueued,
474 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
478 &prefs_common.uri_cmd, P_STRING,
479 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
480 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
481 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
482 {"ext_editor_command", "gedit %s",
483 &prefs_common.ext_editor_cmd, P_STRING,
484 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
486 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
490 #define VSPACING_NARROW 4
491 #define VBOX_BORDER 16
492 #define DEFAULT_ENTRY_WIDTH 80
493 #define PREFSBUFSIZE 1024
495 /* widget creating functions */
496 static void prefs_common_create (void);
497 static void prefs_receive_create (void);
498 static void prefs_send_create (void);
499 static void prefs_compose_create (void);
500 static void prefs_display_create (void);
501 static void prefs_message_create (void);
503 static void prefs_privacy_create (void);
505 static void prefs_interface_create (void);
506 static void prefs_other_create (void);
508 static void prefs_quote_description (void);
509 static void prefs_quote_description_create (void);
510 static void prefs_quote_colors_dialog (void);
511 static void prefs_quote_colors_dialog_create (void);
512 static void quote_color_set_dialog (GtkWidget *widget,
514 static void quote_colors_set_dialog_ok (GtkWidget *widget,
516 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
518 static void set_button_bg_color (GtkWidget *widget,
520 static void prefs_enable_message_color_toggled (void);
521 static void prefs_recycle_colors_toggled (GtkWidget *widget);
523 /* functions for setting items of SummaryView */
524 static void prefs_summary_display_item_dialog_create
525 (gboolean *cancelled);
526 static void display_item_ok (GtkWidget *widget,
527 gboolean *cancelled);
528 static void display_item_cancel (GtkWidget *widget,
529 gboolean *cancelled);
530 static gint display_item_delete_event (GtkWidget *widget,
532 gboolean *cancelled);
533 static void display_item_key_pressed (GtkWidget *widget,
535 gboolean *cancelled);
537 static void prefs_font_select (GtkButton *button);
538 static void prefs_font_selection_key_pressed (GtkWidget *widget,
541 static void prefs_font_selection_ok (GtkButton *button);
543 static void prefs_common_key_pressed (GtkWidget *widget,
546 static void prefs_common_ok (GtkButton *button);
547 static void prefs_common_apply (GtkButton *button);
549 void prefs_common_read_config(void)
551 prefs_read_config(param, "Common", COMMON_RC);
554 void prefs_common_save_config(void)
556 prefs_save_config(param, "Common", COMMON_RC);
559 void prefs_common_open(void)
561 if (!dialog.window) {
562 prefs_common_create();
565 manage_window_set_transient(GTK_WINDOW(dialog.window));
566 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
567 gtk_widget_grab_focus(dialog.ok_btn);
569 prefs_set_dialog(param);
571 gtk_widget_show(dialog.window);
574 static void prefs_common_create(void)
578 debug_print(_("Creating common preferences window...\n"));
580 prefs_dialog_create(&dialog);
581 gtk_window_set_title (GTK_WINDOW(dialog.window),
582 _("Common Preferences"));
583 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
584 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
585 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
586 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
587 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
588 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
589 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
590 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
591 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
592 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
593 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
594 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
595 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
596 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
597 GTK_OBJECT(dialog.window));
599 /* create all widgets on notebook */
600 prefs_receive_create();
601 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
603 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
604 prefs_compose_create();
605 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
606 prefs_display_create();
607 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
608 prefs_message_create();
609 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
611 prefs_privacy_create();
612 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
614 prefs_interface_create();
615 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
616 prefs_other_create();
617 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
619 gtk_widget_show_all(dialog.window);
622 static void prefs_receive_create(void)
626 GtkWidget *frame_incext;
627 GtkWidget *checkbtn_incext;
629 GtkWidget *label_incext;
630 GtkWidget *entry_incext;
631 GtkWidget *button_incext;
633 GtkWidget *frame_spool;
634 GtkWidget *checkbtn_local;
635 GtkWidget *checkbtn_filter_on_inc;
636 GtkWidget *label_spool;
637 GtkWidget *entry_spool;
639 GtkWidget *hbox_autochk;
640 GtkWidget *checkbtn_autochk;
641 GtkWidget *label_autochk1;
642 GtkObject *spinbtn_autochk_adj;
643 GtkWidget *spinbtn_autochk;
644 GtkWidget *label_autochk2;
645 GtkWidget *checkbtn_chkonstartup;
647 GtkWidget *frame_news;
648 GtkWidget *label_maxarticle;
649 GtkWidget *spinbtn_maxarticle;
650 GtkObject *spinbtn_maxarticle_adj;
652 vbox1 = gtk_vbox_new (FALSE, VSPACING);
653 gtk_widget_show (vbox1);
654 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
655 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
657 PACK_FRAME(vbox1, frame_incext, _("External program"));
659 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
660 gtk_widget_show (vbox2);
661 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
662 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
664 /* Use of external incorporation program */
665 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
666 _("Use external program for incorporation"));
668 hbox = gtk_hbox_new (FALSE, 8);
669 gtk_widget_show (hbox);
670 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
671 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
673 label_incext = gtk_label_new (_("Program path"));
674 gtk_widget_show (label_incext);
675 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
677 entry_incext = gtk_entry_new ();
678 gtk_widget_show (entry_incext);
679 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
681 button_incext = gtk_button_new_with_label ("... ");
682 gtk_widget_show (button_incext);
683 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
685 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
687 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
688 gtk_widget_show (vbox2);
689 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
690 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
692 hbox = gtk_hbox_new (FALSE, 32);
693 gtk_widget_show (hbox);
694 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
696 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
697 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
698 _("Filter on incorporation"));
699 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
701 hbox = gtk_hbox_new (FALSE, 8);
702 gtk_widget_show (hbox);
703 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
704 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
706 label_spool = gtk_label_new (_("Spool directory"));
707 gtk_widget_show (label_spool);
708 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
710 entry_spool = gtk_entry_new ();
711 gtk_widget_show (entry_spool);
712 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
714 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
715 gtk_widget_show (vbox2);
716 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
719 hbox_autochk = gtk_hbox_new (FALSE, 8);
720 gtk_widget_show (hbox_autochk);
721 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
723 gtk_widget_set_sensitive(hbox_autochk, FALSE);
725 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
726 _("Auto-check new mail"));
728 label_autochk1 = gtk_label_new (_("each"));
729 gtk_widget_show (label_autochk1);
730 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
732 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
733 spinbtn_autochk = gtk_spin_button_new
734 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
735 gtk_widget_show (spinbtn_autochk);
736 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
737 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
738 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
740 label_autochk2 = gtk_label_new (_("minute(s)"));
741 gtk_widget_show (label_autochk2);
742 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
744 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
745 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
746 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
748 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
749 _("Check new mail on startup"));
751 PACK_FRAME(vbox1, frame_news, _("News"));
753 hbox = gtk_hbox_new (FALSE, 8);
754 gtk_widget_show (hbox);
755 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
756 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
758 label_maxarticle = gtk_label_new
759 (_("Maximum article number to download\n"
760 "(unlimited if 0 is specified)"));
761 gtk_widget_show (label_maxarticle);
762 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
763 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
765 spinbtn_maxarticle_adj =
766 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
767 spinbtn_maxarticle = gtk_spin_button_new
768 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
769 gtk_widget_show (spinbtn_maxarticle);
770 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
772 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
773 gtk_spin_button_set_numeric
774 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
776 receive.checkbtn_incext = checkbtn_incext;
777 receive.entry_incext = entry_incext;
778 receive.button_incext = button_incext;
780 receive.checkbtn_local = checkbtn_local;
781 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
782 receive.entry_spool = entry_spool;
784 receive.checkbtn_autochk = checkbtn_autochk;
785 receive.spinbtn_autochk = spinbtn_autochk;
786 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
788 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
790 receive.spinbtn_maxarticle = spinbtn_maxarticle;
791 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
794 static void prefs_send_create(void)
798 GtkWidget *frame_sendext;
799 GtkWidget *vbox_sendext;
800 GtkWidget *checkbtn_sendext;
802 GtkWidget *label_sendext;
803 GtkWidget *entry_sendext;
804 GtkWidget *button_sendext;
805 GtkWidget *checkbtn_savemsg;
806 GtkWidget *checkbtn_queuemsg;
807 GtkWidget *label_outcharset;
809 GtkWidget *optmenu_menu;
812 vbox1 = gtk_vbox_new (FALSE, VSPACING);
813 gtk_widget_show (vbox1);
814 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
815 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
817 PACK_FRAME(vbox1, frame_sendext, _("External program"));
819 gtk_widget_set_sensitive(frame_sendext, FALSE);
821 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
822 gtk_widget_show (vbox_sendext);
823 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
824 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
826 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
827 _("Use external program for sending"));
829 hbox1 = gtk_hbox_new (FALSE, 8);
830 gtk_widget_show (hbox1);
831 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
832 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
834 label_sendext = gtk_label_new (_("Program path"));
835 gtk_widget_show (label_sendext);
836 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
838 entry_sendext = gtk_entry_new ();
839 gtk_widget_show (entry_sendext);
840 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
842 button_sendext = gtk_button_new_with_label ("... ");
843 gtk_widget_show (button_sendext);
844 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
846 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
847 gtk_widget_show (vbox2);
848 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
850 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
851 _("Save sent message to outbox"));
852 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
853 _("Queue message that failed to send"));
855 hbox1 = gtk_hbox_new (FALSE, 8);
856 gtk_widget_show (hbox1);
857 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
859 label_outcharset = gtk_label_new (_("Outgoing codeset"));
860 gtk_widget_show (label_outcharset);
861 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
863 optmenu = gtk_option_menu_new ();
864 gtk_widget_show (optmenu);
865 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
867 optmenu_menu = gtk_menu_new ();
869 #define SET_MENUITEM(str, charset) \
871 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
874 SET_MENUITEM(_("Automatic"), CS_AUTO);
875 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
877 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
879 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
881 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
882 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
883 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
884 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
885 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
886 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
887 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
888 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
889 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
890 #endif /* HAVE_LIBJCONV */
891 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
893 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
894 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
897 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
898 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
900 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
901 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
903 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
904 #endif /* HAVE_LIBJCONV */
906 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
908 send.checkbtn_sendext = checkbtn_sendext;
909 send.entry_sendext = entry_sendext;
910 send.button_sendext = button_sendext;
912 send.checkbtn_savemsg = checkbtn_savemsg;
913 send.checkbtn_queuemsg = checkbtn_queuemsg;
915 send.optmenu_charset = optmenu;
918 static void prefs_compose_create(void)
921 GtkWidget *frame_quote;
922 GtkWidget *vbox_quote;
923 GtkWidget *checkbtn_quote;
925 GtkWidget *label_quotemark;
926 GtkWidget *entry_quotemark;
928 GtkWidget *label_quotefmt;
929 GtkWidget *btn_quotedesc;
930 GtkWidget *scrolledwin_quotefmt;
931 GtkWidget *text_quotefmt;
933 GtkWidget *frame_sig;
935 GtkWidget *checkbtn_autosig;
936 GtkWidget *label_sigsep;
937 GtkWidget *entry_sigsep;
939 GtkWidget *vbox_linewrap;
942 GtkWidget *label_linewrap;
943 GtkObject *spinbtn_linewrap_adj;
944 GtkWidget *spinbtn_linewrap;
945 GtkWidget *checkbtn_wrapquote;
946 GtkWidget *checkbtn_wrapatsend;
948 vbox1 = gtk_vbox_new (FALSE, VSPACING);
949 gtk_widget_show (vbox1);
950 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
951 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
953 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
955 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
956 gtk_widget_show (vbox_quote);
957 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
958 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
960 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
961 _("Quote message when replying"));
963 hbox1 = gtk_hbox_new (FALSE, 8);
964 gtk_widget_show (hbox1);
965 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
967 label_quotemark = gtk_label_new (_("Quotation mark"));
968 gtk_widget_show (label_quotemark);
969 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
971 entry_quotemark = gtk_entry_new ();
972 gtk_widget_show (entry_quotemark);
973 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
974 gtk_widget_set_usize (entry_quotemark, 64, -1);
976 hbox2 = gtk_hbox_new (FALSE, 0);
977 gtk_widget_show (hbox2);
978 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
980 label_quotefmt = gtk_label_new (_("Quotation format:"));
981 gtk_widget_show (label_quotefmt);
982 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
985 gtk_button_new_with_label (_(" Description of symbols "));
986 gtk_widget_show (btn_quotedesc);
987 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
988 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
989 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
991 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
992 gtk_widget_show (scrolledwin_quotefmt);
993 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
994 gtk_scrolled_window_set_policy
995 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
996 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
998 text_quotefmt = gtk_text_new (NULL, NULL);
999 gtk_widget_show (text_quotefmt);
1000 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1001 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1002 gtk_widget_set_usize(text_quotefmt, -1, 60);
1004 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1006 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1007 gtk_widget_show (vbox_sig);
1008 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1009 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1011 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1012 _("Insert signature automatically"));
1014 hbox1 = gtk_hbox_new (FALSE, 8);
1015 gtk_widget_show (hbox1);
1016 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1018 label_sigsep = gtk_label_new (_("Signature separator"));
1019 gtk_widget_show (label_sigsep);
1020 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1022 entry_sigsep = gtk_entry_new ();
1023 gtk_widget_show (entry_sigsep);
1024 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1025 gtk_widget_set_usize (entry_sigsep, 64, -1);
1028 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1029 gtk_widget_show (vbox_linewrap);
1030 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1032 hbox3 = gtk_hbox_new (FALSE, 8);
1033 gtk_widget_show (hbox3);
1034 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1036 label_linewrap = gtk_label_new (_("Wrap messages at"));
1037 gtk_widget_show (label_linewrap);
1038 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1040 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1041 spinbtn_linewrap = gtk_spin_button_new
1042 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1043 gtk_widget_show (spinbtn_linewrap);
1044 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1045 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1046 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1048 label_linewrap = gtk_label_new (_("characters"));
1049 gtk_widget_show (label_linewrap);
1050 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1052 hbox4 = gtk_hbox_new (FALSE, 32);
1053 gtk_widget_show (hbox4);
1054 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1056 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1058 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1060 compose.checkbtn_quote = checkbtn_quote;
1061 compose.entry_quotemark = entry_quotemark;
1062 compose.text_quotefmt = text_quotefmt;
1063 compose.checkbtn_autosig = checkbtn_autosig;
1064 compose.entry_sigsep = entry_sigsep;
1066 compose.spinbtn_linewrap = spinbtn_linewrap;
1067 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1068 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1069 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1072 static void prefs_display_create(void)
1075 GtkWidget *frame_font;
1077 GtkWidget *label_textfont;
1078 GtkWidget *entry_textfont;
1079 GtkWidget *button_textfont;
1080 GtkWidget *chkbtn_folder_unread;
1081 GtkWidget *chkbtn_transhdr;
1082 GtkWidget *frame_summary;
1084 GtkWidget *chkbtn_swapfrom;
1085 GtkWidget *chkbtn_hscrollbar;
1087 GtkWidget *button_dispitem;
1089 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1090 gtk_widget_show (vbox1);
1091 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1092 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1094 PACK_FRAME(vbox1, frame_font, _("Font"));
1096 table1 = gtk_table_new (1, 3, FALSE);
1097 gtk_widget_show (table1);
1098 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1099 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1100 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1101 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1103 label_textfont = gtk_label_new (_("Text"));
1104 gtk_widget_show (label_textfont);
1105 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1106 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1108 entry_textfont = gtk_entry_new ();
1109 gtk_widget_show (entry_textfont);
1110 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1111 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1113 button_textfont = gtk_button_new_with_label ("... ");
1114 gtk_widget_show (button_textfont);
1115 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1117 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1118 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1120 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1121 gtk_widget_show (vbox2);
1122 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1125 (vbox2, chkbtn_transhdr,
1126 _("Translate header name (such as `From:', `Subject:')"));
1128 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1129 _("Display unread number next to folder name"));
1131 /* ---- Summary ---- */
1133 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1135 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1136 gtk_widget_show (vbox2);
1137 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1138 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1141 (vbox2, chkbtn_swapfrom,
1142 _("Display recipient on `From' column if sender is yourself"));
1144 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1146 hbox1 = gtk_hbox_new (FALSE, 8);
1147 gtk_widget_show (hbox1);
1148 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1150 button_dispitem = gtk_button_new_with_label
1151 (_(" Set display item of summary... "));
1152 gtk_widget_show (button_dispitem);
1153 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1154 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1155 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1158 display.entry_textfont = entry_textfont;
1159 display.button_textfont = button_textfont;
1161 display.chkbtn_folder_unread = chkbtn_folder_unread;
1163 display.chkbtn_transhdr = chkbtn_transhdr;
1164 display.chkbtn_swapfrom = chkbtn_swapfrom;
1165 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1168 static void prefs_message_create(void)
1173 GtkWidget *chkbtn_enablecol;
1174 GtkWidget *button_edit_col;
1175 GtkWidget *chkbtn_mbalnum;
1176 GtkWidget *chkbtn_disphdrpane;
1177 GtkWidget *chkbtn_disphdr;
1178 GtkWidget *hbox_linespc;
1179 GtkWidget *label_linespc;
1180 GtkObject *spinbtn_linespc_adj;
1181 GtkWidget *spinbtn_linespc;
1182 GtkWidget *chkbtn_headspc;
1184 GtkWidget *frame_scr;
1185 GtkWidget *vbox_scr;
1186 GtkWidget *chkbtn_smoothscroll;
1187 GtkWidget *hbox_scr;
1188 GtkWidget *label_scr;
1189 GtkObject *spinbtn_scrollstep_adj;
1190 GtkWidget *spinbtn_scrollstep;
1191 GtkWidget *chkbtn_halfpage;
1193 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1194 gtk_widget_show (vbox1);
1195 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1196 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1198 hbox1 = gtk_hbox_new (FALSE, 8);
1199 gtk_widget_show (hbox1);
1200 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1202 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1203 _("Enable coloration of message"));
1204 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1205 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1208 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1209 gtk_widget_show (button_edit_col);
1210 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1211 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1212 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1214 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1216 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1217 gtk_widget_show (vbox2);
1218 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1221 (vbox2, chkbtn_mbalnum,
1222 _("Display 2-byte alphabet and numeric with 1-byte character"));
1223 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1224 _("Display header pane above message view"));
1225 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1226 _("Display short headers on message view"));
1228 hbox1 = gtk_hbox_new (FALSE, 32);
1229 gtk_widget_show (hbox1);
1230 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1232 hbox_linespc = gtk_hbox_new (FALSE, 8);
1233 gtk_widget_show (hbox1);
1234 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1236 label_linespc = gtk_label_new (_("Line space"));
1237 gtk_widget_show (label_linespc);
1238 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1241 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1242 spinbtn_linespc = gtk_spin_button_new
1243 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1244 gtk_widget_show (spinbtn_linespc);
1245 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1247 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1248 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1250 label_linespc = gtk_label_new (_("pixel(s)"));
1251 gtk_widget_show (label_linespc);
1252 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1255 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1257 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1259 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1260 gtk_widget_show (vbox_scr);
1261 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1262 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1264 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1266 hbox1 = gtk_hbox_new (FALSE, 32);
1267 gtk_widget_show (hbox1);
1268 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1270 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1272 hbox_scr = gtk_hbox_new (FALSE, 8);
1273 gtk_widget_show (hbox_scr);
1274 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1276 label_scr = gtk_label_new (_("Step"));
1277 gtk_widget_show (label_scr);
1278 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1280 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1281 spinbtn_scrollstep = gtk_spin_button_new
1282 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1283 gtk_widget_show (spinbtn_scrollstep);
1284 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1286 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1287 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1290 label_scr = gtk_label_new (_("pixel(s)"));
1291 gtk_widget_show (label_scr);
1292 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1294 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1296 message.chkbtn_enablecol = chkbtn_enablecol;
1297 message.button_edit_col = button_edit_col;
1298 message.chkbtn_mbalnum = chkbtn_mbalnum;
1299 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1300 message.chkbtn_disphdr = chkbtn_disphdr;
1301 message.spinbtn_linespc = spinbtn_linespc;
1302 message.chkbtn_headspc = chkbtn_headspc;
1304 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1305 message.spinbtn_scrollstep = spinbtn_scrollstep;
1306 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1307 message.chkbtn_halfpage = chkbtn_halfpage;
1311 static void prefs_privacy_create(void)
1316 GtkWidget *checkbtn_default_encrypt;
1317 GtkWidget *checkbtn_default_sign;
1318 GtkWidget *checkbtn_auto_check_signatures;
1319 GtkWidget *checkbtn_passphrase_grab;
1321 GtkWidget *menuitem;
1323 GtkWidget *optmenu_menu;
1325 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1326 gtk_widget_show (vbox1);
1327 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1328 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1330 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1331 gtk_widget_show (vbox2);
1332 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1334 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1335 _("Encrypt message by default"));
1337 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1338 _("Sign message by default"));
1340 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1341 _("Automatically check signatures"));
1343 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1344 _("Grab input while entering a passphrase"));
1346 hbox1 = gtk_hbox_new (FALSE, 8);
1347 gtk_widget_show (hbox1);
1348 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1350 /* create default signkey box */
1351 label = gtk_label_new (_("Default Sign Key"));
1352 gtk_widget_show (label);
1353 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1354 optmenu = gtk_option_menu_new ();
1355 gtk_widget_show (optmenu);
1356 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1357 optmenu_menu = gtk_menu_new ();
1359 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1360 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1361 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1362 /* FIXME: disabled because not implemented */
1363 gtk_widget_set_sensitive(optmenu, FALSE);
1365 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1366 privacy.checkbtn_default_sign = checkbtn_default_sign;
1367 privacy.checkbtn_auto_check_signatures
1368 = checkbtn_auto_check_signatures;
1369 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1370 privacy.optmenu_default_signkey = optmenu;
1374 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1378 GtkWidget *menuitem;
1381 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1382 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1383 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1384 g_free(*((gchar **)pparam->data));
1385 *((gchar **)pparam->data) = g_strdup(charset);
1389 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1393 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1395 GtkWidget *menuitem;
1399 g_return_if_fail(optmenu != NULL);
1400 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1402 menu = gtk_option_menu_get_menu(optmenu);
1403 for (cur = GTK_MENU_SHELL(menu)->children;
1404 cur != NULL; cur = cur->next) {
1405 menuitem = GTK_WIDGET(cur->data);
1406 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1407 if (!strcmp(charset, *((gchar **)pparam->data))) {
1408 gtk_option_menu_set_history(optmenu, n);
1414 gtk_option_menu_set_history(optmenu, 0);
1415 prefs_common_charset_set_data_from_optmenu(pparam);
1418 #endif /* USE_GPGME */
1420 static void prefs_interface_create(void)
1425 GtkWidget *checkbtn_emacs;
1426 GtkWidget *checkbtn_openunread;
1427 GtkWidget *checkbtn_openinbox;
1428 GtkWidget *checkbtn_immedexec;
1429 GtkWidget *checkbtn_addaddrbyclick;
1432 GtkWidget *frame_exit;
1433 GtkWidget *vbox_exit;
1435 GtkWidget *checkbtn_confonexit;
1436 GtkWidget *checkbtn_cleanonexit;
1437 GtkWidget *checkbtn_askonclean;
1438 GtkWidget *checkbtn_warnqueued;
1440 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1441 gtk_widget_show (vbox1);
1442 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1443 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1445 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1446 gtk_widget_show (vbox2);
1447 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1449 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1450 _("Emulate the behavior of mouse operation of\n"
1451 "Emacs-based mailer"));
1452 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1456 (vbox2, checkbtn_openunread,
1457 _("Open first unread message when entering a folder"));
1460 (vbox2, checkbtn_openinbox,
1461 _("Go to inbox after receiving new mail"));
1463 vbox3 = gtk_vbox_new (FALSE, 0);
1464 gtk_widget_show (vbox3);
1465 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1468 (vbox3, checkbtn_immedexec,
1469 _("Execute immediately when moving or deleting messages"));
1471 hbox1 = gtk_hbox_new (FALSE, 0);
1472 gtk_widget_show (hbox1);
1473 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1475 label = gtk_label_new
1476 (_("(Messages will be just marked till execution\n"
1477 " if this is turned off)"));
1478 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1479 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1482 (vbox2, checkbtn_addaddrbyclick,
1483 _("Add address to destination when double-clicked"));
1485 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1487 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1488 gtk_widget_show (vbox_exit);
1489 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1490 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1492 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1493 _("Confirm on exit"));
1495 hbox1 = gtk_hbox_new (FALSE, 32);
1496 gtk_widget_show (hbox1);
1497 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1499 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1500 _("Empty trash on exit"));
1501 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1502 _("Ask before emptying"));
1503 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1505 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1506 _("Warn if there are queued messages on exit"));
1508 interface.checkbtn_emacs = checkbtn_emacs;
1509 interface.checkbtn_openunread = checkbtn_openunread;
1510 interface.checkbtn_openinbox = checkbtn_openinbox;
1511 interface.checkbtn_immedexec = checkbtn_immedexec;
1512 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1513 interface.checkbtn_confonexit = checkbtn_confonexit;
1514 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1515 interface.checkbtn_askonclean = checkbtn_askonclean;
1516 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1519 static void prefs_other_create(void)
1524 GtkWidget *uri_frame;
1525 GtkWidget *uri_label;
1526 GtkWidget *uri_combo;
1527 GtkWidget *uri_entry;
1529 GtkWidget *print_frame;
1530 GtkWidget *printcmd_label;
1531 GtkWidget *printcmd_entry;
1533 GtkWidget *exteditor_frame;
1534 GtkWidget *exteditor_label;
1535 GtkWidget *exteditor_combo;
1536 GtkWidget *exteditor_entry;
1538 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1539 gtk_widget_show (vbox1);
1540 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1541 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1543 PACK_FRAME(vbox1, uri_frame,
1544 _("External Web browser (%s will be replaced with URI)"));
1546 hbox1 = gtk_hbox_new (FALSE, 8);
1547 gtk_widget_show (hbox1);
1548 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1549 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1551 uri_label = gtk_label_new (_("Command"));
1552 gtk_widget_show(uri_label);
1553 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1555 uri_combo = gtk_combo_new ();
1556 gtk_widget_show (uri_combo);
1557 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1558 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1559 "netscape -remote 'openURL(%s,raise)'",
1560 "gnome-moz-remote --raise --newwin '%s'",
1561 "kterm -e w3m '%s'",
1562 "kterm -e lynx '%s'",
1565 uri_entry = GTK_COMBO (uri_combo)->entry;
1567 PACK_FRAME(vbox1, print_frame,
1568 _("Printing (%s will be replaced with file name)"));
1570 hbox1 = gtk_hbox_new (FALSE, 8);
1571 gtk_widget_show (hbox1);
1572 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1573 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1575 printcmd_label = gtk_label_new (_("Command"));
1576 gtk_widget_show (printcmd_label);
1577 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1579 printcmd_entry = gtk_entry_new ();
1580 gtk_widget_show (printcmd_entry);
1581 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1583 PACK_FRAME(vbox1, exteditor_frame,
1584 _("External editor (%s will be replaced with file name)"));
1586 hbox1 = gtk_hbox_new (FALSE, 8);
1587 gtk_widget_show (hbox1);
1588 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1589 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1591 exteditor_label = gtk_label_new (_("Command"));
1592 gtk_widget_show (exteditor_label);
1593 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1595 exteditor_combo = gtk_combo_new ();
1596 gtk_widget_show (exteditor_combo);
1597 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1598 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1600 "mgedit --no-fork %s",
1606 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1608 other.uri_combo = uri_combo;
1609 other.uri_entry = uri_entry;
1610 other.printcmd_entry = printcmd_entry;
1612 other.exteditor_combo = exteditor_combo;
1613 other.exteditor_entry = exteditor_entry;
1616 void prefs_quote_colors_dialog(void)
1618 if (!quote_color_win)
1619 prefs_quote_colors_dialog_create();
1620 gtk_widget_show(quote_color_win);
1623 gtk_widget_hide(quote_color_win);
1625 textview_update_message_colors();
1628 static void prefs_quote_colors_dialog_create(void)
1633 GtkWidget *quotelevel1_label;
1634 GtkWidget *quotelevel2_label;
1635 GtkWidget *quotelevel3_label;
1636 GtkWidget *uri_label;
1639 //GtkWidget *cancel_btn;
1640 GtkWidget *recycle_colors_btn;
1641 GtkWidget *frame_colors;
1643 window = gtk_window_new(GTK_WINDOW_DIALOG);
1644 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1645 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1646 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1647 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1648 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1650 vbox = gtk_vbox_new (FALSE, VSPACING);
1651 gtk_container_add (GTK_CONTAINER (window), vbox);
1652 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1653 PACK_FRAME(vbox, frame_colors, _("Colors"));
1655 table = gtk_table_new (4, 2, FALSE);
1656 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1657 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1658 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1659 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1661 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1663 color_buttons.quote_level1_btn = gtk_button_new();
1664 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1665 (GtkAttachOptions) (0),
1666 (GtkAttachOptions) (0), 0, 0);
1667 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1668 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1670 color_buttons.quote_level2_btn = gtk_button_new();
1671 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1672 (GtkAttachOptions) (0),
1673 (GtkAttachOptions) (0), 0, 0);
1674 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1675 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1677 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1678 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1679 (GtkAttachOptions) (0),
1680 (GtkAttachOptions) (0), 0, 0);
1681 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1682 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1684 color_buttons.uri_btn = gtk_button_new_with_label ("");
1685 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1686 (GtkAttachOptions) (0),
1687 (GtkAttachOptions) (0), 0, 0);
1688 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1689 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1691 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1692 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1693 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1694 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1695 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1697 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1698 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1699 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1700 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1701 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1703 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1704 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1705 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1706 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1707 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1709 uri_label = gtk_label_new (_("URI link"));
1710 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1711 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1712 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1713 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1715 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1716 _("Recycle quote colors"));
1718 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1719 NULL, NULL, NULL, NULL);
1720 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1722 gtk_widget_grab_default(ok_btn);
1723 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1724 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1725 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1726 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1728 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1729 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1730 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1731 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1732 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1733 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1734 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1735 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1736 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1737 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1739 /* show message button colors and recycle options */
1740 set_button_bg_color(color_buttons.quote_level1_btn,
1741 prefs_common.quote_level1_col);
1742 set_button_bg_color(color_buttons.quote_level2_btn,
1743 prefs_common.quote_level2_col);
1744 set_button_bg_color(color_buttons.quote_level3_btn,
1745 prefs_common.quote_level3_col);
1746 set_button_bg_color(color_buttons.uri_btn,
1747 prefs_common.uri_col);
1748 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1749 prefs_common.recycle_quote_colors);
1751 gtk_widget_show_all(vbox);
1752 quote_color_win = window;
1755 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1757 gchar *type = (gchar *)data;
1758 gchar *title = NULL;
1759 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1761 GtkColorSelectionDialog *dialog;
1763 if(g_strcasecmp(type, "LEVEL1") == 0) {
1764 title = _("Pick color for quotation level 1");
1765 rgbvalue = prefs_common.quote_level1_col;
1766 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1767 title = _("Pick color for quotation level 2");
1768 rgbvalue = prefs_common.quote_level2_col;
1769 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1770 title = _("Pick color for quotation level 3");
1771 rgbvalue = prefs_common.quote_level3_col;
1772 } else if(g_strcasecmp(type, "URI") == 0) {
1773 title = _("Pick color for URI");
1774 rgbvalue = prefs_common.uri_col;
1775 } else { /* Should never be called */
1776 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1780 color_dialog = gtk_color_selection_dialog_new(title);
1781 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1782 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1783 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1785 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1786 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1787 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1788 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1790 /* preselect the previous color in the color selection dialog */
1791 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1792 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1793 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1794 dialog = (GtkColorSelectionDialog *)color_dialog;
1795 gtk_color_selection_set_color
1796 ((GtkColorSelection *)dialog->colorsel, color);
1798 gtk_widget_show(color_dialog);
1801 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1803 GtkColorSelection *colorsel = (GtkColorSelection *)
1804 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1806 gint red, green, blue, rgbvalue;
1807 gchar *type = (gchar *)data;
1809 gtk_color_selection_get_color(colorsel, color);
1811 red = (gint) (color[0] * 255.0);
1812 green = (gint) (color[1] * 255.0);
1813 blue = (gint) (color[2] * 255.0);
1814 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1817 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1818 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1819 fprintf(stderr, "Color is %x\n", rgbvalue);
1822 if (g_strcasecmp(type, "LEVEL1") == 0) {
1823 prefs_common.quote_level1_col = rgbvalue;
1824 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1825 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1826 prefs_common.quote_level2_col = rgbvalue;
1827 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1828 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1829 prefs_common.quote_level3_col = rgbvalue;
1830 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1831 } else if (g_strcasecmp(type, "URI") == 0) {
1832 prefs_common.uri_col = rgbvalue;
1833 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1835 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1837 gtk_widget_hide(color_dialog);
1840 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1842 gtk_widget_hide(color_dialog);
1845 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1850 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1851 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1852 newstyle->bg[GTK_STATE_NORMAL] = color;
1853 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1854 newstyle->bg[GTK_STATE_ACTIVE] = color;
1856 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1859 static void prefs_enable_message_color_toggled(void)
1863 is_active = gtk_toggle_button_get_active
1864 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1865 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1866 prefs_common.enable_color = is_active;
1869 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1873 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1874 prefs_common.recycle_quote_colors = is_active;
1877 static void prefs_quote_description(void)
1879 if (!quote_desc_win)
1880 prefs_quote_description_create();
1882 gtk_widget_show(quote_desc_win);
1884 gtk_widget_hide(quote_desc_win);
1887 static void prefs_quote_description_create(void)
1895 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1896 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1897 _("Description of symbols"));
1898 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1899 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1900 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1901 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1903 vbox = gtk_vbox_new(FALSE, 8);
1904 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1906 hbox = gtk_hbox_new(FALSE, 4);
1907 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1909 label = gtk_label_new
1920 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1921 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1923 label = gtk_label_new
1926 "Full Name of Sender\n"
1927 "First Name of Sender\n"
1928 "Initial of Sender\n"
1934 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1935 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1937 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1938 NULL, NULL, NULL, NULL);
1939 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1941 gtk_widget_grab_default(ok_btn);
1942 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1943 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1945 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
1946 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1948 gtk_widget_show_all(vbox);
1951 /* functions for setting items of SummaryView */
1953 static struct _SummaryDisplayItem
1957 GtkWidget *chkbtn[N_SUMMARY_COLS];
1960 GtkWidget *cancel_btn;
1963 #define SET_ACTIVE(column, var) \
1964 gtk_toggle_button_set_active \
1965 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
1967 #define GET_ACTIVE(column, var) \
1968 prefs_common.var = gtk_toggle_button_get_active \
1969 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
1971 void prefs_summary_display_item_set(void)
1973 static gboolean cancelled;
1975 if (!summarydispitem.window)
1976 prefs_summary_display_item_dialog_create(&cancelled);
1977 gtk_widget_grab_focus(summarydispitem.ok_btn);
1978 gtk_widget_show(summarydispitem.window);
1979 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
1981 SET_ACTIVE(S_COL_MARK, show_mark);
1982 SET_ACTIVE(S_COL_UNREAD, show_unread);
1983 SET_ACTIVE(S_COL_MIME, show_mime);
1984 SET_ACTIVE(S_COL_NUMBER, show_number);
1985 SET_ACTIVE(S_COL_SIZE, show_size);
1986 SET_ACTIVE(S_COL_DATE, show_date);
1987 SET_ACTIVE(S_COL_FROM, show_from);
1988 SET_ACTIVE(S_COL_SUBJECT, show_subject);
1991 gtk_widget_hide(summarydispitem.window);
1993 if (cancelled != TRUE) {
1994 GET_ACTIVE(S_COL_MARK, show_mark);
1995 GET_ACTIVE(S_COL_UNREAD, show_unread);
1996 GET_ACTIVE(S_COL_MIME, show_mime);
1997 GET_ACTIVE(S_COL_NUMBER, show_number);
1998 GET_ACTIVE(S_COL_SIZE, show_size);
1999 GET_ACTIVE(S_COL_DATE, show_date);
2000 GET_ACTIVE(S_COL_FROM, show_from);
2001 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2003 main_window_reflect_prefs_all();
2007 #define SET_CHECK_BUTTON(column, label) \
2009 summarydispitem.chkbtn[column] = \
2010 gtk_check_button_new_with_label(label); \
2011 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2012 summarydispitem.chkbtn[column], \
2016 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2020 GtkWidget *chkbtn_vbox;
2023 GtkWidget *cancel_btn;
2025 window = gtk_window_new(GTK_WINDOW_DIALOG);
2026 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2027 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2028 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2029 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2030 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2031 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2032 GTK_SIGNAL_FUNC(display_item_delete_event),
2034 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2035 GTK_SIGNAL_FUNC(display_item_key_pressed),
2038 vbox = gtk_vbox_new(FALSE, 8);
2039 gtk_container_add(GTK_CONTAINER(window), vbox);
2041 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2042 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2044 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2045 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2046 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2047 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2048 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2049 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2050 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2051 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2053 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2054 &cancel_btn, _("Cancel"), NULL, NULL);
2055 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2056 gtk_widget_grab_default(ok_btn);
2058 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2059 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2060 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2061 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2063 gtk_widget_show_all(vbox);
2065 summarydispitem.window = window;
2066 summarydispitem.ok_btn = ok_btn;
2067 summarydispitem.cancel_btn = cancel_btn;
2070 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2076 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2082 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2083 gboolean *cancelled)
2091 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2092 gboolean *cancelled)
2094 if (event && event->keyval == GDK_Escape) {
2100 static void prefs_font_select(GtkButton *button)
2102 if (!font_sel_win) {
2103 font_sel_win = gtk_font_selection_dialog_new
2104 (_("Font selection"));
2105 gtk_window_position(GTK_WINDOW(font_sel_win),
2106 GTK_WIN_POS_CENTER);
2107 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2108 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2111 (GTK_OBJECT(font_sel_win), "key_press_event",
2112 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2115 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2117 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2119 gtk_signal_connect_object
2120 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2122 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2123 GTK_OBJECT(font_sel_win));
2126 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2127 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2128 gtk_widget_grab_focus
2129 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2130 gtk_widget_show(font_sel_win);
2133 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2137 if (event && event->keyval == GDK_Escape)
2138 gtk_widget_hide(font_sel_win);
2141 static void prefs_font_selection_ok(GtkButton *button)
2145 fontname = gtk_font_selection_dialog_get_font_name
2146 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2149 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2153 gtk_widget_hide(font_sel_win);
2156 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2159 GtkWidget *menuitem;
2162 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2163 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2164 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2165 g_free(*((gchar **)pparam->data));
2166 *((gchar **)pparam->data) = g_strdup(charset);
2169 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2172 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2174 GtkWidget *menuitem;
2178 g_return_if_fail(optmenu != NULL);
2179 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2181 menu = gtk_option_menu_get_menu(optmenu);
2182 for (cur = GTK_MENU_SHELL(menu)->children;
2183 cur != NULL; cur = cur->next) {
2184 menuitem = GTK_WIDGET(cur->data);
2185 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2186 if (!strcmp(charset, *((gchar **)pparam->data))) {
2187 gtk_option_menu_set_history(optmenu, n);
2193 gtk_option_menu_set_history(optmenu, 0);
2194 prefs_common_charset_set_data_from_optmenu(pparam);
2197 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2200 if (event && event->keyval == GDK_Escape)
2201 gtk_widget_hide(dialog.window);
2204 static void prefs_common_ok(GtkButton *button)
2206 prefs_common_apply(button);
2207 gtk_widget_hide(dialog.window);
2208 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2209 gtk_widget_hide(quote_desc_win);
2212 static void prefs_common_apply(GtkButton *button)
2214 prefs_set_data_from_dialog(param);
2215 main_window_reflect_prefs_all();
2216 prefs_common_save_config();