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;
107 GtkWidget *entry_datefmt;
110 static struct Message {
111 GtkWidget *chkbtn_enablecol;
112 GtkWidget *button_edit_col;
113 GtkWidget *chkbtn_mbalnum;
114 GtkWidget *chkbtn_disphdrpane;
115 GtkWidget *chkbtn_disphdr;
116 GtkWidget *spinbtn_linespc;
117 GtkObject *spinbtn_linespc_adj;
118 GtkWidget *chkbtn_headspc;
120 GtkWidget *chkbtn_smoothscroll;
121 GtkWidget *spinbtn_scrollstep;
122 GtkObject *spinbtn_scrollstep_adj;
123 GtkWidget *chkbtn_halfpage;
127 static struct Privacy {
128 GtkWidget *checkbtn_default_encrypt;
129 GtkWidget *checkbtn_default_sign;
130 GtkWidget *checkbtn_auto_check_signatures;
131 GtkWidget *checkbtn_passphrase_grab;
132 GtkWidget *optmenu_default_signkey;
136 static struct Interface {
137 GtkWidget *checkbtn_emacs;
138 GtkWidget *checkbtn_openunread;
139 GtkWidget *checkbtn_openinbox;
140 GtkWidget *checkbtn_immedexec;
141 GtkWidget *checkbtn_confonexit;
142 GtkWidget *checkbtn_cleanonexit;
143 GtkWidget *checkbtn_askonclean;
144 GtkWidget *checkbtn_warnqueued;
145 GtkWidget *checkbtn_addaddrbyclick;
148 static struct Other {
149 GtkWidget *uri_combo;
150 GtkWidget *uri_entry;
151 GtkWidget *printcmd_entry;
152 GtkWidget *exteditor_combo;
153 GtkWidget *exteditor_entry;
156 static struct MessageColorButtons {
157 GtkWidget *quote_level1_btn;
158 GtkWidget *quote_level2_btn;
159 GtkWidget *quote_level3_btn;
163 static GtkWidget *quote_desc_win;
164 static GtkWidget *font_sel_win;
165 static GtkWidget *quote_color_win;
166 static GtkWidget *color_dialog;
168 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
169 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
171 static void prefs_common_default_signkey_set_data_from_optmenu
173 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
177 parameter name, default value, pointer to the prefs variable, data type,
178 pointer to the widget pointer,
179 pointer to the function for data setting,
180 pointer to the function for widget setting
183 static PrefParam param[] = {
185 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
186 &receive.checkbtn_incext,
187 prefs_set_data_from_toggle, prefs_set_toggle},
188 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
189 &receive.entry_incext,
190 prefs_set_data_from_entry, prefs_set_entry},
192 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
193 &receive.checkbtn_local,
194 prefs_set_data_from_toggle, prefs_set_toggle},
195 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
196 &receive.checkbtn_filter_on_inc,
197 prefs_set_data_from_toggle, prefs_set_toggle},
198 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
199 &receive.entry_spool,
200 prefs_set_data_from_entry, prefs_set_entry},
202 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
203 &receive.checkbtn_autochk,
204 prefs_set_data_from_toggle, prefs_set_toggle},
205 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
206 &receive.spinbtn_autochk,
207 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
208 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
209 &receive.checkbtn_chkonstartup,
210 prefs_set_data_from_toggle, prefs_set_toggle},
212 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
213 &receive.spinbtn_maxarticle,
214 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
217 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
218 &send.checkbtn_sendext,
219 prefs_set_data_from_toggle, prefs_set_toggle},
220 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
221 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
222 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
223 &send.checkbtn_savemsg,
224 prefs_set_data_from_toggle, prefs_set_toggle},
225 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
226 &send.checkbtn_queuemsg,
227 prefs_set_data_from_toggle, prefs_set_toggle},
229 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
230 &send.optmenu_charset,
231 prefs_common_charset_set_data_from_optmenu,
232 prefs_common_charset_set_optmenu},
235 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
236 &compose.checkbtn_quote,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
239 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
240 {"quote_format", "On %d\\n%f wrote:\\n\\n",
241 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
242 prefs_set_data_from_text, prefs_set_text},
244 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
245 &compose.checkbtn_autosig,
246 prefs_set_data_from_toggle, prefs_set_toggle},
247 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
248 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
250 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
251 &compose.spinbtn_linewrap,
252 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
253 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
254 &compose.checkbtn_wrapquote,
255 prefs_set_data_from_toggle, prefs_set_toggle},
256 {"linewrap_before_sending", "FALSE",
257 &prefs_common.linewrap_at_send, P_BOOL,
258 &compose.checkbtn_wrapatsend,
259 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
265 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
267 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
268 &prefs_common.textfont, P_STRING,
269 &display.entry_textfont,
270 prefs_set_data_from_entry, prefs_set_entry},
272 {"display_folder_unread_num", "TRUE",
273 &prefs_common.display_folder_unread, P_BOOL,
274 &display.chkbtn_folder_unread,
275 prefs_set_data_from_toggle, prefs_set_toggle},
277 /* Display: Summary View */
278 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
279 &display.chkbtn_transhdr,
280 prefs_set_data_from_toggle, prefs_set_toggle},
281 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
282 &display.chkbtn_swapfrom,
283 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
285 &display.chkbtn_hscrollbar,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
288 P_STRING, &display.entry_datefmt,
289 prefs_set_data_from_entry, prefs_set_entry},
291 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
293 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
295 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
298 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
300 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
302 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
304 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
306 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
308 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
310 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
312 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
316 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
318 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
320 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
322 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
324 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
326 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
328 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
330 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
332 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
334 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
336 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
338 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
340 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
342 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
344 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
346 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
347 P_INT, NULL, NULL, NULL},
348 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
350 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
352 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
354 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
356 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
358 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
360 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
362 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
364 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
366 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
368 {"compose_width", "600", &prefs_common.compose_width, P_INT,
370 {"compose_height", "560", &prefs_common.compose_height, P_INT,
374 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
375 &message.chkbtn_enablecol,
376 prefs_set_data_from_toggle, prefs_set_toggle},
378 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
380 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
382 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
384 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
386 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
388 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
389 P_BOOL, NULL, NULL, NULL},
391 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
392 &message.chkbtn_mbalnum,
393 prefs_set_data_from_toggle, prefs_set_toggle},
394 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
395 P_BOOL, &message.chkbtn_disphdrpane,
396 prefs_set_data_from_toggle, prefs_set_toggle},
397 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
398 &message.chkbtn_disphdr,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"line_space", "2", &prefs_common.line_space, P_INT,
401 &message.spinbtn_linespc,
402 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
403 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
404 &message.chkbtn_headspc,
405 prefs_set_data_from_toggle, prefs_set_toggle},
407 {"enable_smooth_scroll", "FALSE",
408 &prefs_common.enable_smooth_scroll, P_BOOL,
409 &message.chkbtn_smoothscroll,
410 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
412 &message.spinbtn_scrollstep,
413 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
414 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
415 &message.chkbtn_halfpage,
416 prefs_set_data_from_toggle, prefs_set_toggle},
419 {"mime_image_viewer", "display '%s'",
420 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
421 {"mime_audio_player", "play '%s'",
422 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
426 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
427 &privacy.checkbtn_default_encrypt,
428 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
430 &privacy.checkbtn_default_sign,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"auto_check_signatures", "TRUE",
433 &prefs_common.auto_check_signatures, P_BOOL,
434 &privacy.checkbtn_auto_check_signatures,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
437 &privacy.checkbtn_passphrase_grab,
438 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
440 &privacy.optmenu_default_signkey,
441 prefs_common_default_signkey_set_data_from_optmenu,
442 prefs_common_default_signkey_set_optmenu},
443 #endif /* USE_GPGME */
446 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
448 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
451 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
452 &interface.checkbtn_emacs,
453 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
455 P_BOOL, &interface.checkbtn_openunread,
456 prefs_set_data_from_toggle, prefs_set_toggle},
457 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
458 P_BOOL, &interface.checkbtn_openinbox,
459 prefs_set_data_from_toggle, prefs_set_toggle},
460 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
461 &interface.checkbtn_immedexec,
462 prefs_set_data_from_toggle, prefs_set_toggle},
463 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
464 P_BOOL, &interface.checkbtn_addaddrbyclick,
465 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
468 &interface.checkbtn_confonexit,
469 prefs_set_data_from_toggle, prefs_set_toggle},
470 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
471 &interface.checkbtn_cleanonexit,
472 prefs_set_data_from_toggle, prefs_set_toggle},
473 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
474 &interface.checkbtn_askonclean,
475 prefs_set_data_from_toggle, prefs_set_toggle},
476 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
477 P_BOOL, &interface.checkbtn_warnqueued,
478 prefs_set_data_from_toggle, prefs_set_toggle},
481 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
482 &prefs_common.uri_cmd, P_STRING,
483 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
484 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
485 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
486 {"ext_editor_command", "gedit %s",
487 &prefs_common.ext_editor_cmd, P_STRING,
488 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
490 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
494 #define VSPACING_NARROW 4
495 #define VBOX_BORDER 16
496 #define DEFAULT_ENTRY_WIDTH 80
497 #define PREFSBUFSIZE 1024
499 /* widget creating functions */
500 static void prefs_common_create (void);
501 static void prefs_receive_create (void);
502 static void prefs_send_create (void);
503 static void prefs_compose_create (void);
504 static void prefs_display_create (void);
505 static void prefs_message_create (void);
507 static void prefs_privacy_create (void);
509 static void prefs_interface_create (void);
510 static void prefs_other_create (void);
512 static void prefs_quote_description (void);
513 static void prefs_quote_description_create (void);
514 static void prefs_quote_colors_dialog (void);
515 static void prefs_quote_colors_dialog_create (void);
516 static void quote_color_set_dialog (GtkWidget *widget,
518 static void quote_colors_set_dialog_ok (GtkWidget *widget,
520 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
522 static void set_button_bg_color (GtkWidget *widget,
524 static void prefs_enable_message_color_toggled (void);
525 static void prefs_recycle_colors_toggled (GtkWidget *widget);
527 /* functions for setting items of SummaryView */
528 static void prefs_summary_display_item_dialog_create
529 (gboolean *cancelled);
530 static void display_item_ok (GtkWidget *widget,
531 gboolean *cancelled);
532 static void display_item_cancel (GtkWidget *widget,
533 gboolean *cancelled);
534 static gint display_item_delete_event (GtkWidget *widget,
536 gboolean *cancelled);
537 static void display_item_key_pressed (GtkWidget *widget,
539 gboolean *cancelled);
541 static void prefs_font_select (GtkButton *button);
542 static void prefs_font_selection_key_pressed (GtkWidget *widget,
545 static void prefs_font_selection_ok (GtkButton *button);
547 static void prefs_common_key_pressed (GtkWidget *widget,
550 static void prefs_common_ok (GtkButton *button);
551 static void prefs_common_apply (GtkButton *button);
553 void prefs_common_read_config(void)
555 prefs_read_config(param, "Common", COMMON_RC);
558 void prefs_common_save_config(void)
560 prefs_save_config(param, "Common", COMMON_RC);
563 void prefs_common_open(void)
565 if (!dialog.window) {
566 prefs_common_create();
569 manage_window_set_transient(GTK_WINDOW(dialog.window));
570 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
571 gtk_widget_grab_focus(dialog.ok_btn);
573 prefs_set_dialog(param);
575 gtk_widget_show(dialog.window);
578 static void prefs_common_create(void)
582 debug_print(_("Creating common preferences window...\n"));
584 prefs_dialog_create(&dialog);
585 gtk_window_set_title (GTK_WINDOW(dialog.window),
586 _("Common Preferences"));
587 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
588 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
589 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
590 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
591 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
592 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
593 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
594 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
595 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
596 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
597 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
598 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
599 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
600 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
601 GTK_OBJECT(dialog.window));
603 /* create all widgets on notebook */
604 prefs_receive_create();
605 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
607 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
608 prefs_compose_create();
609 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
610 prefs_display_create();
611 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
612 prefs_message_create();
613 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
615 prefs_privacy_create();
616 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
618 prefs_interface_create();
619 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
620 prefs_other_create();
621 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
623 gtk_widget_show_all(dialog.window);
626 static void prefs_receive_create(void)
630 GtkWidget *frame_incext;
631 GtkWidget *checkbtn_incext;
633 GtkWidget *label_incext;
634 GtkWidget *entry_incext;
635 GtkWidget *button_incext;
637 GtkWidget *frame_spool;
638 GtkWidget *checkbtn_local;
639 GtkWidget *checkbtn_filter_on_inc;
640 GtkWidget *label_spool;
641 GtkWidget *entry_spool;
643 GtkWidget *hbox_autochk;
644 GtkWidget *checkbtn_autochk;
645 GtkWidget *label_autochk1;
646 GtkObject *spinbtn_autochk_adj;
647 GtkWidget *spinbtn_autochk;
648 GtkWidget *label_autochk2;
649 GtkWidget *checkbtn_chkonstartup;
651 GtkWidget *frame_news;
652 GtkWidget *label_maxarticle;
653 GtkWidget *spinbtn_maxarticle;
654 GtkObject *spinbtn_maxarticle_adj;
656 vbox1 = gtk_vbox_new (FALSE, VSPACING);
657 gtk_widget_show (vbox1);
658 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
659 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
661 PACK_FRAME(vbox1, frame_incext, _("External program"));
663 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
664 gtk_widget_show (vbox2);
665 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
666 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
668 /* Use of external incorporation program */
669 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
670 _("Use external program for incorporation"));
672 hbox = gtk_hbox_new (FALSE, 8);
673 gtk_widget_show (hbox);
674 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
675 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
677 label_incext = gtk_label_new (_("Program path"));
678 gtk_widget_show (label_incext);
679 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
681 entry_incext = gtk_entry_new ();
682 gtk_widget_show (entry_incext);
683 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
685 button_incext = gtk_button_new_with_label ("... ");
686 gtk_widget_show (button_incext);
687 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
689 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
691 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
692 gtk_widget_show (vbox2);
693 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
694 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
696 hbox = gtk_hbox_new (FALSE, 32);
697 gtk_widget_show (hbox);
698 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
700 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
701 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
702 _("Filter on incorporation"));
703 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
705 hbox = gtk_hbox_new (FALSE, 8);
706 gtk_widget_show (hbox);
707 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
708 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
710 label_spool = gtk_label_new (_("Spool directory"));
711 gtk_widget_show (label_spool);
712 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
714 entry_spool = gtk_entry_new ();
715 gtk_widget_show (entry_spool);
716 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
718 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
719 gtk_widget_show (vbox2);
720 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
723 hbox_autochk = gtk_hbox_new (FALSE, 8);
724 gtk_widget_show (hbox_autochk);
725 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
727 gtk_widget_set_sensitive(hbox_autochk, FALSE);
729 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
730 _("Auto-check new mail"));
732 label_autochk1 = gtk_label_new (_("each"));
733 gtk_widget_show (label_autochk1);
734 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
736 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
737 spinbtn_autochk = gtk_spin_button_new
738 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
739 gtk_widget_show (spinbtn_autochk);
740 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
741 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
742 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
744 label_autochk2 = gtk_label_new (_("minute(s)"));
745 gtk_widget_show (label_autochk2);
746 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
748 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
749 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
750 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
752 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
753 _("Check new mail on startup"));
755 PACK_FRAME(vbox1, frame_news, _("News"));
757 hbox = gtk_hbox_new (FALSE, 8);
758 gtk_widget_show (hbox);
759 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
760 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
762 label_maxarticle = gtk_label_new
763 (_("Maximum article number to download\n"
764 "(unlimited if 0 is specified)"));
765 gtk_widget_show (label_maxarticle);
766 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
767 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
769 spinbtn_maxarticle_adj =
770 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
771 spinbtn_maxarticle = gtk_spin_button_new
772 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
773 gtk_widget_show (spinbtn_maxarticle);
774 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
776 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
777 gtk_spin_button_set_numeric
778 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
780 receive.checkbtn_incext = checkbtn_incext;
781 receive.entry_incext = entry_incext;
782 receive.button_incext = button_incext;
784 receive.checkbtn_local = checkbtn_local;
785 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
786 receive.entry_spool = entry_spool;
788 receive.checkbtn_autochk = checkbtn_autochk;
789 receive.spinbtn_autochk = spinbtn_autochk;
790 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
792 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
794 receive.spinbtn_maxarticle = spinbtn_maxarticle;
795 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
798 static void prefs_send_create(void)
802 GtkWidget *frame_sendext;
803 GtkWidget *vbox_sendext;
804 GtkWidget *checkbtn_sendext;
806 GtkWidget *label_sendext;
807 GtkWidget *entry_sendext;
808 GtkWidget *button_sendext;
809 GtkWidget *checkbtn_savemsg;
810 GtkWidget *checkbtn_queuemsg;
811 GtkWidget *label_outcharset;
813 GtkWidget *optmenu_menu;
816 vbox1 = gtk_vbox_new (FALSE, VSPACING);
817 gtk_widget_show (vbox1);
818 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
819 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
821 PACK_FRAME(vbox1, frame_sendext, _("External program"));
823 gtk_widget_set_sensitive(frame_sendext, FALSE);
825 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
826 gtk_widget_show (vbox_sendext);
827 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
828 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
830 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
831 _("Use external program for sending"));
833 hbox1 = gtk_hbox_new (FALSE, 8);
834 gtk_widget_show (hbox1);
835 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
836 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
838 label_sendext = gtk_label_new (_("Program path"));
839 gtk_widget_show (label_sendext);
840 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
842 entry_sendext = gtk_entry_new ();
843 gtk_widget_show (entry_sendext);
844 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
846 button_sendext = gtk_button_new_with_label ("... ");
847 gtk_widget_show (button_sendext);
848 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
850 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
851 gtk_widget_show (vbox2);
852 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
854 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
855 _("Save sent message to outbox"));
856 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
857 _("Queue message that failed to send"));
859 hbox1 = gtk_hbox_new (FALSE, 8);
860 gtk_widget_show (hbox1);
861 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
863 label_outcharset = gtk_label_new (_("Outgoing codeset"));
864 gtk_widget_show (label_outcharset);
865 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
867 optmenu = gtk_option_menu_new ();
868 gtk_widget_show (optmenu);
869 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
871 optmenu_menu = gtk_menu_new ();
873 #define SET_MENUITEM(str, charset) \
875 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
878 SET_MENUITEM(_("Automatic"), CS_AUTO);
879 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
881 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
883 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
885 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
886 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
887 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
888 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
889 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
890 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
891 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
892 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
893 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
894 #endif /* HAVE_LIBJCONV */
895 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
897 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
898 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
901 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
902 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
904 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
905 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
907 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
908 #endif /* HAVE_LIBJCONV */
910 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
912 send.checkbtn_sendext = checkbtn_sendext;
913 send.entry_sendext = entry_sendext;
914 send.button_sendext = button_sendext;
916 send.checkbtn_savemsg = checkbtn_savemsg;
917 send.checkbtn_queuemsg = checkbtn_queuemsg;
919 send.optmenu_charset = optmenu;
922 static void prefs_compose_create(void)
925 GtkWidget *frame_quote;
926 GtkWidget *vbox_quote;
927 GtkWidget *checkbtn_quote;
929 GtkWidget *label_quotemark;
930 GtkWidget *entry_quotemark;
932 GtkWidget *label_quotefmt;
933 GtkWidget *btn_quotedesc;
934 GtkWidget *scrolledwin_quotefmt;
935 GtkWidget *text_quotefmt;
937 GtkWidget *frame_sig;
939 GtkWidget *checkbtn_autosig;
940 GtkWidget *label_sigsep;
941 GtkWidget *entry_sigsep;
943 GtkWidget *vbox_linewrap;
946 GtkWidget *label_linewrap;
947 GtkObject *spinbtn_linewrap_adj;
948 GtkWidget *spinbtn_linewrap;
949 GtkWidget *checkbtn_wrapquote;
950 GtkWidget *checkbtn_wrapatsend;
952 vbox1 = gtk_vbox_new (FALSE, VSPACING);
953 gtk_widget_show (vbox1);
954 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
955 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
957 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
959 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
960 gtk_widget_show (vbox_quote);
961 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
962 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
964 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
965 _("Quote message when replying"));
967 hbox1 = gtk_hbox_new (FALSE, 8);
968 gtk_widget_show (hbox1);
969 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
971 label_quotemark = gtk_label_new (_("Quotation mark"));
972 gtk_widget_show (label_quotemark);
973 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
975 entry_quotemark = gtk_entry_new ();
976 gtk_widget_show (entry_quotemark);
977 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
978 gtk_widget_set_usize (entry_quotemark, 64, -1);
980 hbox2 = gtk_hbox_new (FALSE, 0);
981 gtk_widget_show (hbox2);
982 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
984 label_quotefmt = gtk_label_new (_("Quotation format:"));
985 gtk_widget_show (label_quotefmt);
986 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
989 gtk_button_new_with_label (_(" Description of symbols "));
990 gtk_widget_show (btn_quotedesc);
991 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
992 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
993 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
995 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
996 gtk_widget_show (scrolledwin_quotefmt);
997 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
998 gtk_scrolled_window_set_policy
999 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1000 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1002 text_quotefmt = gtk_text_new (NULL, NULL);
1003 gtk_widget_show (text_quotefmt);
1004 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1005 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1006 gtk_widget_set_usize(text_quotefmt, -1, 60);
1008 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1010 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1011 gtk_widget_show (vbox_sig);
1012 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1013 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1015 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1016 _("Insert signature automatically"));
1018 hbox1 = gtk_hbox_new (FALSE, 8);
1019 gtk_widget_show (hbox1);
1020 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1022 label_sigsep = gtk_label_new (_("Signature separator"));
1023 gtk_widget_show (label_sigsep);
1024 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1026 entry_sigsep = gtk_entry_new ();
1027 gtk_widget_show (entry_sigsep);
1028 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1029 gtk_widget_set_usize (entry_sigsep, 64, -1);
1032 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1033 gtk_widget_show (vbox_linewrap);
1034 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1036 hbox3 = gtk_hbox_new (FALSE, 8);
1037 gtk_widget_show (hbox3);
1038 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1040 label_linewrap = gtk_label_new (_("Wrap messages at"));
1041 gtk_widget_show (label_linewrap);
1042 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1044 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1045 spinbtn_linewrap = gtk_spin_button_new
1046 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1047 gtk_widget_show (spinbtn_linewrap);
1048 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1049 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1050 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1052 label_linewrap = gtk_label_new (_("characters"));
1053 gtk_widget_show (label_linewrap);
1054 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1056 hbox4 = gtk_hbox_new (FALSE, 32);
1057 gtk_widget_show (hbox4);
1058 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1060 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1062 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1064 compose.checkbtn_quote = checkbtn_quote;
1065 compose.entry_quotemark = entry_quotemark;
1066 compose.text_quotefmt = text_quotefmt;
1067 compose.checkbtn_autosig = checkbtn_autosig;
1068 compose.entry_sigsep = entry_sigsep;
1070 compose.spinbtn_linewrap = spinbtn_linewrap;
1071 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1072 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1073 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1076 static void prefs_display_create(void)
1079 GtkWidget *frame_font;
1081 GtkWidget *label_textfont;
1082 GtkWidget *entry_textfont;
1083 GtkWidget *button_textfont;
1084 GtkWidget *chkbtn_folder_unread;
1085 GtkWidget *chkbtn_transhdr;
1086 GtkWidget *frame_summary;
1088 GtkWidget *chkbtn_swapfrom;
1089 GtkWidget *chkbtn_hscrollbar;
1091 GtkWidget *label_datefmt;
1092 GtkWidget *entry_datefmt;
1093 GtkTooltips *tooltips_datefmt;
1094 GtkWidget *button_dispitem;
1096 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1097 gtk_widget_show (vbox1);
1098 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1099 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1101 PACK_FRAME(vbox1, frame_font, _("Font"));
1103 table1 = gtk_table_new (1, 3, FALSE);
1104 gtk_widget_show (table1);
1105 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1106 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1107 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1108 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1110 label_textfont = gtk_label_new (_("Text"));
1111 gtk_widget_show (label_textfont);
1112 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1113 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1115 entry_textfont = gtk_entry_new ();
1116 gtk_widget_show (entry_textfont);
1117 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1118 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1120 button_textfont = gtk_button_new_with_label ("... ");
1121 gtk_widget_show (button_textfont);
1122 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1124 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1125 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1127 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1128 gtk_widget_show (vbox2);
1129 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1132 (vbox2, chkbtn_transhdr,
1133 _("Translate header name (such as `From:', `Subject:')"));
1135 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1136 _("Display unread number next to folder name"));
1138 /* ---- Summary ---- */
1140 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1142 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1143 gtk_widget_show (vbox2);
1144 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1145 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1148 (vbox2, chkbtn_swapfrom,
1149 _("Display recipient on `From' column if sender is yourself"));
1151 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1153 label_datefmt = gtk_label_new (_("Date format"));
1154 gtk_widget_show (label_datefmt);
1155 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1157 entry_datefmt = gtk_entry_new ();
1158 gtk_widget_show (entry_datefmt);
1159 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1161 tooltips_datefmt = gtk_tooltips_new ();
1162 gtk_tooltips_set_tip
1163 (tooltips_datefmt, entry_datefmt,
1164 _("Ordinary characters placed in the format string are copied "
1165 "without conversion. Conversion specifiers are introduced by "
1166 "a % character, and are replaced as follows:\n"
1167 "%a: the abbreviated weekday name\n"
1168 "%A: the full weekday name\n"
1169 "%b: the abbreviated month name\n"
1170 "%B: the full month name\n"
1171 "%c: the preferred date and time for the current locale\n"
1172 "%C: the century number (year/100)\n"
1173 "%d: the day of the month as a decimal number\n"
1174 "%H: the hour as a decimal number using a 24-hour clock\n"
1175 "%I: the hour as a decimal number using a 12-hour clock\n"
1176 "%j: the day of the year as a decimal number\n"
1177 "%m: the month as a decimal number\n"
1178 "%M: the minute as a decimal number\n"
1179 "%p: either AM or PM\n"
1180 "%S: the second as a decimal number\n"
1181 "%w: the day of the week as a decimal number\n"
1182 "%x: the preferred date for the current locale\n"
1183 "%y: the last two digits of a year\n"
1184 "%Y: the year as a decimal number\n"
1185 "%Z: the time zone or name or abbreviation"),
1188 hbox1 = gtk_hbox_new (FALSE, 8);
1189 gtk_widget_show (hbox1);
1190 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1192 button_dispitem = gtk_button_new_with_label
1193 (_(" Set display item of summary... "));
1194 gtk_widget_show (button_dispitem);
1195 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1196 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1197 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1200 display.entry_textfont = entry_textfont;
1201 display.button_textfont = button_textfont;
1203 display.chkbtn_folder_unread = chkbtn_folder_unread;
1205 display.chkbtn_transhdr = chkbtn_transhdr;
1206 display.chkbtn_swapfrom = chkbtn_swapfrom;
1207 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1208 display.entry_datefmt = entry_datefmt;
1211 static void prefs_message_create(void)
1216 GtkWidget *chkbtn_enablecol;
1217 GtkWidget *button_edit_col;
1218 GtkWidget *chkbtn_mbalnum;
1219 GtkWidget *chkbtn_disphdrpane;
1220 GtkWidget *chkbtn_disphdr;
1221 GtkWidget *hbox_linespc;
1222 GtkWidget *label_linespc;
1223 GtkObject *spinbtn_linespc_adj;
1224 GtkWidget *spinbtn_linespc;
1225 GtkWidget *chkbtn_headspc;
1227 GtkWidget *frame_scr;
1228 GtkWidget *vbox_scr;
1229 GtkWidget *chkbtn_smoothscroll;
1230 GtkWidget *hbox_scr;
1231 GtkWidget *label_scr;
1232 GtkObject *spinbtn_scrollstep_adj;
1233 GtkWidget *spinbtn_scrollstep;
1234 GtkWidget *chkbtn_halfpage;
1236 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1237 gtk_widget_show (vbox1);
1238 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1239 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1241 hbox1 = gtk_hbox_new (FALSE, 8);
1242 gtk_widget_show (hbox1);
1243 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1245 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1246 _("Enable coloration of message"));
1247 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1248 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1251 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1252 gtk_widget_show (button_edit_col);
1253 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1254 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1255 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1257 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1259 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1260 gtk_widget_show (vbox2);
1261 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1264 (vbox2, chkbtn_mbalnum,
1265 _("Display 2-byte alphabet and numeric with 1-byte character"));
1266 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1267 _("Display header pane above message view"));
1268 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1269 _("Display short headers on message view"));
1271 hbox1 = gtk_hbox_new (FALSE, 32);
1272 gtk_widget_show (hbox1);
1273 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1275 hbox_linespc = gtk_hbox_new (FALSE, 8);
1276 gtk_widget_show (hbox1);
1277 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1279 label_linespc = gtk_label_new (_("Line space"));
1280 gtk_widget_show (label_linespc);
1281 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1284 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1285 spinbtn_linespc = gtk_spin_button_new
1286 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1287 gtk_widget_show (spinbtn_linespc);
1288 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1290 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1291 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1293 label_linespc = gtk_label_new (_("pixel(s)"));
1294 gtk_widget_show (label_linespc);
1295 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1298 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1300 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1302 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1303 gtk_widget_show (vbox_scr);
1304 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1305 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1307 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1309 hbox1 = gtk_hbox_new (FALSE, 32);
1310 gtk_widget_show (hbox1);
1311 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1313 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1315 hbox_scr = gtk_hbox_new (FALSE, 8);
1316 gtk_widget_show (hbox_scr);
1317 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1319 label_scr = gtk_label_new (_("Step"));
1320 gtk_widget_show (label_scr);
1321 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1323 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1324 spinbtn_scrollstep = gtk_spin_button_new
1325 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1326 gtk_widget_show (spinbtn_scrollstep);
1327 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1329 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1330 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1333 label_scr = gtk_label_new (_("pixel(s)"));
1334 gtk_widget_show (label_scr);
1335 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1337 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1339 message.chkbtn_enablecol = chkbtn_enablecol;
1340 message.button_edit_col = button_edit_col;
1341 message.chkbtn_mbalnum = chkbtn_mbalnum;
1342 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1343 message.chkbtn_disphdr = chkbtn_disphdr;
1344 message.spinbtn_linespc = spinbtn_linespc;
1345 message.chkbtn_headspc = chkbtn_headspc;
1347 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1348 message.spinbtn_scrollstep = spinbtn_scrollstep;
1349 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1350 message.chkbtn_halfpage = chkbtn_halfpage;
1354 static void prefs_privacy_create(void)
1359 GtkWidget *checkbtn_default_encrypt;
1360 GtkWidget *checkbtn_default_sign;
1361 GtkWidget *checkbtn_auto_check_signatures;
1362 GtkWidget *checkbtn_passphrase_grab;
1364 GtkWidget *menuitem;
1366 GtkWidget *optmenu_menu;
1368 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1369 gtk_widget_show (vbox1);
1370 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1371 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1373 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1374 gtk_widget_show (vbox2);
1375 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1377 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1378 _("Encrypt message by default"));
1380 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1381 _("Sign message by default"));
1383 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1384 _("Automatically check signatures"));
1386 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1387 _("Grab input while entering a passphrase"));
1389 hbox1 = gtk_hbox_new (FALSE, 8);
1390 gtk_widget_show (hbox1);
1391 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1393 /* create default signkey box */
1394 label = gtk_label_new (_("Default Sign Key"));
1395 gtk_widget_show (label);
1396 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1397 optmenu = gtk_option_menu_new ();
1398 gtk_widget_show (optmenu);
1399 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1400 optmenu_menu = gtk_menu_new ();
1402 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1403 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1404 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1405 /* FIXME: disabled because not implemented */
1406 gtk_widget_set_sensitive(optmenu, FALSE);
1408 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1409 privacy.checkbtn_default_sign = checkbtn_default_sign;
1410 privacy.checkbtn_auto_check_signatures
1411 = checkbtn_auto_check_signatures;
1412 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1413 privacy.optmenu_default_signkey = optmenu;
1417 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1421 GtkWidget *menuitem;
1424 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1425 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1426 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1427 g_free(*((gchar **)pparam->data));
1428 *((gchar **)pparam->data) = g_strdup(charset);
1432 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1436 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1438 GtkWidget *menuitem;
1442 g_return_if_fail(optmenu != NULL);
1443 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1445 menu = gtk_option_menu_get_menu(optmenu);
1446 for (cur = GTK_MENU_SHELL(menu)->children;
1447 cur != NULL; cur = cur->next) {
1448 menuitem = GTK_WIDGET(cur->data);
1449 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1450 if (!strcmp(charset, *((gchar **)pparam->data))) {
1451 gtk_option_menu_set_history(optmenu, n);
1457 gtk_option_menu_set_history(optmenu, 0);
1458 prefs_common_charset_set_data_from_optmenu(pparam);
1461 #endif /* USE_GPGME */
1463 static void prefs_interface_create(void)
1468 GtkWidget *checkbtn_emacs;
1469 GtkWidget *checkbtn_openunread;
1470 GtkWidget *checkbtn_openinbox;
1471 GtkWidget *checkbtn_immedexec;
1472 GtkWidget *checkbtn_addaddrbyclick;
1475 GtkWidget *frame_exit;
1476 GtkWidget *vbox_exit;
1478 GtkWidget *checkbtn_confonexit;
1479 GtkWidget *checkbtn_cleanonexit;
1480 GtkWidget *checkbtn_askonclean;
1481 GtkWidget *checkbtn_warnqueued;
1483 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1484 gtk_widget_show (vbox1);
1485 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1486 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1488 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1489 gtk_widget_show (vbox2);
1490 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1492 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1493 _("Emulate the behavior of mouse operation of\n"
1494 "Emacs-based mailer"));
1495 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1499 (vbox2, checkbtn_openunread,
1500 _("Open first unread message when entering a folder"));
1503 (vbox2, checkbtn_openinbox,
1504 _("Go to inbox after receiving new mail"));
1506 vbox3 = gtk_vbox_new (FALSE, 0);
1507 gtk_widget_show (vbox3);
1508 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1511 (vbox3, checkbtn_immedexec,
1512 _("Execute immediately when moving or deleting messages"));
1514 hbox1 = gtk_hbox_new (FALSE, 0);
1515 gtk_widget_show (hbox1);
1516 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1518 label = gtk_label_new
1519 (_("(Messages will be just marked till execution\n"
1520 " if this is turned off)"));
1521 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1522 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1525 (vbox2, checkbtn_addaddrbyclick,
1526 _("Add address to destination when double-clicked"));
1528 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1530 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1531 gtk_widget_show (vbox_exit);
1532 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1533 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1535 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1536 _("Confirm on exit"));
1538 hbox1 = gtk_hbox_new (FALSE, 32);
1539 gtk_widget_show (hbox1);
1540 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1542 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1543 _("Empty trash on exit"));
1544 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1545 _("Ask before emptying"));
1546 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1548 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1549 _("Warn if there are queued messages on exit"));
1551 interface.checkbtn_emacs = checkbtn_emacs;
1552 interface.checkbtn_openunread = checkbtn_openunread;
1553 interface.checkbtn_openinbox = checkbtn_openinbox;
1554 interface.checkbtn_immedexec = checkbtn_immedexec;
1555 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1556 interface.checkbtn_confonexit = checkbtn_confonexit;
1557 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1558 interface.checkbtn_askonclean = checkbtn_askonclean;
1559 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1562 static void prefs_other_create(void)
1567 GtkWidget *uri_frame;
1568 GtkWidget *uri_label;
1569 GtkWidget *uri_combo;
1570 GtkWidget *uri_entry;
1572 GtkWidget *print_frame;
1573 GtkWidget *printcmd_label;
1574 GtkWidget *printcmd_entry;
1576 GtkWidget *exteditor_frame;
1577 GtkWidget *exteditor_label;
1578 GtkWidget *exteditor_combo;
1579 GtkWidget *exteditor_entry;
1581 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1582 gtk_widget_show (vbox1);
1583 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1584 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1586 PACK_FRAME(vbox1, uri_frame,
1587 _("External Web browser (%s will be replaced with URI)"));
1589 hbox1 = gtk_hbox_new (FALSE, 8);
1590 gtk_widget_show (hbox1);
1591 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1592 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1594 uri_label = gtk_label_new (_("Command"));
1595 gtk_widget_show(uri_label);
1596 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1598 uri_combo = gtk_combo_new ();
1599 gtk_widget_show (uri_combo);
1600 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1601 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1602 "netscape -remote 'openURL(%s,raise)'",
1603 "gnome-moz-remote --raise --newwin '%s'",
1604 "kterm -e w3m '%s'",
1605 "kterm -e lynx '%s'",
1608 uri_entry = GTK_COMBO (uri_combo)->entry;
1610 PACK_FRAME(vbox1, print_frame,
1611 _("Printing (%s will be replaced with file name)"));
1613 hbox1 = gtk_hbox_new (FALSE, 8);
1614 gtk_widget_show (hbox1);
1615 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1616 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1618 printcmd_label = gtk_label_new (_("Command"));
1619 gtk_widget_show (printcmd_label);
1620 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1622 printcmd_entry = gtk_entry_new ();
1623 gtk_widget_show (printcmd_entry);
1624 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1626 PACK_FRAME(vbox1, exteditor_frame,
1627 _("External editor (%s will be replaced with file name)"));
1629 hbox1 = gtk_hbox_new (FALSE, 8);
1630 gtk_widget_show (hbox1);
1631 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1632 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1634 exteditor_label = gtk_label_new (_("Command"));
1635 gtk_widget_show (exteditor_label);
1636 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1638 exteditor_combo = gtk_combo_new ();
1639 gtk_widget_show (exteditor_combo);
1640 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1641 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1643 "mgedit --no-fork %s",
1649 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1651 other.uri_combo = uri_combo;
1652 other.uri_entry = uri_entry;
1653 other.printcmd_entry = printcmd_entry;
1655 other.exteditor_combo = exteditor_combo;
1656 other.exteditor_entry = exteditor_entry;
1659 void prefs_quote_colors_dialog(void)
1661 if (!quote_color_win)
1662 prefs_quote_colors_dialog_create();
1663 gtk_widget_show(quote_color_win);
1666 gtk_widget_hide(quote_color_win);
1668 textview_update_message_colors();
1671 static void prefs_quote_colors_dialog_create(void)
1676 GtkWidget *quotelevel1_label;
1677 GtkWidget *quotelevel2_label;
1678 GtkWidget *quotelevel3_label;
1679 GtkWidget *uri_label;
1682 //GtkWidget *cancel_btn;
1683 GtkWidget *recycle_colors_btn;
1684 GtkWidget *frame_colors;
1686 window = gtk_window_new(GTK_WINDOW_DIALOG);
1687 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1688 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1689 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1690 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1691 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1693 vbox = gtk_vbox_new (FALSE, VSPACING);
1694 gtk_container_add (GTK_CONTAINER (window), vbox);
1695 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1696 PACK_FRAME(vbox, frame_colors, _("Colors"));
1698 table = gtk_table_new (4, 2, FALSE);
1699 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1700 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1701 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1702 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1704 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1706 color_buttons.quote_level1_btn = gtk_button_new();
1707 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1708 (GtkAttachOptions) (0),
1709 (GtkAttachOptions) (0), 0, 0);
1710 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1711 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1713 color_buttons.quote_level2_btn = gtk_button_new();
1714 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1715 (GtkAttachOptions) (0),
1716 (GtkAttachOptions) (0), 0, 0);
1717 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1718 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1720 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1721 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1722 (GtkAttachOptions) (0),
1723 (GtkAttachOptions) (0), 0, 0);
1724 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1725 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1727 color_buttons.uri_btn = gtk_button_new_with_label ("");
1728 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1729 (GtkAttachOptions) (0),
1730 (GtkAttachOptions) (0), 0, 0);
1731 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1732 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1734 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1735 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1736 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1737 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1738 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1740 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1741 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1742 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1743 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1744 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1746 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1747 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1748 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1749 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1750 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1752 uri_label = gtk_label_new (_("URI link"));
1753 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1754 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1755 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1756 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1758 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1759 _("Recycle quote colors"));
1761 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1762 NULL, NULL, NULL, NULL);
1763 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1765 gtk_widget_grab_default(ok_btn);
1766 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1767 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1768 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1769 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1771 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1772 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1773 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1774 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1775 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1776 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1777 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1778 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1779 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1780 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1782 /* show message button colors and recycle options */
1783 set_button_bg_color(color_buttons.quote_level1_btn,
1784 prefs_common.quote_level1_col);
1785 set_button_bg_color(color_buttons.quote_level2_btn,
1786 prefs_common.quote_level2_col);
1787 set_button_bg_color(color_buttons.quote_level3_btn,
1788 prefs_common.quote_level3_col);
1789 set_button_bg_color(color_buttons.uri_btn,
1790 prefs_common.uri_col);
1791 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1792 prefs_common.recycle_quote_colors);
1794 gtk_widget_show_all(vbox);
1795 quote_color_win = window;
1798 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1800 gchar *type = (gchar *)data;
1801 gchar *title = NULL;
1802 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1804 GtkColorSelectionDialog *dialog;
1806 if(g_strcasecmp(type, "LEVEL1") == 0) {
1807 title = _("Pick color for quotation level 1");
1808 rgbvalue = prefs_common.quote_level1_col;
1809 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1810 title = _("Pick color for quotation level 2");
1811 rgbvalue = prefs_common.quote_level2_col;
1812 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1813 title = _("Pick color for quotation level 3");
1814 rgbvalue = prefs_common.quote_level3_col;
1815 } else if(g_strcasecmp(type, "URI") == 0) {
1816 title = _("Pick color for URI");
1817 rgbvalue = prefs_common.uri_col;
1818 } else { /* Should never be called */
1819 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1823 color_dialog = gtk_color_selection_dialog_new(title);
1824 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1825 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1826 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1828 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1829 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1830 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1831 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1833 /* preselect the previous color in the color selection dialog */
1834 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1835 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1836 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1837 dialog = (GtkColorSelectionDialog *)color_dialog;
1838 gtk_color_selection_set_color
1839 ((GtkColorSelection *)dialog->colorsel, color);
1841 gtk_widget_show(color_dialog);
1844 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1846 GtkColorSelection *colorsel = (GtkColorSelection *)
1847 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1849 gint red, green, blue, rgbvalue;
1850 gchar *type = (gchar *)data;
1852 gtk_color_selection_get_color(colorsel, color);
1854 red = (gint) (color[0] * 255.0);
1855 green = (gint) (color[1] * 255.0);
1856 blue = (gint) (color[2] * 255.0);
1857 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1860 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1861 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1862 fprintf(stderr, "Color is %x\n", rgbvalue);
1865 if (g_strcasecmp(type, "LEVEL1") == 0) {
1866 prefs_common.quote_level1_col = rgbvalue;
1867 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1868 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1869 prefs_common.quote_level2_col = rgbvalue;
1870 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1871 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1872 prefs_common.quote_level3_col = rgbvalue;
1873 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1874 } else if (g_strcasecmp(type, "URI") == 0) {
1875 prefs_common.uri_col = rgbvalue;
1876 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1878 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1880 gtk_widget_hide(color_dialog);
1883 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1885 gtk_widget_hide(color_dialog);
1888 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1893 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1894 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1895 newstyle->bg[GTK_STATE_NORMAL] = color;
1896 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1897 newstyle->bg[GTK_STATE_ACTIVE] = color;
1899 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1902 static void prefs_enable_message_color_toggled(void)
1906 is_active = gtk_toggle_button_get_active
1907 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1908 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1909 prefs_common.enable_color = is_active;
1912 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1916 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1917 prefs_common.recycle_quote_colors = is_active;
1920 static void prefs_quote_description(void)
1922 if (!quote_desc_win)
1923 prefs_quote_description_create();
1925 gtk_widget_show(quote_desc_win);
1927 gtk_widget_hide(quote_desc_win);
1930 static void prefs_quote_description_create(void)
1938 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1939 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1940 _("Description of symbols"));
1941 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1942 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1943 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1944 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1946 vbox = gtk_vbox_new(FALSE, 8);
1947 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1949 hbox = gtk_hbox_new(FALSE, 4);
1950 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1952 label = gtk_label_new
1963 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1964 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1966 label = gtk_label_new
1969 "Full Name of Sender\n"
1970 "First Name of Sender\n"
1971 "Initial of Sender\n"
1977 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1978 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1980 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1981 NULL, NULL, NULL, NULL);
1982 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1984 gtk_widget_grab_default(ok_btn);
1985 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1986 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1988 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
1989 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1991 gtk_widget_show_all(vbox);
1994 /* functions for setting items of SummaryView */
1996 static struct _SummaryDisplayItem
2000 GtkWidget *chkbtn[N_SUMMARY_COLS];
2003 GtkWidget *cancel_btn;
2006 #define SET_ACTIVE(column, var) \
2007 gtk_toggle_button_set_active \
2008 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2010 #define GET_ACTIVE(column, var) \
2011 prefs_common.var = gtk_toggle_button_get_active \
2012 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2014 void prefs_summary_display_item_set(void)
2016 static gboolean cancelled;
2018 if (!summarydispitem.window)
2019 prefs_summary_display_item_dialog_create(&cancelled);
2020 gtk_widget_grab_focus(summarydispitem.ok_btn);
2021 gtk_widget_show(summarydispitem.window);
2022 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2024 SET_ACTIVE(S_COL_MARK, show_mark);
2025 SET_ACTIVE(S_COL_UNREAD, show_unread);
2026 SET_ACTIVE(S_COL_MIME, show_mime);
2027 SET_ACTIVE(S_COL_NUMBER, show_number);
2028 SET_ACTIVE(S_COL_SIZE, show_size);
2029 SET_ACTIVE(S_COL_DATE, show_date);
2030 SET_ACTIVE(S_COL_FROM, show_from);
2031 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2034 gtk_widget_hide(summarydispitem.window);
2036 if (cancelled != TRUE) {
2037 GET_ACTIVE(S_COL_MARK, show_mark);
2038 GET_ACTIVE(S_COL_UNREAD, show_unread);
2039 GET_ACTIVE(S_COL_MIME, show_mime);
2040 GET_ACTIVE(S_COL_NUMBER, show_number);
2041 GET_ACTIVE(S_COL_SIZE, show_size);
2042 GET_ACTIVE(S_COL_DATE, show_date);
2043 GET_ACTIVE(S_COL_FROM, show_from);
2044 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2046 main_window_reflect_prefs_all();
2050 #define SET_CHECK_BUTTON(column, label) \
2052 summarydispitem.chkbtn[column] = \
2053 gtk_check_button_new_with_label(label); \
2054 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2055 summarydispitem.chkbtn[column], \
2059 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2063 GtkWidget *chkbtn_vbox;
2066 GtkWidget *cancel_btn;
2068 window = gtk_window_new(GTK_WINDOW_DIALOG);
2069 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2070 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2071 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2072 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2073 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2074 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2075 GTK_SIGNAL_FUNC(display_item_delete_event),
2077 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2078 GTK_SIGNAL_FUNC(display_item_key_pressed),
2081 vbox = gtk_vbox_new(FALSE, 8);
2082 gtk_container_add(GTK_CONTAINER(window), vbox);
2084 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2085 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2087 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2088 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2089 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2090 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2091 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2092 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2093 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2094 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2096 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2097 &cancel_btn, _("Cancel"), NULL, NULL);
2098 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2099 gtk_widget_grab_default(ok_btn);
2101 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2102 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2103 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2104 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2106 gtk_widget_show_all(vbox);
2108 summarydispitem.window = window;
2109 summarydispitem.ok_btn = ok_btn;
2110 summarydispitem.cancel_btn = cancel_btn;
2113 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2119 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2125 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2126 gboolean *cancelled)
2134 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2135 gboolean *cancelled)
2137 if (event && event->keyval == GDK_Escape) {
2143 static void prefs_font_select(GtkButton *button)
2145 if (!font_sel_win) {
2146 font_sel_win = gtk_font_selection_dialog_new
2147 (_("Font selection"));
2148 gtk_window_position(GTK_WINDOW(font_sel_win),
2149 GTK_WIN_POS_CENTER);
2150 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2151 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2154 (GTK_OBJECT(font_sel_win), "key_press_event",
2155 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2158 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2160 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2162 gtk_signal_connect_object
2163 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2165 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2166 GTK_OBJECT(font_sel_win));
2169 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2170 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2171 gtk_widget_grab_focus
2172 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2173 gtk_widget_show(font_sel_win);
2176 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2180 if (event && event->keyval == GDK_Escape)
2181 gtk_widget_hide(font_sel_win);
2184 static void prefs_font_selection_ok(GtkButton *button)
2188 fontname = gtk_font_selection_dialog_get_font_name
2189 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2192 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2196 gtk_widget_hide(font_sel_win);
2199 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2202 GtkWidget *menuitem;
2205 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2206 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2207 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2208 g_free(*((gchar **)pparam->data));
2209 *((gchar **)pparam->data) = g_strdup(charset);
2212 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2215 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2217 GtkWidget *menuitem;
2221 g_return_if_fail(optmenu != NULL);
2222 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2224 menu = gtk_option_menu_get_menu(optmenu);
2225 for (cur = GTK_MENU_SHELL(menu)->children;
2226 cur != NULL; cur = cur->next) {
2227 menuitem = GTK_WIDGET(cur->data);
2228 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2229 if (!strcmp(charset, *((gchar **)pparam->data))) {
2230 gtk_option_menu_set_history(optmenu, n);
2236 gtk_option_menu_set_history(optmenu, 0);
2237 prefs_common_charset_set_data_from_optmenu(pparam);
2240 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2243 if (event && event->keyval == GDK_Escape)
2244 gtk_widget_hide(dialog.window);
2247 static void prefs_common_ok(GtkButton *button)
2249 prefs_common_apply(button);
2250 gtk_widget_hide(dialog.window);
2251 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2252 gtk_widget_hide(quote_desc_win);
2255 static void prefs_common_apply(GtkButton *button)
2257 prefs_set_data_from_dialog(param);
2258 main_window_reflect_prefs_all();
2259 prefs_common_save_config();