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;
108 GtkWidget *entry_dateformat;
109 GtkTooltips tooltips_dateformat
113 static struct Message {
114 GtkWidget *chkbtn_enablecol;
115 GtkWidget *button_edit_col;
116 GtkWidget *chkbtn_mbalnum;
117 GtkWidget *chkbtn_disphdrpane;
118 GtkWidget *chkbtn_disphdr;
119 GtkWidget *spinbtn_linespc;
120 GtkObject *spinbtn_linespc_adj;
121 GtkWidget *chkbtn_headspc;
123 GtkWidget *chkbtn_smoothscroll;
124 GtkWidget *spinbtn_scrollstep;
125 GtkObject *spinbtn_scrollstep_adj;
126 GtkWidget *chkbtn_halfpage;
130 static struct Privacy {
131 GtkWidget *checkbtn_default_encrypt;
132 GtkWidget *checkbtn_default_sign;
133 GtkWidget *checkbtn_auto_check_signatures;
134 GtkWidget *checkbtn_passphrase_grab;
135 GtkWidget *optmenu_default_signkey;
139 static struct Interface {
140 GtkWidget *checkbtn_emacs;
141 GtkWidget *checkbtn_openunread;
142 GtkWidget *checkbtn_openinbox;
143 GtkWidget *checkbtn_immedexec;
144 GtkWidget *checkbtn_confonexit;
145 GtkWidget *checkbtn_cleanonexit;
146 GtkWidget *checkbtn_askonclean;
147 GtkWidget *checkbtn_warnqueued;
148 GtkWidget *checkbtn_addaddrbyclick;
151 static struct Other {
152 GtkWidget *uri_combo;
153 GtkWidget *uri_entry;
154 GtkWidget *printcmd_entry;
155 GtkWidget *exteditor_combo;
156 GtkWidget *exteditor_entry;
159 static struct MessageColorButtons {
160 GtkWidget *quote_level1_btn;
161 GtkWidget *quote_level2_btn;
162 GtkWidget *quote_level3_btn;
166 static GtkWidget *quote_desc_win;
167 static GtkWidget *font_sel_win;
168 static GtkWidget *quote_color_win;
169 static GtkWidget *color_dialog;
171 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
172 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
174 static void prefs_common_default_signkey_set_data_from_optmenu
176 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
180 parameter name, default value, pointer to the prefs variable, data type,
181 pointer to the widget pointer,
182 pointer to the function for data setting,
183 pointer to the function for widget setting
186 static PrefParam param[] = {
188 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
189 &receive.checkbtn_incext,
190 prefs_set_data_from_toggle, prefs_set_toggle},
191 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
192 &receive.entry_incext,
193 prefs_set_data_from_entry, prefs_set_entry},
195 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
196 &receive.checkbtn_local,
197 prefs_set_data_from_toggle, prefs_set_toggle},
198 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
199 &receive.checkbtn_filter_on_inc,
200 prefs_set_data_from_toggle, prefs_set_toggle},
201 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
202 &receive.entry_spool,
203 prefs_set_data_from_entry, prefs_set_entry},
205 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
206 &receive.checkbtn_autochk,
207 prefs_set_data_from_toggle, prefs_set_toggle},
208 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
209 &receive.spinbtn_autochk,
210 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
211 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
212 &receive.checkbtn_chkonstartup,
213 prefs_set_data_from_toggle, prefs_set_toggle},
215 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
216 &receive.spinbtn_maxarticle,
217 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
220 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
221 &send.checkbtn_sendext,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
224 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
225 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
226 &send.checkbtn_savemsg,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
229 &send.checkbtn_queuemsg,
230 prefs_set_data_from_toggle, prefs_set_toggle},
232 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
233 &send.optmenu_charset,
234 prefs_common_charset_set_data_from_optmenu,
235 prefs_common_charset_set_optmenu},
238 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
239 &compose.checkbtn_quote,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
242 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
243 {"quote_format", "On %d\\n%f wrote:\\n\\n",
244 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
245 prefs_set_data_from_text, prefs_set_text},
247 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
248 &compose.checkbtn_autosig,
249 prefs_set_data_from_toggle, prefs_set_toggle},
250 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
251 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
253 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
254 &compose.spinbtn_linewrap,
255 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
256 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
257 &compose.checkbtn_wrapquote,
258 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"linewrap_before_sending", "FALSE",
260 &prefs_common.linewrap_at_send, P_BOOL,
261 &compose.checkbtn_wrapatsend,
262 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
268 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
270 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
271 &prefs_common.textfont, P_STRING,
272 &display.entry_textfont,
273 prefs_set_data_from_entry, prefs_set_entry},
275 {"display_folder_unread_num", "TRUE",
276 &prefs_common.display_folder_unread, P_BOOL,
277 &display.chkbtn_folder_unread,
278 prefs_set_data_from_toggle, prefs_set_toggle},
280 /* Display: Summary View */
281 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
282 &display.chkbtn_transhdr,
283 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
285 &display.chkbtn_swapfrom,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
288 &display.chkbtn_hscrollbar,
289 prefs_set_data_from_toggle, prefs_set_toggle},
292 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
293 P_STRING, &display.entry_dateformat,
294 prefs_set_data_from_entry, prefs_set_entry},
298 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
300 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
302 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
305 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
307 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
309 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
311 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
313 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
315 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
317 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
319 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
323 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
325 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
327 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
329 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
331 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
333 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
335 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
337 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
339 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
341 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
343 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
345 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
347 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
349 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
351 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
353 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
354 P_INT, NULL, NULL, NULL},
355 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
357 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
359 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
361 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
363 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
365 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
367 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
369 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
371 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
373 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
375 {"compose_width", "600", &prefs_common.compose_width, P_INT,
377 {"compose_height", "560", &prefs_common.compose_height, P_INT,
381 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
382 &message.chkbtn_enablecol,
383 prefs_set_data_from_toggle, prefs_set_toggle},
385 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
387 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
389 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
391 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
393 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
395 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
396 P_BOOL, NULL, NULL, NULL},
398 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
399 &message.chkbtn_mbalnum,
400 prefs_set_data_from_toggle, prefs_set_toggle},
401 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
402 P_BOOL, &message.chkbtn_disphdrpane,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
405 &message.chkbtn_disphdr,
406 prefs_set_data_from_toggle, prefs_set_toggle},
407 {"line_space", "2", &prefs_common.line_space, P_INT,
408 &message.spinbtn_linespc,
409 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
410 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
411 &message.chkbtn_headspc,
412 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"enable_smooth_scroll", "FALSE",
415 &prefs_common.enable_smooth_scroll, P_BOOL,
416 &message.chkbtn_smoothscroll,
417 prefs_set_data_from_toggle, prefs_set_toggle},
418 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
419 &message.spinbtn_scrollstep,
420 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
421 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
422 &message.chkbtn_halfpage,
423 prefs_set_data_from_toggle, prefs_set_toggle},
426 {"mime_image_viewer", "display '%s'",
427 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
428 {"mime_audio_player", "play '%s'",
429 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
433 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
434 &privacy.checkbtn_default_encrypt,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
437 &privacy.checkbtn_default_sign,
438 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"auto_check_signatures", "TRUE",
440 &prefs_common.auto_check_signatures, P_BOOL,
441 &privacy.checkbtn_auto_check_signatures,
442 prefs_set_data_from_toggle, prefs_set_toggle},
443 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
444 &privacy.checkbtn_passphrase_grab,
445 prefs_set_data_from_toggle, prefs_set_toggle},
446 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
447 &privacy.optmenu_default_signkey,
448 prefs_common_default_signkey_set_data_from_optmenu,
449 prefs_common_default_signkey_set_optmenu},
450 #endif /* USE_GPGME */
453 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
455 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
458 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
459 &interface.checkbtn_emacs,
460 prefs_set_data_from_toggle, prefs_set_toggle},
461 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
462 P_BOOL, &interface.checkbtn_openunread,
463 prefs_set_data_from_toggle, prefs_set_toggle},
464 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
465 P_BOOL, &interface.checkbtn_openinbox,
466 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
468 &interface.checkbtn_immedexec,
469 prefs_set_data_from_toggle, prefs_set_toggle},
470 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
471 P_BOOL, &interface.checkbtn_addaddrbyclick,
472 prefs_set_data_from_toggle, prefs_set_toggle},
474 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
475 &interface.checkbtn_confonexit,
476 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
478 &interface.checkbtn_cleanonexit,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
481 &interface.checkbtn_askonclean,
482 prefs_set_data_from_toggle, prefs_set_toggle},
483 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
484 P_BOOL, &interface.checkbtn_warnqueued,
485 prefs_set_data_from_toggle, prefs_set_toggle},
488 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
489 &prefs_common.uri_cmd, P_STRING,
490 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
491 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
492 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
493 {"ext_editor_command", "gedit %s",
494 &prefs_common.ext_editor_cmd, P_STRING,
495 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
497 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
501 #define VSPACING_NARROW 4
502 #define VBOX_BORDER 16
503 #define DEFAULT_ENTRY_WIDTH 80
504 #define PREFSBUFSIZE 1024
506 /* widget creating functions */
507 static void prefs_common_create (void);
508 static void prefs_receive_create (void);
509 static void prefs_send_create (void);
510 static void prefs_compose_create (void);
511 static void prefs_display_create (void);
512 static void prefs_message_create (void);
514 static void prefs_privacy_create (void);
516 static void prefs_interface_create (void);
517 static void prefs_other_create (void);
519 static void prefs_quote_description (void);
520 static void prefs_quote_description_create (void);
521 static void prefs_quote_colors_dialog (void);
522 static void prefs_quote_colors_dialog_create (void);
523 static void quote_color_set_dialog (GtkWidget *widget,
525 static void quote_colors_set_dialog_ok (GtkWidget *widget,
527 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
529 static void set_button_bg_color (GtkWidget *widget,
531 static void prefs_enable_message_color_toggled (void);
532 static void prefs_recycle_colors_toggled (GtkWidget *widget);
534 /* functions for setting items of SummaryView */
535 static void prefs_summary_display_item_dialog_create
536 (gboolean *cancelled);
537 static void display_item_ok (GtkWidget *widget,
538 gboolean *cancelled);
539 static void display_item_cancel (GtkWidget *widget,
540 gboolean *cancelled);
541 static gint display_item_delete_event (GtkWidget *widget,
543 gboolean *cancelled);
544 static void display_item_key_pressed (GtkWidget *widget,
546 gboolean *cancelled);
548 static void prefs_font_select (GtkButton *button);
549 static void prefs_font_selection_key_pressed (GtkWidget *widget,
552 static void prefs_font_selection_ok (GtkButton *button);
554 static void prefs_common_key_pressed (GtkWidget *widget,
557 static void prefs_common_ok (GtkButton *button);
558 static void prefs_common_apply (GtkButton *button);
560 void prefs_common_read_config(void)
562 prefs_read_config(param, "Common", COMMON_RC);
565 void prefs_common_save_config(void)
567 prefs_save_config(param, "Common", COMMON_RC);
570 void prefs_common_open(void)
572 if (!dialog.window) {
573 prefs_common_create();
576 manage_window_set_transient(GTK_WINDOW(dialog.window));
577 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
578 gtk_widget_grab_focus(dialog.ok_btn);
580 prefs_set_dialog(param);
582 gtk_widget_show(dialog.window);
585 static void prefs_common_create(void)
589 debug_print(_("Creating common preferences window...\n"));
591 prefs_dialog_create(&dialog);
592 gtk_window_set_title (GTK_WINDOW(dialog.window),
593 _("Common Preferences"));
594 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
595 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
596 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
597 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
598 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
599 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
600 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
601 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
602 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
603 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
604 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
605 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
606 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
607 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
608 GTK_OBJECT(dialog.window));
610 /* create all widgets on notebook */
611 prefs_receive_create();
612 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
614 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
615 prefs_compose_create();
616 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
617 prefs_display_create();
618 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
619 prefs_message_create();
620 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
622 prefs_privacy_create();
623 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
625 prefs_interface_create();
626 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
627 prefs_other_create();
628 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
630 gtk_widget_show_all(dialog.window);
633 static void prefs_receive_create(void)
637 GtkWidget *frame_incext;
638 GtkWidget *checkbtn_incext;
640 GtkWidget *label_incext;
641 GtkWidget *entry_incext;
642 GtkWidget *button_incext;
644 GtkWidget *frame_spool;
645 GtkWidget *checkbtn_local;
646 GtkWidget *checkbtn_filter_on_inc;
647 GtkWidget *label_spool;
648 GtkWidget *entry_spool;
650 GtkWidget *hbox_autochk;
651 GtkWidget *checkbtn_autochk;
652 GtkWidget *label_autochk1;
653 GtkObject *spinbtn_autochk_adj;
654 GtkWidget *spinbtn_autochk;
655 GtkWidget *label_autochk2;
656 GtkWidget *checkbtn_chkonstartup;
658 GtkWidget *frame_news;
659 GtkWidget *label_maxarticle;
660 GtkWidget *spinbtn_maxarticle;
661 GtkObject *spinbtn_maxarticle_adj;
663 vbox1 = gtk_vbox_new (FALSE, VSPACING);
664 gtk_widget_show (vbox1);
665 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
666 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
668 PACK_FRAME(vbox1, frame_incext, _("External program"));
670 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
671 gtk_widget_show (vbox2);
672 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
673 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
675 /* Use of external incorporation program */
676 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
677 _("Use external program for incorporation"));
679 hbox = gtk_hbox_new (FALSE, 8);
680 gtk_widget_show (hbox);
681 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
682 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
684 label_incext = gtk_label_new (_("Program path"));
685 gtk_widget_show (label_incext);
686 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
688 entry_incext = gtk_entry_new ();
689 gtk_widget_show (entry_incext);
690 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
692 button_incext = gtk_button_new_with_label ("... ");
693 gtk_widget_show (button_incext);
694 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
696 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
698 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
699 gtk_widget_show (vbox2);
700 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
701 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
703 hbox = gtk_hbox_new (FALSE, 32);
704 gtk_widget_show (hbox);
705 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
707 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
708 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
709 _("Filter on incorporation"));
710 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
712 hbox = gtk_hbox_new (FALSE, 8);
713 gtk_widget_show (hbox);
714 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
715 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
717 label_spool = gtk_label_new (_("Spool directory"));
718 gtk_widget_show (label_spool);
719 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
721 entry_spool = gtk_entry_new ();
722 gtk_widget_show (entry_spool);
723 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
725 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
726 gtk_widget_show (vbox2);
727 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
730 hbox_autochk = gtk_hbox_new (FALSE, 8);
731 gtk_widget_show (hbox_autochk);
732 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
734 gtk_widget_set_sensitive(hbox_autochk, FALSE);
736 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
737 _("Auto-check new mail"));
739 label_autochk1 = gtk_label_new (_("each"));
740 gtk_widget_show (label_autochk1);
741 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
743 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
744 spinbtn_autochk = gtk_spin_button_new
745 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
746 gtk_widget_show (spinbtn_autochk);
747 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
748 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
749 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
751 label_autochk2 = gtk_label_new (_("minute(s)"));
752 gtk_widget_show (label_autochk2);
753 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
755 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
756 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
757 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
759 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
760 _("Check new mail on startup"));
762 PACK_FRAME(vbox1, frame_news, _("News"));
764 hbox = gtk_hbox_new (FALSE, 8);
765 gtk_widget_show (hbox);
766 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
767 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
769 label_maxarticle = gtk_label_new
770 (_("Maximum article number to download\n"
771 "(unlimited if 0 is specified)"));
772 gtk_widget_show (label_maxarticle);
773 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
774 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
776 spinbtn_maxarticle_adj =
777 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
778 spinbtn_maxarticle = gtk_spin_button_new
779 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
780 gtk_widget_show (spinbtn_maxarticle);
781 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
783 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
784 gtk_spin_button_set_numeric
785 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
787 receive.checkbtn_incext = checkbtn_incext;
788 receive.entry_incext = entry_incext;
789 receive.button_incext = button_incext;
791 receive.checkbtn_local = checkbtn_local;
792 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
793 receive.entry_spool = entry_spool;
795 receive.checkbtn_autochk = checkbtn_autochk;
796 receive.spinbtn_autochk = spinbtn_autochk;
797 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
799 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
801 receive.spinbtn_maxarticle = spinbtn_maxarticle;
802 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
805 static void prefs_send_create(void)
809 GtkWidget *frame_sendext;
810 GtkWidget *vbox_sendext;
811 GtkWidget *checkbtn_sendext;
813 GtkWidget *label_sendext;
814 GtkWidget *entry_sendext;
815 GtkWidget *button_sendext;
816 GtkWidget *checkbtn_savemsg;
817 GtkWidget *checkbtn_queuemsg;
818 GtkWidget *label_outcharset;
820 GtkWidget *optmenu_menu;
823 vbox1 = gtk_vbox_new (FALSE, VSPACING);
824 gtk_widget_show (vbox1);
825 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
826 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
828 PACK_FRAME(vbox1, frame_sendext, _("External program"));
830 gtk_widget_set_sensitive(frame_sendext, FALSE);
832 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
833 gtk_widget_show (vbox_sendext);
834 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
835 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
837 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
838 _("Use external program for sending"));
840 hbox1 = gtk_hbox_new (FALSE, 8);
841 gtk_widget_show (hbox1);
842 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
843 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
845 label_sendext = gtk_label_new (_("Program path"));
846 gtk_widget_show (label_sendext);
847 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
849 entry_sendext = gtk_entry_new ();
850 gtk_widget_show (entry_sendext);
851 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
853 button_sendext = gtk_button_new_with_label ("... ");
854 gtk_widget_show (button_sendext);
855 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
857 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
858 gtk_widget_show (vbox2);
859 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
861 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
862 _("Save sent message to outbox"));
863 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
864 _("Queue message that failed to send"));
866 hbox1 = gtk_hbox_new (FALSE, 8);
867 gtk_widget_show (hbox1);
868 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
870 label_outcharset = gtk_label_new (_("Outgoing codeset"));
871 gtk_widget_show (label_outcharset);
872 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
874 optmenu = gtk_option_menu_new ();
875 gtk_widget_show (optmenu);
876 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
878 optmenu_menu = gtk_menu_new ();
880 #define SET_MENUITEM(str, charset) \
882 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
885 SET_MENUITEM(_("Automatic"), CS_AUTO);
886 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
888 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
890 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
892 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
893 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
894 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
895 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
896 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
897 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
898 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
899 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
900 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
901 #endif /* HAVE_LIBJCONV */
902 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
904 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
905 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
908 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
909 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
911 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
912 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
914 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
915 #endif /* HAVE_LIBJCONV */
917 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
919 send.checkbtn_sendext = checkbtn_sendext;
920 send.entry_sendext = entry_sendext;
921 send.button_sendext = button_sendext;
923 send.checkbtn_savemsg = checkbtn_savemsg;
924 send.checkbtn_queuemsg = checkbtn_queuemsg;
926 send.optmenu_charset = optmenu;
929 static void prefs_compose_create(void)
932 GtkWidget *frame_quote;
933 GtkWidget *vbox_quote;
934 GtkWidget *checkbtn_quote;
936 GtkWidget *label_quotemark;
937 GtkWidget *entry_quotemark;
939 GtkWidget *label_quotefmt;
940 GtkWidget *btn_quotedesc;
941 GtkWidget *scrolledwin_quotefmt;
942 GtkWidget *text_quotefmt;
944 GtkWidget *frame_sig;
946 GtkWidget *checkbtn_autosig;
947 GtkWidget *label_sigsep;
948 GtkWidget *entry_sigsep;
950 GtkWidget *vbox_linewrap;
953 GtkWidget *label_linewrap;
954 GtkObject *spinbtn_linewrap_adj;
955 GtkWidget *spinbtn_linewrap;
956 GtkWidget *checkbtn_wrapquote;
957 GtkWidget *checkbtn_wrapatsend;
959 vbox1 = gtk_vbox_new (FALSE, VSPACING);
960 gtk_widget_show (vbox1);
961 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
962 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
964 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
966 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
967 gtk_widget_show (vbox_quote);
968 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
969 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
971 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
972 _("Quote message when replying"));
974 hbox1 = gtk_hbox_new (FALSE, 8);
975 gtk_widget_show (hbox1);
976 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
978 label_quotemark = gtk_label_new (_("Quotation mark"));
979 gtk_widget_show (label_quotemark);
980 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
982 entry_quotemark = gtk_entry_new ();
983 gtk_widget_show (entry_quotemark);
984 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
985 gtk_widget_set_usize (entry_quotemark, 64, -1);
987 hbox2 = gtk_hbox_new (FALSE, 0);
988 gtk_widget_show (hbox2);
989 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
991 label_quotefmt = gtk_label_new (_("Quotation format:"));
992 gtk_widget_show (label_quotefmt);
993 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
996 gtk_button_new_with_label (_(" Description of symbols "));
997 gtk_widget_show (btn_quotedesc);
998 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
999 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1000 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1002 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1003 gtk_widget_show (scrolledwin_quotefmt);
1004 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1005 gtk_scrolled_window_set_policy
1006 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1007 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1009 text_quotefmt = gtk_text_new (NULL, NULL);
1010 gtk_widget_show (text_quotefmt);
1011 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1012 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1013 gtk_widget_set_usize(text_quotefmt, -1, 60);
1015 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1017 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1018 gtk_widget_show (vbox_sig);
1019 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1020 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1022 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1023 _("Insert signature automatically"));
1025 hbox1 = gtk_hbox_new (FALSE, 8);
1026 gtk_widget_show (hbox1);
1027 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1029 label_sigsep = gtk_label_new (_("Signature separator"));
1030 gtk_widget_show (label_sigsep);
1031 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1033 entry_sigsep = gtk_entry_new ();
1034 gtk_widget_show (entry_sigsep);
1035 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1036 gtk_widget_set_usize (entry_sigsep, 64, -1);
1039 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1040 gtk_widget_show (vbox_linewrap);
1041 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1043 hbox3 = gtk_hbox_new (FALSE, 8);
1044 gtk_widget_show (hbox3);
1045 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1047 label_linewrap = gtk_label_new (_("Wrap messages at"));
1048 gtk_widget_show (label_linewrap);
1049 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1051 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1052 spinbtn_linewrap = gtk_spin_button_new
1053 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1054 gtk_widget_show (spinbtn_linewrap);
1055 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1056 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1057 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1059 label_linewrap = gtk_label_new (_("characters"));
1060 gtk_widget_show (label_linewrap);
1061 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1063 hbox4 = gtk_hbox_new (FALSE, 32);
1064 gtk_widget_show (hbox4);
1065 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1067 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1069 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1071 compose.checkbtn_quote = checkbtn_quote;
1072 compose.entry_quotemark = entry_quotemark;
1073 compose.text_quotefmt = text_quotefmt;
1074 compose.checkbtn_autosig = checkbtn_autosig;
1075 compose.entry_sigsep = entry_sigsep;
1077 compose.spinbtn_linewrap = spinbtn_linewrap;
1078 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1079 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1080 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1083 static void prefs_display_create(void)
1086 GtkWidget *frame_font;
1088 GtkWidget *label_textfont;
1089 GtkWidget *entry_textfont;
1090 GtkWidget *button_textfont;
1091 GtkWidget *chkbtn_folder_unread;
1092 GtkWidget *chkbtn_transhdr;
1093 GtkWidget *frame_summary;
1095 GtkWidget *chkbtn_swapfrom;
1096 GtkWidget *chkbtn_hscrollbar;
1098 GtkWidget *button_dispitem;
1100 #ifdef HAVE_STRFTIME
1101 GtkWidget *hbox_dateformat;
1102 GtkWidget *label_dateformat;
1103 GtkWidget *entry_dateformat;
1104 GtkTooltips *tooltips_dateformat;
1107 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1108 gtk_widget_show (vbox1);
1109 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1110 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1112 PACK_FRAME(vbox1, frame_font, _("Font"));
1114 table1 = gtk_table_new (1, 3, FALSE);
1115 gtk_widget_show (table1);
1116 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1117 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1118 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1119 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1121 label_textfont = gtk_label_new (_("Text"));
1122 gtk_widget_show (label_textfont);
1123 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1124 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1126 entry_textfont = gtk_entry_new ();
1127 gtk_widget_show (entry_textfont);
1128 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1129 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1131 button_textfont = gtk_button_new_with_label ("... ");
1132 gtk_widget_show (button_textfont);
1133 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1135 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1136 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1138 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1139 gtk_widget_show (vbox2);
1140 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1143 (vbox2, chkbtn_transhdr,
1144 _("Translate header name (such as `From:', `Subject:')"));
1146 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1147 _("Display unread number next to folder name"));
1149 /* ---- Summary ---- */
1151 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1153 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1154 gtk_widget_show (vbox2);
1155 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1156 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1159 (vbox2, chkbtn_swapfrom,
1160 _("Display recipient on `From' column if sender is yourself"));
1162 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1164 hbox1 = gtk_hbox_new (FALSE, 8);
1165 gtk_widget_show (hbox1);
1166 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1168 button_dispitem = gtk_button_new_with_label
1169 (_(" Set display item of summary... "));
1170 gtk_widget_show (button_dispitem);
1171 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1172 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1173 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1176 /* ---- Date format ---- */
1178 #ifdef HAVE_STRFTIME
1179 hbox1 = gtk_hbox_new (FALSE, 8);
1180 gtk_widget_show (hbox1);
1181 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1183 hbox_dateformat = gtk_hbox_new (FALSE, 8);
1184 gtk_widget_show (hbox1);
1185 gtk_box_pack_start (GTK_BOX (hbox1), hbox_dateformat, FALSE, TRUE, 0);
1187 label_dateformat = gtk_label_new (_("Date format"));
1188 gtk_widget_show (label_dateformat);
1189 gtk_box_pack_start (GTK_BOX (hbox_dateformat), label_dateformat,
1191 entry_dateformat = gtk_entry_new ();
1192 gtk_widget_show (entry_dateformat);
1193 gtk_box_pack_start (GTK_BOX (hbox1), entry_dateformat, TRUE, TRUE, 0);
1195 tooltips_dateformat = gtk_tooltips_new();
1196 gtk_tooltips_set_tip(tooltips_dateformat, entry_dateformat,
1197 _("Ordinary characters placed in the format string are copied "
1198 "without conversion. Conversion specifiers are introduced by "
1199 "a % character, and are replaced as follows:\n"
1200 "%a the abbreviated weekday name\n"
1201 "%A the full weekday name\n"
1202 "%b the abbreviated month name\n"
1203 "%B the full month name\n"
1204 "%c the preferred date and time for the current locale\n"
1205 "%C the century number (year/100)\n"
1206 "%d the day of the month as a decimal number\n"
1207 "%H the hour as a decimal number using a 24-hour clock\n"
1208 "%I the hour as a decimal number using a 12-hour clock\n"
1209 "%j the day of the year as a decimal number\n"
1210 "%m the month as a decimal number\n"
1211 "%M the minute as a decimal number\n"
1212 "%p either AM or PM\n"
1213 "%S the second as a decimal number\n"
1214 "%w the day of the week as a decimal number\n"
1215 "%x the preferred date for the current locale\n"
1216 "%y the last two digits of a year\n"
1217 "%Y the year as a decimal number\n"
1218 "%Z the time zone or name or abbreviation"
1224 display.entry_textfont = entry_textfont;
1225 display.button_textfont = button_textfont;
1227 display.chkbtn_folder_unread = chkbtn_folder_unread;
1229 display.chkbtn_transhdr = chkbtn_transhdr;
1230 display.chkbtn_swapfrom = chkbtn_swapfrom;
1231 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1233 #ifdef HAVE_STRFTIME
1234 display.entry_dateformat = entry_dateformat;
1238 static void prefs_message_create(void)
1243 GtkWidget *chkbtn_enablecol;
1244 GtkWidget *button_edit_col;
1245 GtkWidget *chkbtn_mbalnum;
1246 GtkWidget *chkbtn_disphdrpane;
1247 GtkWidget *chkbtn_disphdr;
1248 GtkWidget *hbox_linespc;
1249 GtkWidget *label_linespc;
1250 GtkObject *spinbtn_linespc_adj;
1251 GtkWidget *spinbtn_linespc;
1252 GtkWidget *chkbtn_headspc;
1254 GtkWidget *frame_scr;
1255 GtkWidget *vbox_scr;
1256 GtkWidget *chkbtn_smoothscroll;
1257 GtkWidget *hbox_scr;
1258 GtkWidget *label_scr;
1259 GtkObject *spinbtn_scrollstep_adj;
1260 GtkWidget *spinbtn_scrollstep;
1261 GtkWidget *chkbtn_halfpage;
1263 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1264 gtk_widget_show (vbox1);
1265 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1266 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1268 hbox1 = gtk_hbox_new (FALSE, 8);
1269 gtk_widget_show (hbox1);
1270 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1272 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1273 _("Enable coloration of message"));
1274 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1275 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1278 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1279 gtk_widget_show (button_edit_col);
1280 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1281 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1282 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1284 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1286 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1287 gtk_widget_show (vbox2);
1288 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1291 (vbox2, chkbtn_mbalnum,
1292 _("Display 2-byte alphabet and numeric with 1-byte character"));
1293 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1294 _("Display header pane above message view"));
1295 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1296 _("Display short headers on message view"));
1298 hbox1 = gtk_hbox_new (FALSE, 32);
1299 gtk_widget_show (hbox1);
1300 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1302 hbox_linespc = gtk_hbox_new (FALSE, 8);
1303 gtk_widget_show (hbox1);
1304 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1306 label_linespc = gtk_label_new (_("Line space"));
1307 gtk_widget_show (label_linespc);
1308 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1311 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1312 spinbtn_linespc = gtk_spin_button_new
1313 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1314 gtk_widget_show (spinbtn_linespc);
1315 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1317 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1318 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1320 label_linespc = gtk_label_new (_("pixel(s)"));
1321 gtk_widget_show (label_linespc);
1322 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1325 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1327 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1329 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1330 gtk_widget_show (vbox_scr);
1331 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1332 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1334 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1336 hbox1 = gtk_hbox_new (FALSE, 32);
1337 gtk_widget_show (hbox1);
1338 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1340 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1342 hbox_scr = gtk_hbox_new (FALSE, 8);
1343 gtk_widget_show (hbox_scr);
1344 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1346 label_scr = gtk_label_new (_("Step"));
1347 gtk_widget_show (label_scr);
1348 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1350 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1351 spinbtn_scrollstep = gtk_spin_button_new
1352 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1353 gtk_widget_show (spinbtn_scrollstep);
1354 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1356 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1357 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1360 label_scr = gtk_label_new (_("pixel(s)"));
1361 gtk_widget_show (label_scr);
1362 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1364 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1366 message.chkbtn_enablecol = chkbtn_enablecol;
1367 message.button_edit_col = button_edit_col;
1368 message.chkbtn_mbalnum = chkbtn_mbalnum;
1369 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1370 message.chkbtn_disphdr = chkbtn_disphdr;
1371 message.spinbtn_linespc = spinbtn_linespc;
1372 message.chkbtn_headspc = chkbtn_headspc;
1374 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1375 message.spinbtn_scrollstep = spinbtn_scrollstep;
1376 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1377 message.chkbtn_halfpage = chkbtn_halfpage;
1381 static void prefs_privacy_create(void)
1386 GtkWidget *checkbtn_default_encrypt;
1387 GtkWidget *checkbtn_default_sign;
1388 GtkWidget *checkbtn_auto_check_signatures;
1389 GtkWidget *checkbtn_passphrase_grab;
1391 GtkWidget *menuitem;
1393 GtkWidget *optmenu_menu;
1395 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1396 gtk_widget_show (vbox1);
1397 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1398 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1400 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1401 gtk_widget_show (vbox2);
1402 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1404 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1405 _("Encrypt message by default"));
1407 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1408 _("Sign message by default"));
1410 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1411 _("Automatically check signatures"));
1413 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1414 _("Grab input while entering a passphrase"));
1416 hbox1 = gtk_hbox_new (FALSE, 8);
1417 gtk_widget_show (hbox1);
1418 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1420 /* create default signkey box */
1421 label = gtk_label_new (_("Default Sign Key"));
1422 gtk_widget_show (label);
1423 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1424 optmenu = gtk_option_menu_new ();
1425 gtk_widget_show (optmenu);
1426 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1427 optmenu_menu = gtk_menu_new ();
1429 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1430 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1431 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1432 /* FIXME: disabled because not implemented */
1433 gtk_widget_set_sensitive(optmenu, FALSE);
1435 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1436 privacy.checkbtn_default_sign = checkbtn_default_sign;
1437 privacy.checkbtn_auto_check_signatures
1438 = checkbtn_auto_check_signatures;
1439 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1440 privacy.optmenu_default_signkey = optmenu;
1444 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1448 GtkWidget *menuitem;
1451 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1452 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1453 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1454 g_free(*((gchar **)pparam->data));
1455 *((gchar **)pparam->data) = g_strdup(charset);
1459 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1463 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1465 GtkWidget *menuitem;
1469 g_return_if_fail(optmenu != NULL);
1470 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1472 menu = gtk_option_menu_get_menu(optmenu);
1473 for (cur = GTK_MENU_SHELL(menu)->children;
1474 cur != NULL; cur = cur->next) {
1475 menuitem = GTK_WIDGET(cur->data);
1476 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1477 if (!strcmp(charset, *((gchar **)pparam->data))) {
1478 gtk_option_menu_set_history(optmenu, n);
1484 gtk_option_menu_set_history(optmenu, 0);
1485 prefs_common_charset_set_data_from_optmenu(pparam);
1488 #endif /* USE_GPGME */
1490 static void prefs_interface_create(void)
1495 GtkWidget *checkbtn_emacs;
1496 GtkWidget *checkbtn_openunread;
1497 GtkWidget *checkbtn_openinbox;
1498 GtkWidget *checkbtn_immedexec;
1499 GtkWidget *checkbtn_addaddrbyclick;
1502 GtkWidget *frame_exit;
1503 GtkWidget *vbox_exit;
1505 GtkWidget *checkbtn_confonexit;
1506 GtkWidget *checkbtn_cleanonexit;
1507 GtkWidget *checkbtn_askonclean;
1508 GtkWidget *checkbtn_warnqueued;
1510 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1511 gtk_widget_show (vbox1);
1512 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1513 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1515 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1516 gtk_widget_show (vbox2);
1517 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1519 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1520 _("Emulate the behavior of mouse operation of\n"
1521 "Emacs-based mailer"));
1522 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1526 (vbox2, checkbtn_openunread,
1527 _("Open first unread message when entering a folder"));
1530 (vbox2, checkbtn_openinbox,
1531 _("Go to inbox after receiving new mail"));
1533 vbox3 = gtk_vbox_new (FALSE, 0);
1534 gtk_widget_show (vbox3);
1535 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1538 (vbox3, checkbtn_immedexec,
1539 _("Execute immediately when moving or deleting messages"));
1541 hbox1 = gtk_hbox_new (FALSE, 0);
1542 gtk_widget_show (hbox1);
1543 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1545 label = gtk_label_new
1546 (_("(Messages will be just marked till execution\n"
1547 " if this is turned off)"));
1548 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1549 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1552 (vbox2, checkbtn_addaddrbyclick,
1553 _("Add address to destination when double-clicked"));
1555 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1557 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1558 gtk_widget_show (vbox_exit);
1559 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1560 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1562 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1563 _("Confirm on exit"));
1565 hbox1 = gtk_hbox_new (FALSE, 32);
1566 gtk_widget_show (hbox1);
1567 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1569 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1570 _("Empty trash on exit"));
1571 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1572 _("Ask before emptying"));
1573 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1575 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1576 _("Warn if there are queued messages on exit"));
1578 interface.checkbtn_emacs = checkbtn_emacs;
1579 interface.checkbtn_openunread = checkbtn_openunread;
1580 interface.checkbtn_openinbox = checkbtn_openinbox;
1581 interface.checkbtn_immedexec = checkbtn_immedexec;
1582 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1583 interface.checkbtn_confonexit = checkbtn_confonexit;
1584 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1585 interface.checkbtn_askonclean = checkbtn_askonclean;
1586 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1589 static void prefs_other_create(void)
1594 GtkWidget *uri_frame;
1595 GtkWidget *uri_label;
1596 GtkWidget *uri_combo;
1597 GtkWidget *uri_entry;
1599 GtkWidget *print_frame;
1600 GtkWidget *printcmd_label;
1601 GtkWidget *printcmd_entry;
1603 GtkWidget *exteditor_frame;
1604 GtkWidget *exteditor_label;
1605 GtkWidget *exteditor_combo;
1606 GtkWidget *exteditor_entry;
1608 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1609 gtk_widget_show (vbox1);
1610 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1611 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1613 PACK_FRAME(vbox1, uri_frame,
1614 _("External Web browser (%s will be replaced with URI)"));
1616 hbox1 = gtk_hbox_new (FALSE, 8);
1617 gtk_widget_show (hbox1);
1618 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1619 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1621 uri_label = gtk_label_new (_("Command"));
1622 gtk_widget_show(uri_label);
1623 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1625 uri_combo = gtk_combo_new ();
1626 gtk_widget_show (uri_combo);
1627 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1628 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1629 "netscape -remote 'openURL(%s,raise)'",
1630 "gnome-moz-remote --raise --newwin '%s'",
1631 "kterm -e w3m '%s'",
1632 "kterm -e lynx '%s'",
1635 uri_entry = GTK_COMBO (uri_combo)->entry;
1637 PACK_FRAME(vbox1, print_frame,
1638 _("Printing (%s will be replaced with file name)"));
1640 hbox1 = gtk_hbox_new (FALSE, 8);
1641 gtk_widget_show (hbox1);
1642 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1643 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1645 printcmd_label = gtk_label_new (_("Command"));
1646 gtk_widget_show (printcmd_label);
1647 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1649 printcmd_entry = gtk_entry_new ();
1650 gtk_widget_show (printcmd_entry);
1651 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1653 PACK_FRAME(vbox1, exteditor_frame,
1654 _("External editor (%s will be replaced with file name)"));
1656 hbox1 = gtk_hbox_new (FALSE, 8);
1657 gtk_widget_show (hbox1);
1658 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1659 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1661 exteditor_label = gtk_label_new (_("Command"));
1662 gtk_widget_show (exteditor_label);
1663 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1665 exteditor_combo = gtk_combo_new ();
1666 gtk_widget_show (exteditor_combo);
1667 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1668 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1670 "mgedit --no-fork %s",
1676 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1678 other.uri_combo = uri_combo;
1679 other.uri_entry = uri_entry;
1680 other.printcmd_entry = printcmd_entry;
1682 other.exteditor_combo = exteditor_combo;
1683 other.exteditor_entry = exteditor_entry;
1686 void prefs_quote_colors_dialog(void)
1688 if (!quote_color_win)
1689 prefs_quote_colors_dialog_create();
1690 gtk_widget_show(quote_color_win);
1693 gtk_widget_hide(quote_color_win);
1695 textview_update_message_colors();
1698 static void prefs_quote_colors_dialog_create(void)
1703 GtkWidget *quotelevel1_label;
1704 GtkWidget *quotelevel2_label;
1705 GtkWidget *quotelevel3_label;
1706 GtkWidget *uri_label;
1709 //GtkWidget *cancel_btn;
1710 GtkWidget *recycle_colors_btn;
1711 GtkWidget *frame_colors;
1713 window = gtk_window_new(GTK_WINDOW_DIALOG);
1714 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1715 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1716 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1717 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1718 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1720 vbox = gtk_vbox_new (FALSE, VSPACING);
1721 gtk_container_add (GTK_CONTAINER (window), vbox);
1722 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1723 PACK_FRAME(vbox, frame_colors, _("Colors"));
1725 table = gtk_table_new (4, 2, FALSE);
1726 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1727 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1728 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1729 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1731 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1733 color_buttons.quote_level1_btn = gtk_button_new();
1734 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1735 (GtkAttachOptions) (0),
1736 (GtkAttachOptions) (0), 0, 0);
1737 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1738 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1740 color_buttons.quote_level2_btn = gtk_button_new();
1741 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1742 (GtkAttachOptions) (0),
1743 (GtkAttachOptions) (0), 0, 0);
1744 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1745 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1747 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1748 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1749 (GtkAttachOptions) (0),
1750 (GtkAttachOptions) (0), 0, 0);
1751 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1752 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1754 color_buttons.uri_btn = gtk_button_new_with_label ("");
1755 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1756 (GtkAttachOptions) (0),
1757 (GtkAttachOptions) (0), 0, 0);
1758 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1759 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1761 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1762 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1763 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1764 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1765 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1767 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1768 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1769 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1770 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1771 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1773 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1774 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1775 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1776 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1777 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1779 uri_label = gtk_label_new (_("URI link"));
1780 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1781 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1782 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1783 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1785 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1786 _("Recycle quote colors"));
1788 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1789 NULL, NULL, NULL, NULL);
1790 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1792 gtk_widget_grab_default(ok_btn);
1793 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1794 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1795 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1796 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1798 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1799 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1800 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1801 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1802 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1803 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1804 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1805 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1806 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1807 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1809 /* show message button colors and recycle options */
1810 set_button_bg_color(color_buttons.quote_level1_btn,
1811 prefs_common.quote_level1_col);
1812 set_button_bg_color(color_buttons.quote_level2_btn,
1813 prefs_common.quote_level2_col);
1814 set_button_bg_color(color_buttons.quote_level3_btn,
1815 prefs_common.quote_level3_col);
1816 set_button_bg_color(color_buttons.uri_btn,
1817 prefs_common.uri_col);
1818 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1819 prefs_common.recycle_quote_colors);
1821 gtk_widget_show_all(vbox);
1822 quote_color_win = window;
1825 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1827 gchar *type = (gchar *)data;
1828 gchar *title = NULL;
1829 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1831 GtkColorSelectionDialog *dialog;
1833 if(g_strcasecmp(type, "LEVEL1") == 0) {
1834 title = _("Pick color for quotation level 1");
1835 rgbvalue = prefs_common.quote_level1_col;
1836 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1837 title = _("Pick color for quotation level 2");
1838 rgbvalue = prefs_common.quote_level2_col;
1839 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1840 title = _("Pick color for quotation level 3");
1841 rgbvalue = prefs_common.quote_level3_col;
1842 } else if(g_strcasecmp(type, "URI") == 0) {
1843 title = _("Pick color for URI");
1844 rgbvalue = prefs_common.uri_col;
1845 } else { /* Should never be called */
1846 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1850 color_dialog = gtk_color_selection_dialog_new(title);
1851 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1852 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1853 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1855 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1856 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1857 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1858 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1860 /* preselect the previous color in the color selection dialog */
1861 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1862 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1863 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1864 dialog = (GtkColorSelectionDialog *)color_dialog;
1865 gtk_color_selection_set_color
1866 ((GtkColorSelection *)dialog->colorsel, color);
1868 gtk_widget_show(color_dialog);
1871 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1873 GtkColorSelection *colorsel = (GtkColorSelection *)
1874 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1876 gint red, green, blue, rgbvalue;
1877 gchar *type = (gchar *)data;
1879 gtk_color_selection_get_color(colorsel, color);
1881 red = (gint) (color[0] * 255.0);
1882 green = (gint) (color[1] * 255.0);
1883 blue = (gint) (color[2] * 255.0);
1884 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1887 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1888 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1889 fprintf(stderr, "Color is %x\n", rgbvalue);
1892 if (g_strcasecmp(type, "LEVEL1") == 0) {
1893 prefs_common.quote_level1_col = rgbvalue;
1894 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1895 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1896 prefs_common.quote_level2_col = rgbvalue;
1897 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1898 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1899 prefs_common.quote_level3_col = rgbvalue;
1900 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1901 } else if (g_strcasecmp(type, "URI") == 0) {
1902 prefs_common.uri_col = rgbvalue;
1903 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1905 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1907 gtk_widget_hide(color_dialog);
1910 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1912 gtk_widget_hide(color_dialog);
1915 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1920 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1921 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1922 newstyle->bg[GTK_STATE_NORMAL] = color;
1923 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1924 newstyle->bg[GTK_STATE_ACTIVE] = color;
1926 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1929 static void prefs_enable_message_color_toggled(void)
1933 is_active = gtk_toggle_button_get_active
1934 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1935 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1936 prefs_common.enable_color = is_active;
1939 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1943 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1944 prefs_common.recycle_quote_colors = is_active;
1947 static void prefs_quote_description(void)
1949 if (!quote_desc_win)
1950 prefs_quote_description_create();
1952 gtk_widget_show(quote_desc_win);
1954 gtk_widget_hide(quote_desc_win);
1957 static void prefs_quote_description_create(void)
1965 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1966 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1967 _("Description of symbols"));
1968 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1969 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1970 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1971 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1973 vbox = gtk_vbox_new(FALSE, 8);
1974 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1976 hbox = gtk_hbox_new(FALSE, 4);
1977 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1979 label = gtk_label_new
1990 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1991 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1993 label = gtk_label_new
1996 "Full Name of Sender\n"
1997 "First Name of Sender\n"
1998 "Initial of Sender\n"
2004 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2005 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2007 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2008 NULL, NULL, NULL, NULL);
2009 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2011 gtk_widget_grab_default(ok_btn);
2012 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2013 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2015 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2016 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2018 gtk_widget_show_all(vbox);
2021 /* functions for setting items of SummaryView */
2023 static struct _SummaryDisplayItem
2027 GtkWidget *chkbtn[N_SUMMARY_COLS];
2030 GtkWidget *cancel_btn;
2033 #define SET_ACTIVE(column, var) \
2034 gtk_toggle_button_set_active \
2035 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2037 #define GET_ACTIVE(column, var) \
2038 prefs_common.var = gtk_toggle_button_get_active \
2039 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2041 void prefs_summary_display_item_set(void)
2043 static gboolean cancelled;
2045 if (!summarydispitem.window)
2046 prefs_summary_display_item_dialog_create(&cancelled);
2047 gtk_widget_grab_focus(summarydispitem.ok_btn);
2048 gtk_widget_show(summarydispitem.window);
2049 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2051 SET_ACTIVE(S_COL_MARK, show_mark);
2052 SET_ACTIVE(S_COL_UNREAD, show_unread);
2053 SET_ACTIVE(S_COL_MIME, show_mime);
2054 SET_ACTIVE(S_COL_NUMBER, show_number);
2055 SET_ACTIVE(S_COL_SIZE, show_size);
2056 SET_ACTIVE(S_COL_DATE, show_date);
2057 SET_ACTIVE(S_COL_FROM, show_from);
2058 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2061 gtk_widget_hide(summarydispitem.window);
2063 if (cancelled != TRUE) {
2064 GET_ACTIVE(S_COL_MARK, show_mark);
2065 GET_ACTIVE(S_COL_UNREAD, show_unread);
2066 GET_ACTIVE(S_COL_MIME, show_mime);
2067 GET_ACTIVE(S_COL_NUMBER, show_number);
2068 GET_ACTIVE(S_COL_SIZE, show_size);
2069 GET_ACTIVE(S_COL_DATE, show_date);
2070 GET_ACTIVE(S_COL_FROM, show_from);
2071 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2073 main_window_reflect_prefs_all();
2077 #define SET_CHECK_BUTTON(column, label) \
2079 summarydispitem.chkbtn[column] = \
2080 gtk_check_button_new_with_label(label); \
2081 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2082 summarydispitem.chkbtn[column], \
2086 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2090 GtkWidget *chkbtn_vbox;
2093 GtkWidget *cancel_btn;
2095 window = gtk_window_new(GTK_WINDOW_DIALOG);
2096 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2097 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2098 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2099 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2100 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2101 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2102 GTK_SIGNAL_FUNC(display_item_delete_event),
2104 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2105 GTK_SIGNAL_FUNC(display_item_key_pressed),
2108 vbox = gtk_vbox_new(FALSE, 8);
2109 gtk_container_add(GTK_CONTAINER(window), vbox);
2111 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2112 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2114 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2115 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2116 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2117 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2118 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2119 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2120 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2121 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2123 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2124 &cancel_btn, _("Cancel"), NULL, NULL);
2125 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2126 gtk_widget_grab_default(ok_btn);
2128 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2129 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2130 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2131 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2133 gtk_widget_show_all(vbox);
2135 summarydispitem.window = window;
2136 summarydispitem.ok_btn = ok_btn;
2137 summarydispitem.cancel_btn = cancel_btn;
2140 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2146 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2152 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2153 gboolean *cancelled)
2161 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2162 gboolean *cancelled)
2164 if (event && event->keyval == GDK_Escape) {
2170 static void prefs_font_select(GtkButton *button)
2172 if (!font_sel_win) {
2173 font_sel_win = gtk_font_selection_dialog_new
2174 (_("Font selection"));
2175 gtk_window_position(GTK_WINDOW(font_sel_win),
2176 GTK_WIN_POS_CENTER);
2177 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2178 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2181 (GTK_OBJECT(font_sel_win), "key_press_event",
2182 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2185 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2187 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2189 gtk_signal_connect_object
2190 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2192 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2193 GTK_OBJECT(font_sel_win));
2196 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2197 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2198 gtk_widget_grab_focus
2199 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2200 gtk_widget_show(font_sel_win);
2203 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2207 if (event && event->keyval == GDK_Escape)
2208 gtk_widget_hide(font_sel_win);
2211 static void prefs_font_selection_ok(GtkButton *button)
2215 fontname = gtk_font_selection_dialog_get_font_name
2216 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2219 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2223 gtk_widget_hide(font_sel_win);
2226 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2229 GtkWidget *menuitem;
2232 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2233 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2234 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2235 g_free(*((gchar **)pparam->data));
2236 *((gchar **)pparam->data) = g_strdup(charset);
2239 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2242 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2244 GtkWidget *menuitem;
2248 g_return_if_fail(optmenu != NULL);
2249 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2251 menu = gtk_option_menu_get_menu(optmenu);
2252 for (cur = GTK_MENU_SHELL(menu)->children;
2253 cur != NULL; cur = cur->next) {
2254 menuitem = GTK_WIDGET(cur->data);
2255 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2256 if (!strcmp(charset, *((gchar **)pparam->data))) {
2257 gtk_option_menu_set_history(optmenu, n);
2263 gtk_option_menu_set_history(optmenu, 0);
2264 prefs_common_charset_set_data_from_optmenu(pparam);
2267 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2270 if (event && event->keyval == GDK_Escape)
2271 gtk_widget_hide(dialog.window);
2274 static void prefs_common_ok(GtkButton *button)
2276 prefs_common_apply(button);
2277 gtk_widget_hide(dialog.window);
2278 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2279 gtk_widget_hide(quote_desc_win);
2282 static void prefs_common_apply(GtkButton *button)
2284 prefs_set_data_from_dialog(param);
2285 main_window_reflect_prefs_all();
2286 prefs_common_save_config();