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;
106 GtkWidget *chkbtn_swapfrom;
107 GtkWidget *chkbtn_hscrollbar;
108 GtkWidget *entry_datefmt;
111 static struct Message {
112 GtkWidget *chkbtn_enablecol;
113 GtkWidget *button_edit_col;
114 GtkWidget *chkbtn_mbalnum;
115 GtkWidget *chkbtn_disphdrpane;
116 GtkWidget *chkbtn_disphdr;
117 GtkWidget *spinbtn_linespc;
118 GtkObject *spinbtn_linespc_adj;
119 GtkWidget *chkbtn_headspc;
121 GtkWidget *chkbtn_smoothscroll;
122 GtkWidget *spinbtn_scrollstep;
123 GtkObject *spinbtn_scrollstep_adj;
124 GtkWidget *chkbtn_halfpage;
128 static struct Privacy {
129 GtkWidget *checkbtn_default_encrypt;
130 GtkWidget *checkbtn_default_sign;
131 GtkWidget *checkbtn_auto_check_signatures;
132 GtkWidget *checkbtn_passphrase_grab;
133 GtkWidget *optmenu_default_signkey;
137 static struct Interface {
138 GtkWidget *checkbtn_emacs;
139 GtkWidget *checkbtn_openunread;
140 GtkWidget *checkbtn_openinbox;
141 GtkWidget *checkbtn_immedexec;
142 GtkWidget *checkbtn_confonexit;
143 GtkWidget *checkbtn_cleanonexit;
144 GtkWidget *checkbtn_askonclean;
145 GtkWidget *checkbtn_warnqueued;
146 GtkWidget *checkbtn_addaddrbyclick;
149 static struct Other {
150 GtkWidget *uri_combo;
151 GtkWidget *uri_entry;
152 GtkWidget *printcmd_entry;
153 GtkWidget *exteditor_combo;
154 GtkWidget *exteditor_entry;
157 static struct MessageColorButtons {
158 GtkWidget *quote_level1_btn;
159 GtkWidget *quote_level2_btn;
160 GtkWidget *quote_level3_btn;
164 static GtkWidget *quote_desc_win;
165 static GtkWidget *font_sel_win;
166 static GtkWidget *quote_color_win;
167 static GtkWidget *color_dialog;
169 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
170 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
172 static void prefs_common_default_signkey_set_data_from_optmenu
174 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
178 parameter name, default value, pointer to the prefs variable, data type,
179 pointer to the widget pointer,
180 pointer to the function for data setting,
181 pointer to the function for widget setting
184 static PrefParam param[] = {
186 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
187 &receive.checkbtn_incext,
188 prefs_set_data_from_toggle, prefs_set_toggle},
189 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
190 &receive.entry_incext,
191 prefs_set_data_from_entry, prefs_set_entry},
193 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
194 &receive.checkbtn_local,
195 prefs_set_data_from_toggle, prefs_set_toggle},
196 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
197 &receive.checkbtn_filter_on_inc,
198 prefs_set_data_from_toggle, prefs_set_toggle},
199 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
200 &receive.entry_spool,
201 prefs_set_data_from_entry, prefs_set_entry},
203 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
204 &receive.checkbtn_autochk,
205 prefs_set_data_from_toggle, prefs_set_toggle},
206 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
207 &receive.spinbtn_autochk,
208 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
209 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
210 &receive.checkbtn_chkonstartup,
211 prefs_set_data_from_toggle, prefs_set_toggle},
213 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
214 &receive.spinbtn_maxarticle,
215 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
218 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
219 &send.checkbtn_sendext,
220 prefs_set_data_from_toggle, prefs_set_toggle},
221 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
222 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
223 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
224 &send.checkbtn_savemsg,
225 prefs_set_data_from_toggle, prefs_set_toggle},
226 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
227 &send.checkbtn_queuemsg,
228 prefs_set_data_from_toggle, prefs_set_toggle},
230 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
231 &send.optmenu_charset,
232 prefs_common_charset_set_data_from_optmenu,
233 prefs_common_charset_set_optmenu},
236 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
237 &compose.checkbtn_quote,
238 prefs_set_data_from_toggle, prefs_set_toggle},
239 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
240 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
241 {"quote_format", "On %d\\n%f wrote:\\n\\n",
242 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
243 prefs_set_data_from_text, prefs_set_text},
245 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
246 &compose.checkbtn_autosig,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
249 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
251 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
252 &compose.spinbtn_linewrap,
253 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
254 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
255 &compose.checkbtn_wrapquote,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"linewrap_before_sending", "FALSE",
258 &prefs_common.linewrap_at_send, P_BOOL,
259 &compose.checkbtn_wrapatsend,
260 prefs_set_data_from_toggle, prefs_set_toggle},
262 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
266 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
268 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
269 &prefs_common.textfont, P_STRING,
270 &display.entry_textfont,
271 prefs_set_data_from_entry, prefs_set_entry},
273 {"display_folder_unread_num", "TRUE",
274 &prefs_common.display_folder_unread, P_BOOL,
275 &display.chkbtn_folder_unread,
276 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
279 &display.chkbtn_transhdr,
280 prefs_set_data_from_toggle, prefs_set_toggle},
282 /* Display: Summary View */
283 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
284 &display.chkbtn_swapfrom,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
287 &display.chkbtn_hscrollbar,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
290 P_STRING, &display.entry_datefmt,
291 prefs_set_data_from_entry, prefs_set_entry},
293 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
295 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
297 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
300 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
302 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
304 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
306 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
308 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
310 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
312 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
314 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
318 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
320 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
322 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
324 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
326 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
328 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
330 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
332 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
334 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
336 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
338 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
340 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
342 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
344 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
346 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
348 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
349 P_INT, NULL, NULL, NULL},
350 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
352 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
354 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
356 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
358 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
360 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
362 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
364 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
366 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
368 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
370 {"compose_width", "600", &prefs_common.compose_width, P_INT,
372 {"compose_height", "560", &prefs_common.compose_height, P_INT,
376 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
377 &message.chkbtn_enablecol,
378 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
382 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
384 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
386 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
388 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
390 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
391 P_BOOL, NULL, NULL, NULL},
393 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
394 &message.chkbtn_mbalnum,
395 prefs_set_data_from_toggle, prefs_set_toggle},
396 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
397 P_BOOL, &message.chkbtn_disphdrpane,
398 prefs_set_data_from_toggle, prefs_set_toggle},
399 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
400 &message.chkbtn_disphdr,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"line_space", "2", &prefs_common.line_space, P_INT,
403 &message.spinbtn_linespc,
404 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
405 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
406 &message.chkbtn_headspc,
407 prefs_set_data_from_toggle, prefs_set_toggle},
409 {"enable_smooth_scroll", "FALSE",
410 &prefs_common.enable_smooth_scroll, P_BOOL,
411 &message.chkbtn_smoothscroll,
412 prefs_set_data_from_toggle, prefs_set_toggle},
413 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
414 &message.spinbtn_scrollstep,
415 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
416 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
417 &message.chkbtn_halfpage,
418 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"mime_image_viewer", "display '%s'",
422 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
423 {"mime_audio_player", "play '%s'",
424 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
428 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
429 &privacy.checkbtn_default_encrypt,
430 prefs_set_data_from_toggle, prefs_set_toggle},
431 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
432 &privacy.checkbtn_default_sign,
433 prefs_set_data_from_toggle, prefs_set_toggle},
434 {"auto_check_signatures", "TRUE",
435 &prefs_common.auto_check_signatures, P_BOOL,
436 &privacy.checkbtn_auto_check_signatures,
437 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
440 &privacy.checkbtn_passphrase_grab,
441 prefs_set_data_from_toggle, prefs_set_toggle},
442 #endif /* __MINGW32__ */
443 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
444 &privacy.optmenu_default_signkey,
445 prefs_common_default_signkey_set_data_from_optmenu,
446 prefs_common_default_signkey_set_optmenu},
447 #endif /* USE_GPGME */
450 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
452 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
455 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
456 &interface.checkbtn_emacs,
457 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
459 P_BOOL, &interface.checkbtn_openunread,
460 prefs_set_data_from_toggle, prefs_set_toggle},
461 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
462 P_BOOL, &interface.checkbtn_openinbox,
463 prefs_set_data_from_toggle, prefs_set_toggle},
464 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
465 &interface.checkbtn_immedexec,
466 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
468 P_BOOL, &interface.checkbtn_addaddrbyclick,
469 prefs_set_data_from_toggle, prefs_set_toggle},
471 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
472 &interface.checkbtn_confonexit,
473 prefs_set_data_from_toggle, prefs_set_toggle},
474 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
475 &interface.checkbtn_cleanonexit,
476 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
478 &interface.checkbtn_askonclean,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
481 P_BOOL, &interface.checkbtn_warnqueued,
482 prefs_set_data_from_toggle, prefs_set_toggle},
485 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
486 &prefs_common.uri_cmd, P_STRING,
487 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
488 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
489 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
490 {"ext_editor_command", "gedit %s",
491 &prefs_common.ext_editor_cmd, P_STRING,
492 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
494 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
498 #define VSPACING_NARROW 4
499 #define VBOX_BORDER 16
500 #define DEFAULT_ENTRY_WIDTH 80
501 #define PREFSBUFSIZE 1024
503 /* widget creating functions */
504 static void prefs_common_create (void);
505 static void prefs_receive_create (void);
506 static void prefs_send_create (void);
507 static void prefs_compose_create (void);
508 static void prefs_display_create (void);
509 static void prefs_message_create (void);
511 static void prefs_privacy_create (void);
513 static void prefs_interface_create (void);
514 static void prefs_other_create (void);
516 static void prefs_quote_description (void);
517 static void prefs_quote_description_create (void);
518 static void prefs_quote_colors_dialog (void);
519 static void prefs_quote_colors_dialog_create (void);
520 static void quote_color_set_dialog (GtkWidget *widget,
522 static void quote_colors_set_dialog_ok (GtkWidget *widget,
524 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
526 static void set_button_bg_color (GtkWidget *widget,
528 static void prefs_enable_message_color_toggled (void);
529 static void prefs_recycle_colors_toggled (GtkWidget *widget);
531 /* functions for setting items of SummaryView */
532 static void prefs_summary_display_item_dialog_create
533 (gboolean *cancelled);
534 static void display_item_ok (GtkWidget *widget,
535 gboolean *cancelled);
536 static void display_item_cancel (GtkWidget *widget,
537 gboolean *cancelled);
538 static gint display_item_delete_event (GtkWidget *widget,
540 gboolean *cancelled);
541 static void display_item_key_pressed (GtkWidget *widget,
543 gboolean *cancelled);
545 static void prefs_font_select (GtkButton *button);
546 static void prefs_font_selection_key_pressed (GtkWidget *widget,
549 static void prefs_font_selection_ok (GtkButton *button);
551 static void prefs_common_key_pressed (GtkWidget *widget,
554 static void prefs_common_ok (GtkButton *button);
555 static void prefs_common_apply (GtkButton *button);
557 void prefs_common_read_config(void)
559 prefs_read_config(param, "Common", COMMON_RC);
562 void prefs_common_save_config(void)
564 prefs_save_config(param, "Common", COMMON_RC);
567 void prefs_common_open(void)
569 if (!dialog.window) {
570 prefs_common_create();
573 manage_window_set_transient(GTK_WINDOW(dialog.window));
574 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
575 gtk_widget_grab_focus(dialog.ok_btn);
577 prefs_set_dialog(param);
579 gtk_widget_show(dialog.window);
582 static void prefs_common_create(void)
586 debug_print(_("Creating common preferences window...\n"));
588 prefs_dialog_create(&dialog);
589 gtk_window_set_title (GTK_WINDOW(dialog.window),
590 _("Common Preferences"));
591 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
592 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
593 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
594 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
595 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
596 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
597 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
598 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
599 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
600 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
601 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
602 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
603 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
604 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
605 GTK_OBJECT(dialog.window));
607 /* create all widgets on notebook */
608 prefs_receive_create();
609 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
611 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
612 prefs_compose_create();
613 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
614 prefs_display_create();
615 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
616 prefs_message_create();
617 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
619 prefs_privacy_create();
620 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
622 prefs_interface_create();
623 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
624 prefs_other_create();
625 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
627 gtk_widget_show_all(dialog.window);
630 static void prefs_receive_create(void)
634 GtkWidget *frame_incext;
635 GtkWidget *checkbtn_incext;
637 GtkWidget *label_incext;
638 GtkWidget *entry_incext;
639 GtkWidget *button_incext;
641 GtkWidget *frame_spool;
642 GtkWidget *checkbtn_local;
643 GtkWidget *checkbtn_filter_on_inc;
644 GtkWidget *label_spool;
645 GtkWidget *entry_spool;
647 GtkWidget *hbox_autochk;
648 GtkWidget *checkbtn_autochk;
649 GtkWidget *label_autochk1;
650 GtkObject *spinbtn_autochk_adj;
651 GtkWidget *spinbtn_autochk;
652 GtkWidget *label_autochk2;
653 GtkWidget *checkbtn_chkonstartup;
655 GtkWidget *frame_news;
656 GtkWidget *label_maxarticle;
657 GtkWidget *spinbtn_maxarticle;
658 GtkObject *spinbtn_maxarticle_adj;
660 vbox1 = gtk_vbox_new (FALSE, VSPACING);
661 gtk_widget_show (vbox1);
662 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
663 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
665 PACK_FRAME(vbox1, frame_incext, _("External program"));
667 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
668 gtk_widget_show (vbox2);
669 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
670 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
672 /* Use of external incorporation program */
673 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
674 _("Use external program for incorporation"));
676 hbox = gtk_hbox_new (FALSE, 8);
677 gtk_widget_show (hbox);
678 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
679 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
681 label_incext = gtk_label_new (_("Program path"));
682 gtk_widget_show (label_incext);
683 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
685 entry_incext = gtk_entry_new ();
686 gtk_widget_show (entry_incext);
687 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
689 button_incext = gtk_button_new_with_label ("... ");
690 gtk_widget_show (button_incext);
691 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
693 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
695 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
696 gtk_widget_show (vbox2);
697 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
698 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
700 hbox = gtk_hbox_new (FALSE, 32);
701 gtk_widget_show (hbox);
702 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
704 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
705 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
706 _("Filter on incorporation"));
707 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
709 hbox = gtk_hbox_new (FALSE, 8);
710 gtk_widget_show (hbox);
711 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
712 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
714 label_spool = gtk_label_new (_("Spool directory"));
715 gtk_widget_show (label_spool);
716 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
718 entry_spool = gtk_entry_new ();
719 gtk_widget_show (entry_spool);
720 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
722 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
723 gtk_widget_show (vbox2);
724 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
727 hbox_autochk = gtk_hbox_new (FALSE, 8);
728 gtk_widget_show (hbox_autochk);
729 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
731 gtk_widget_set_sensitive(hbox_autochk, FALSE);
733 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
734 _("Auto-check new mail"));
736 label_autochk1 = gtk_label_new (_("each"));
737 gtk_widget_show (label_autochk1);
738 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
740 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
741 spinbtn_autochk = gtk_spin_button_new
742 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
743 gtk_widget_show (spinbtn_autochk);
744 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
745 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
746 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
748 label_autochk2 = gtk_label_new (_("minute(s)"));
749 gtk_widget_show (label_autochk2);
750 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
752 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
753 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
754 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
756 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
757 _("Check new mail on startup"));
759 PACK_FRAME(vbox1, frame_news, _("News"));
761 hbox = gtk_hbox_new (FALSE, 8);
762 gtk_widget_show (hbox);
763 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
764 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
766 label_maxarticle = gtk_label_new
767 (_("Maximum article number to download\n"
768 "(unlimited if 0 is specified)"));
769 gtk_widget_show (label_maxarticle);
770 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
771 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
773 spinbtn_maxarticle_adj =
774 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
775 spinbtn_maxarticle = gtk_spin_button_new
776 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
777 gtk_widget_show (spinbtn_maxarticle);
778 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
780 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
781 gtk_spin_button_set_numeric
782 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
784 receive.checkbtn_incext = checkbtn_incext;
785 receive.entry_incext = entry_incext;
786 receive.button_incext = button_incext;
788 receive.checkbtn_local = checkbtn_local;
789 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
790 receive.entry_spool = entry_spool;
792 receive.checkbtn_autochk = checkbtn_autochk;
793 receive.spinbtn_autochk = spinbtn_autochk;
794 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
796 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
798 receive.spinbtn_maxarticle = spinbtn_maxarticle;
799 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
802 static void prefs_send_create(void)
806 GtkWidget *frame_sendext;
807 GtkWidget *vbox_sendext;
808 GtkWidget *checkbtn_sendext;
810 GtkWidget *label_sendext;
811 GtkWidget *entry_sendext;
812 GtkWidget *button_sendext;
813 GtkWidget *checkbtn_savemsg;
814 GtkWidget *checkbtn_queuemsg;
815 GtkWidget *label_outcharset;
817 GtkWidget *optmenu_menu;
820 vbox1 = gtk_vbox_new (FALSE, VSPACING);
821 gtk_widget_show (vbox1);
822 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
823 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
825 PACK_FRAME(vbox1, frame_sendext, _("External program"));
827 gtk_widget_set_sensitive(frame_sendext, FALSE);
829 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
830 gtk_widget_show (vbox_sendext);
831 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
832 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
834 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
835 _("Use external program for sending"));
837 hbox1 = gtk_hbox_new (FALSE, 8);
838 gtk_widget_show (hbox1);
839 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
840 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
842 label_sendext = gtk_label_new (_("Program path"));
843 gtk_widget_show (label_sendext);
844 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
846 entry_sendext = gtk_entry_new ();
847 gtk_widget_show (entry_sendext);
848 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
850 button_sendext = gtk_button_new_with_label ("... ");
851 gtk_widget_show (button_sendext);
852 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
854 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
855 gtk_widget_show (vbox2);
856 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
858 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
859 _("Save sent message to outbox"));
860 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
861 _("Queue message that failed to send"));
863 hbox1 = gtk_hbox_new (FALSE, 8);
864 gtk_widget_show (hbox1);
865 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
867 label_outcharset = gtk_label_new (_("Outgoing codeset"));
868 gtk_widget_show (label_outcharset);
869 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
871 optmenu = gtk_option_menu_new ();
872 gtk_widget_show (optmenu);
873 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
875 optmenu_menu = gtk_menu_new ();
877 #define SET_MENUITEM(str, charset) \
879 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
882 SET_MENUITEM(_("Automatic"), CS_AUTO);
883 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
885 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
887 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
889 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
890 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
891 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
892 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
893 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
894 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
895 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
896 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
897 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
898 #endif /* HAVE_LIBJCONV */
899 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
901 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
902 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
905 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
906 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
908 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
909 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
911 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
912 #endif /* HAVE_LIBJCONV */
914 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
916 send.checkbtn_sendext = checkbtn_sendext;
917 send.entry_sendext = entry_sendext;
918 send.button_sendext = button_sendext;
920 send.checkbtn_savemsg = checkbtn_savemsg;
921 send.checkbtn_queuemsg = checkbtn_queuemsg;
923 send.optmenu_charset = optmenu;
926 static void prefs_compose_create(void)
929 GtkWidget *frame_quote;
930 GtkWidget *vbox_quote;
931 GtkWidget *checkbtn_quote;
933 GtkWidget *label_quotemark;
934 GtkWidget *entry_quotemark;
936 GtkWidget *label_quotefmt;
937 GtkWidget *btn_quotedesc;
938 GtkWidget *scrolledwin_quotefmt;
939 GtkWidget *text_quotefmt;
941 GtkWidget *frame_sig;
943 GtkWidget *checkbtn_autosig;
944 GtkWidget *label_sigsep;
945 GtkWidget *entry_sigsep;
947 GtkWidget *vbox_linewrap;
950 GtkWidget *label_linewrap;
951 GtkObject *spinbtn_linewrap_adj;
952 GtkWidget *spinbtn_linewrap;
953 GtkWidget *checkbtn_wrapquote;
954 GtkWidget *checkbtn_wrapatsend;
956 vbox1 = gtk_vbox_new (FALSE, VSPACING);
957 gtk_widget_show (vbox1);
958 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
959 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
961 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
963 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
964 gtk_widget_show (vbox_quote);
965 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
966 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
968 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
969 _("Quote message when replying"));
971 hbox1 = gtk_hbox_new (FALSE, 8);
972 gtk_widget_show (hbox1);
973 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
975 label_quotemark = gtk_label_new (_("Quotation mark"));
976 gtk_widget_show (label_quotemark);
977 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
979 entry_quotemark = gtk_entry_new ();
980 gtk_widget_show (entry_quotemark);
981 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
982 gtk_widget_set_usize (entry_quotemark, 64, -1);
984 hbox2 = gtk_hbox_new (FALSE, 0);
985 gtk_widget_show (hbox2);
986 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
988 label_quotefmt = gtk_label_new (_("Quotation format:"));
989 gtk_widget_show (label_quotefmt);
990 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
993 gtk_button_new_with_label (_(" Description of symbols "));
994 gtk_widget_show (btn_quotedesc);
995 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
996 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
997 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
999 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1000 gtk_widget_show (scrolledwin_quotefmt);
1001 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1002 gtk_scrolled_window_set_policy
1003 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1004 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1006 text_quotefmt = gtk_text_new (NULL, NULL);
1007 gtk_widget_show (text_quotefmt);
1008 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1009 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1010 gtk_widget_set_usize(text_quotefmt, -1, 60);
1012 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1014 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1015 gtk_widget_show (vbox_sig);
1016 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1017 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1019 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1020 _("Insert signature automatically"));
1022 hbox1 = gtk_hbox_new (FALSE, 8);
1023 gtk_widget_show (hbox1);
1024 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1026 label_sigsep = gtk_label_new (_("Signature separator"));
1027 gtk_widget_show (label_sigsep);
1028 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1030 entry_sigsep = gtk_entry_new ();
1031 gtk_widget_show (entry_sigsep);
1032 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1033 gtk_widget_set_usize (entry_sigsep, 64, -1);
1036 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1037 gtk_widget_show (vbox_linewrap);
1038 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1040 hbox3 = gtk_hbox_new (FALSE, 8);
1041 gtk_widget_show (hbox3);
1042 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1044 label_linewrap = gtk_label_new (_("Wrap messages at"));
1045 gtk_widget_show (label_linewrap);
1046 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1048 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1049 spinbtn_linewrap = gtk_spin_button_new
1050 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1051 gtk_widget_show (spinbtn_linewrap);
1052 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1053 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1054 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1056 label_linewrap = gtk_label_new (_("characters"));
1057 gtk_widget_show (label_linewrap);
1058 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1060 hbox4 = gtk_hbox_new (FALSE, 32);
1061 gtk_widget_show (hbox4);
1062 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1064 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1066 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1068 compose.checkbtn_quote = checkbtn_quote;
1069 compose.entry_quotemark = entry_quotemark;
1070 compose.text_quotefmt = text_quotefmt;
1071 compose.checkbtn_autosig = checkbtn_autosig;
1072 compose.entry_sigsep = entry_sigsep;
1074 compose.spinbtn_linewrap = spinbtn_linewrap;
1075 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1076 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1077 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1080 static void prefs_display_create(void)
1083 GtkWidget *frame_font;
1085 GtkWidget *label_textfont;
1086 GtkWidget *entry_textfont;
1087 GtkWidget *button_textfont;
1088 GtkWidget *chkbtn_folder_unread;
1089 GtkWidget *chkbtn_transhdr;
1090 GtkWidget *frame_summary;
1092 GtkWidget *chkbtn_swapfrom;
1093 GtkWidget *chkbtn_hscrollbar;
1095 GtkWidget *label_datefmt;
1096 GtkWidget *entry_datefmt;
1097 GtkTooltips *tooltips_datefmt;
1098 GtkWidget *button_dispitem;
1100 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1101 gtk_widget_show (vbox1);
1102 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1103 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1105 PACK_FRAME(vbox1, frame_font, _("Font"));
1107 table1 = gtk_table_new (1, 3, FALSE);
1108 gtk_widget_show (table1);
1109 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1110 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1111 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1112 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1114 label_textfont = gtk_label_new (_("Text"));
1115 gtk_widget_show (label_textfont);
1116 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1117 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1119 entry_textfont = gtk_entry_new ();
1120 gtk_widget_show (entry_textfont);
1121 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1122 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1124 button_textfont = gtk_button_new_with_label ("... ");
1125 gtk_widget_show (button_textfont);
1126 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1128 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1129 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1131 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1132 gtk_widget_show (vbox2);
1133 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1136 (vbox2, chkbtn_transhdr,
1137 _("Translate header name (such as `From:', `Subject:')"));
1139 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1140 _("Display unread number next to folder name"));
1142 /* ---- Summary ---- */
1144 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1146 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1147 gtk_widget_show (vbox2);
1148 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1149 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1152 (vbox2, chkbtn_swapfrom,
1153 _("Display recipient on `From' column if sender is yourself"));
1155 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1157 hbox1 = gtk_hbox_new (FALSE, 8);
1158 gtk_widget_show (hbox1);
1159 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1161 label_datefmt = gtk_label_new (_("Date format"));
1162 gtk_widget_show (label_datefmt);
1163 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1165 entry_datefmt = gtk_entry_new ();
1166 gtk_widget_show (entry_datefmt);
1167 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1169 tooltips_datefmt = gtk_tooltips_new ();
1170 gtk_tooltips_set_tip
1171 (tooltips_datefmt, entry_datefmt,
1172 _("Ordinary characters placed in the format string are copied "
1173 "without conversion. Conversion specifiers are introduced by "
1174 "a % character, and are replaced as follows:\n"
1175 "%a: the abbreviated weekday name\n"
1176 "%A: the full weekday name\n"
1177 "%b: the abbreviated month name\n"
1178 "%B: the full month name\n"
1179 "%c: the preferred date and time for the current locale\n"
1180 "%C: the century number (year/100)\n"
1181 "%d: the day of the month as a decimal number\n"
1182 "%H: the hour as a decimal number using a 24-hour clock\n"
1183 "%I: the hour as a decimal number using a 12-hour clock\n"
1184 "%j: the day of the year as a decimal number\n"
1185 "%m: the month as a decimal number\n"
1186 "%M: the minute as a decimal number\n"
1187 "%p: either AM or PM\n"
1188 "%S: the second as a decimal number\n"
1189 "%w: the day of the week as a decimal number\n"
1190 "%x: the preferred date for the current locale\n"
1191 "%y: the last two digits of a year\n"
1192 "%Y: the year as a decimal number\n"
1193 "%Z: the time zone or name or abbreviation"),
1196 hbox1 = gtk_hbox_new (FALSE, 8);
1197 gtk_widget_show (hbox1);
1198 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1200 button_dispitem = gtk_button_new_with_label
1201 (_(" Set display item of summary... "));
1202 gtk_widget_show (button_dispitem);
1203 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1204 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1205 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1208 display.entry_textfont = entry_textfont;
1209 display.button_textfont = button_textfont;
1211 display.chkbtn_folder_unread = chkbtn_folder_unread;
1212 display.chkbtn_transhdr = chkbtn_transhdr;
1214 display.chkbtn_swapfrom = chkbtn_swapfrom;
1215 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1216 display.entry_datefmt = entry_datefmt;
1219 static void prefs_message_create(void)
1224 GtkWidget *chkbtn_enablecol;
1225 GtkWidget *button_edit_col;
1226 GtkWidget *chkbtn_mbalnum;
1227 GtkWidget *chkbtn_disphdrpane;
1228 GtkWidget *chkbtn_disphdr;
1229 GtkWidget *hbox_linespc;
1230 GtkWidget *label_linespc;
1231 GtkObject *spinbtn_linespc_adj;
1232 GtkWidget *spinbtn_linespc;
1233 GtkWidget *chkbtn_headspc;
1235 GtkWidget *frame_scr;
1236 GtkWidget *vbox_scr;
1237 GtkWidget *chkbtn_smoothscroll;
1238 GtkWidget *hbox_scr;
1239 GtkWidget *label_scr;
1240 GtkObject *spinbtn_scrollstep_adj;
1241 GtkWidget *spinbtn_scrollstep;
1242 GtkWidget *chkbtn_halfpage;
1244 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1245 gtk_widget_show (vbox1);
1246 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1247 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1249 hbox1 = gtk_hbox_new (FALSE, 8);
1250 gtk_widget_show (hbox1);
1251 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1253 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1254 _("Enable coloration of message"));
1255 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1256 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1259 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1260 gtk_widget_show (button_edit_col);
1261 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1262 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1263 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1265 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1267 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1268 gtk_widget_show (vbox2);
1269 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1272 (vbox2, chkbtn_mbalnum,
1273 _("Display 2-byte alphabet and numeric with 1-byte character"));
1274 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1275 _("Display header pane above message view"));
1276 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1277 _("Display short headers on message view"));
1279 hbox1 = gtk_hbox_new (FALSE, 32);
1280 gtk_widget_show (hbox1);
1281 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1283 hbox_linespc = gtk_hbox_new (FALSE, 8);
1284 gtk_widget_show (hbox1);
1285 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1287 label_linespc = gtk_label_new (_("Line space"));
1288 gtk_widget_show (label_linespc);
1289 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1292 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1293 spinbtn_linespc = gtk_spin_button_new
1294 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1295 gtk_widget_show (spinbtn_linespc);
1296 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1298 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1299 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1301 label_linespc = gtk_label_new (_("pixel(s)"));
1302 gtk_widget_show (label_linespc);
1303 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1306 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1308 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1310 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1311 gtk_widget_show (vbox_scr);
1312 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1313 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1315 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1317 hbox1 = gtk_hbox_new (FALSE, 32);
1318 gtk_widget_show (hbox1);
1319 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1321 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1323 hbox_scr = gtk_hbox_new (FALSE, 8);
1324 gtk_widget_show (hbox_scr);
1325 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1327 label_scr = gtk_label_new (_("Step"));
1328 gtk_widget_show (label_scr);
1329 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1331 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1332 spinbtn_scrollstep = gtk_spin_button_new
1333 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1334 gtk_widget_show (spinbtn_scrollstep);
1335 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1337 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1338 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1341 label_scr = gtk_label_new (_("pixel(s)"));
1342 gtk_widget_show (label_scr);
1343 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1345 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1347 message.chkbtn_enablecol = chkbtn_enablecol;
1348 message.button_edit_col = button_edit_col;
1349 message.chkbtn_mbalnum = chkbtn_mbalnum;
1350 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1351 message.chkbtn_disphdr = chkbtn_disphdr;
1352 message.spinbtn_linespc = spinbtn_linespc;
1353 message.chkbtn_headspc = chkbtn_headspc;
1355 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1356 message.spinbtn_scrollstep = spinbtn_scrollstep;
1357 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1358 message.chkbtn_halfpage = chkbtn_halfpage;
1362 static void prefs_privacy_create(void)
1367 GtkWidget *checkbtn_default_encrypt;
1368 GtkWidget *checkbtn_default_sign;
1369 GtkWidget *checkbtn_auto_check_signatures;
1370 GtkWidget *checkbtn_passphrase_grab;
1372 GtkWidget *menuitem;
1374 GtkWidget *optmenu_menu;
1376 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1377 gtk_widget_show (vbox1);
1378 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1379 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1381 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1382 gtk_widget_show (vbox2);
1383 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1385 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1386 _("Encrypt message by default"));
1388 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1389 _("Sign message by default"));
1391 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1392 _("Automatically check signatures"));
1395 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1396 _("Grab input while entering a passphrase"));
1399 hbox1 = gtk_hbox_new (FALSE, 8);
1400 gtk_widget_show (hbox1);
1401 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1403 /* create default signkey box */
1404 label = gtk_label_new (_("Default Sign Key"));
1405 gtk_widget_show (label);
1406 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1407 optmenu = gtk_option_menu_new ();
1408 gtk_widget_show (optmenu);
1409 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1410 optmenu_menu = gtk_menu_new ();
1412 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1413 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1414 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1415 /* FIXME: disabled because not implemented */
1416 gtk_widget_set_sensitive(optmenu, FALSE);
1418 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1419 privacy.checkbtn_default_sign = checkbtn_default_sign;
1420 privacy.checkbtn_auto_check_signatures
1421 = checkbtn_auto_check_signatures;
1422 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1423 privacy.optmenu_default_signkey = optmenu;
1427 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1431 GtkWidget *menuitem;
1434 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1435 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1436 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1437 g_free(*((gchar **)pparam->data));
1438 *((gchar **)pparam->data) = g_strdup(charset);
1442 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1446 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1448 GtkWidget *menuitem;
1452 g_return_if_fail(optmenu != NULL);
1453 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1455 menu = gtk_option_menu_get_menu(optmenu);
1456 for (cur = GTK_MENU_SHELL(menu)->children;
1457 cur != NULL; cur = cur->next) {
1458 menuitem = GTK_WIDGET(cur->data);
1459 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1460 if (!strcmp(charset, *((gchar **)pparam->data))) {
1461 gtk_option_menu_set_history(optmenu, n);
1467 gtk_option_menu_set_history(optmenu, 0);
1468 prefs_common_charset_set_data_from_optmenu(pparam);
1471 #endif /* USE_GPGME */
1473 static void prefs_interface_create(void)
1478 GtkWidget *checkbtn_emacs;
1479 GtkWidget *checkbtn_openunread;
1480 GtkWidget *checkbtn_openinbox;
1481 GtkWidget *checkbtn_immedexec;
1482 GtkWidget *checkbtn_addaddrbyclick;
1485 GtkWidget *frame_exit;
1486 GtkWidget *vbox_exit;
1488 GtkWidget *checkbtn_confonexit;
1489 GtkWidget *checkbtn_cleanonexit;
1490 GtkWidget *checkbtn_askonclean;
1491 GtkWidget *checkbtn_warnqueued;
1493 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1494 gtk_widget_show (vbox1);
1495 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1496 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1498 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1499 gtk_widget_show (vbox2);
1500 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1502 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1503 _("Emulate the behavior of mouse operation of\n"
1504 "Emacs-based mailer"));
1505 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1509 (vbox2, checkbtn_openunread,
1510 _("Open first unread message when entering a folder"));
1513 (vbox2, checkbtn_openinbox,
1514 _("Go to inbox after receiving new mail"));
1516 vbox3 = gtk_vbox_new (FALSE, 0);
1517 gtk_widget_show (vbox3);
1518 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1521 (vbox3, checkbtn_immedexec,
1522 _("Execute immediately when moving or deleting messages"));
1524 hbox1 = gtk_hbox_new (FALSE, 0);
1525 gtk_widget_show (hbox1);
1526 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1528 label = gtk_label_new
1529 (_("(Messages will be just marked till execution\n"
1530 " if this is turned off)"));
1531 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1532 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1535 (vbox2, checkbtn_addaddrbyclick,
1536 _("Add address to destination when double-clicked"));
1538 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1540 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1541 gtk_widget_show (vbox_exit);
1542 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1543 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1545 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1546 _("Confirm on exit"));
1548 hbox1 = gtk_hbox_new (FALSE, 32);
1549 gtk_widget_show (hbox1);
1550 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1552 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1553 _("Empty trash on exit"));
1554 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1555 _("Ask before emptying"));
1556 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1558 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1559 _("Warn if there are queued messages"));
1561 interface.checkbtn_emacs = checkbtn_emacs;
1562 interface.checkbtn_openunread = checkbtn_openunread;
1563 interface.checkbtn_openinbox = checkbtn_openinbox;
1564 interface.checkbtn_immedexec = checkbtn_immedexec;
1565 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1566 interface.checkbtn_confonexit = checkbtn_confonexit;
1567 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1568 interface.checkbtn_askonclean = checkbtn_askonclean;
1569 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1572 static void prefs_other_create(void)
1577 GtkWidget *uri_frame;
1578 GtkWidget *uri_label;
1579 GtkWidget *uri_combo;
1580 GtkWidget *uri_entry;
1582 GtkWidget *print_frame;
1583 GtkWidget *printcmd_label;
1584 GtkWidget *printcmd_entry;
1586 GtkWidget *exteditor_frame;
1587 GtkWidget *exteditor_label;
1588 GtkWidget *exteditor_combo;
1589 GtkWidget *exteditor_entry;
1591 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1592 gtk_widget_show (vbox1);
1593 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1594 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1596 PACK_FRAME(vbox1, uri_frame,
1597 _("External Web browser (%s will be replaced with URI)"));
1599 hbox1 = gtk_hbox_new (FALSE, 8);
1600 gtk_widget_show (hbox1);
1601 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1602 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1604 uri_label = gtk_label_new (_("Command"));
1605 gtk_widget_show(uri_label);
1606 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1608 uri_combo = gtk_combo_new ();
1609 gtk_widget_show (uri_combo);
1610 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1611 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1612 "netscape -remote 'openURL(%s,raise)'",
1613 "gnome-moz-remote --raise --newwin '%s'",
1614 "kterm -e w3m '%s'",
1615 "kterm -e lynx '%s'",
1618 uri_entry = GTK_COMBO (uri_combo)->entry;
1620 PACK_FRAME(vbox1, print_frame,
1621 _("Printing (%s will be replaced with file name)"));
1623 hbox1 = gtk_hbox_new (FALSE, 8);
1624 gtk_widget_show (hbox1);
1625 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1626 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1628 printcmd_label = gtk_label_new (_("Command"));
1629 gtk_widget_show (printcmd_label);
1630 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1632 printcmd_entry = gtk_entry_new ();
1633 gtk_widget_show (printcmd_entry);
1634 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1636 PACK_FRAME(vbox1, exteditor_frame,
1637 _("External editor (%s will be replaced with file name)"));
1639 hbox1 = gtk_hbox_new (FALSE, 8);
1640 gtk_widget_show (hbox1);
1641 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1642 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1644 exteditor_label = gtk_label_new (_("Command"));
1645 gtk_widget_show (exteditor_label);
1646 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1648 exteditor_combo = gtk_combo_new ();
1649 gtk_widget_show (exteditor_combo);
1650 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1651 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1653 "mgedit --no-fork %s",
1659 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1661 other.uri_combo = uri_combo;
1662 other.uri_entry = uri_entry;
1663 other.printcmd_entry = printcmd_entry;
1665 other.exteditor_combo = exteditor_combo;
1666 other.exteditor_entry = exteditor_entry;
1669 void prefs_quote_colors_dialog(void)
1671 if (!quote_color_win)
1672 prefs_quote_colors_dialog_create();
1673 gtk_widget_show(quote_color_win);
1676 gtk_widget_hide(quote_color_win);
1678 textview_update_message_colors();
1679 main_window_reflect_prefs_all();
1682 static void prefs_quote_colors_dialog_create(void)
1687 GtkWidget *quotelevel1_label;
1688 GtkWidget *quotelevel2_label;
1689 GtkWidget *quotelevel3_label;
1690 GtkWidget *uri_label;
1693 //GtkWidget *cancel_btn;
1694 GtkWidget *recycle_colors_btn;
1695 GtkWidget *frame_colors;
1697 window = gtk_window_new(GTK_WINDOW_DIALOG);
1698 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1699 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1700 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1701 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1702 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1704 vbox = gtk_vbox_new (FALSE, VSPACING);
1705 gtk_container_add (GTK_CONTAINER (window), vbox);
1706 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1707 PACK_FRAME(vbox, frame_colors, _("Colors"));
1709 table = gtk_table_new (4, 2, FALSE);
1710 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1711 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1712 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1713 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1715 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1717 color_buttons.quote_level1_btn = gtk_button_new();
1718 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1719 (GtkAttachOptions) (0),
1720 (GtkAttachOptions) (0), 0, 0);
1721 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1722 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1724 color_buttons.quote_level2_btn = gtk_button_new();
1725 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1726 (GtkAttachOptions) (0),
1727 (GtkAttachOptions) (0), 0, 0);
1728 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1729 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1731 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1732 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1733 (GtkAttachOptions) (0),
1734 (GtkAttachOptions) (0), 0, 0);
1735 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1736 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1738 color_buttons.uri_btn = gtk_button_new_with_label ("");
1739 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1740 (GtkAttachOptions) (0),
1741 (GtkAttachOptions) (0), 0, 0);
1742 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1743 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1745 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1746 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1747 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1748 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1749 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1751 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1752 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1753 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1754 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1755 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1757 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1758 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1759 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1760 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1761 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1763 uri_label = gtk_label_new (_("URI link"));
1764 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1765 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1766 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1767 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1769 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1770 _("Recycle quote colors"));
1772 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1773 NULL, NULL, NULL, NULL);
1774 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1776 gtk_widget_grab_default(ok_btn);
1777 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1778 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1779 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1780 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1782 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1783 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1784 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1785 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1786 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1787 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1788 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1789 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1790 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1791 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1793 /* show message button colors and recycle options */
1794 set_button_bg_color(color_buttons.quote_level1_btn,
1795 prefs_common.quote_level1_col);
1796 set_button_bg_color(color_buttons.quote_level2_btn,
1797 prefs_common.quote_level2_col);
1798 set_button_bg_color(color_buttons.quote_level3_btn,
1799 prefs_common.quote_level3_col);
1800 set_button_bg_color(color_buttons.uri_btn,
1801 prefs_common.uri_col);
1802 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1803 prefs_common.recycle_quote_colors);
1805 gtk_widget_show_all(vbox);
1806 quote_color_win = window;
1809 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1811 gchar *type = (gchar *)data;
1812 gchar *title = NULL;
1813 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1815 GtkColorSelectionDialog *dialog;
1817 if(g_strcasecmp(type, "LEVEL1") == 0) {
1818 title = _("Pick color for quotation level 1");
1819 rgbvalue = prefs_common.quote_level1_col;
1820 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1821 title = _("Pick color for quotation level 2");
1822 rgbvalue = prefs_common.quote_level2_col;
1823 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1824 title = _("Pick color for quotation level 3");
1825 rgbvalue = prefs_common.quote_level3_col;
1826 } else if(g_strcasecmp(type, "URI") == 0) {
1827 title = _("Pick color for URI");
1828 rgbvalue = prefs_common.uri_col;
1829 } else { /* Should never be called */
1830 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1834 color_dialog = gtk_color_selection_dialog_new(title);
1835 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
1836 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
1837 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
1839 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
1840 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
1841 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
1842 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
1844 /* preselect the previous color in the color selection dialog */
1845 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
1846 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
1847 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
1848 dialog = (GtkColorSelectionDialog *)color_dialog;
1849 gtk_color_selection_set_color
1850 ((GtkColorSelection *)dialog->colorsel, color);
1852 gtk_widget_show(color_dialog);
1855 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
1857 GtkColorSelection *colorsel = (GtkColorSelection *)
1858 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
1860 gint red, green, blue, rgbvalue;
1861 gchar *type = (gchar *)data;
1863 gtk_color_selection_get_color(colorsel, color);
1865 red = (gint) (color[0] * 255.0);
1866 green = (gint) (color[1] * 255.0);
1867 blue = (gint) (color[2] * 255.0);
1868 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
1871 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
1872 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
1873 fprintf(stderr, "Color is %x\n", rgbvalue);
1876 if (g_strcasecmp(type, "LEVEL1") == 0) {
1877 prefs_common.quote_level1_col = rgbvalue;
1878 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
1879 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
1880 prefs_common.quote_level2_col = rgbvalue;
1881 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
1882 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
1883 prefs_common.quote_level3_col = rgbvalue;
1884 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
1885 } else if (g_strcasecmp(type, "URI") == 0) {
1886 prefs_common.uri_col = rgbvalue;
1887 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
1889 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
1891 gtk_widget_hide(color_dialog);
1894 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
1896 gtk_widget_hide(color_dialog);
1899 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
1904 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
1905 newstyle = gtk_style_copy(gtk_widget_get_default_style());
1906 newstyle->bg[GTK_STATE_NORMAL] = color;
1907 newstyle->bg[GTK_STATE_PRELIGHT] = color;
1908 newstyle->bg[GTK_STATE_ACTIVE] = color;
1910 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
1913 static void prefs_enable_message_color_toggled(void)
1917 is_active = gtk_toggle_button_get_active
1918 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
1919 gtk_widget_set_sensitive(message.button_edit_col, is_active);
1920 prefs_common.enable_color = is_active;
1923 static void prefs_recycle_colors_toggled(GtkWidget *widget)
1927 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1928 prefs_common.recycle_quote_colors = is_active;
1931 static void prefs_quote_description(void)
1933 if (!quote_desc_win)
1934 prefs_quote_description_create();
1936 gtk_widget_show(quote_desc_win);
1938 gtk_widget_hide(quote_desc_win);
1941 static void prefs_quote_description_create(void)
1949 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
1950 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
1951 _("Description of symbols"));
1952 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
1953 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
1954 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
1955 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
1957 vbox = gtk_vbox_new(FALSE, 8);
1958 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
1960 hbox = gtk_hbox_new(FALSE, 4);
1961 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1963 label = gtk_label_new
1974 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1975 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1977 label = gtk_label_new
1980 "Full Name of Sender\n"
1981 "First Name of Sender\n"
1982 "Initial of Sender\n"
1988 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
1989 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
1991 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1992 NULL, NULL, NULL, NULL);
1993 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1995 gtk_widget_grab_default(ok_btn);
1996 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1997 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1999 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2000 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2002 gtk_widget_show_all(vbox);
2005 /* functions for setting items of SummaryView */
2007 static struct _SummaryDisplayItem
2011 GtkWidget *chkbtn[N_SUMMARY_COLS];
2014 GtkWidget *cancel_btn;
2017 #define SET_ACTIVE(column, var) \
2018 gtk_toggle_button_set_active \
2019 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2021 #define GET_ACTIVE(column, var) \
2022 prefs_common.var = gtk_toggle_button_get_active \
2023 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2025 void prefs_summary_display_item_set(void)
2027 static gboolean cancelled;
2029 if (!summarydispitem.window)
2030 prefs_summary_display_item_dialog_create(&cancelled);
2031 gtk_widget_grab_focus(summarydispitem.ok_btn);
2032 gtk_widget_show(summarydispitem.window);
2033 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2035 SET_ACTIVE(S_COL_MARK, show_mark);
2036 SET_ACTIVE(S_COL_UNREAD, show_unread);
2037 SET_ACTIVE(S_COL_MIME, show_mime);
2038 SET_ACTIVE(S_COL_NUMBER, show_number);
2039 SET_ACTIVE(S_COL_SIZE, show_size);
2040 SET_ACTIVE(S_COL_DATE, show_date);
2041 SET_ACTIVE(S_COL_FROM, show_from);
2042 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2045 gtk_widget_hide(summarydispitem.window);
2047 if (cancelled != TRUE) {
2048 GET_ACTIVE(S_COL_MARK, show_mark);
2049 GET_ACTIVE(S_COL_UNREAD, show_unread);
2050 GET_ACTIVE(S_COL_MIME, show_mime);
2051 GET_ACTIVE(S_COL_NUMBER, show_number);
2052 GET_ACTIVE(S_COL_SIZE, show_size);
2053 GET_ACTIVE(S_COL_DATE, show_date);
2054 GET_ACTIVE(S_COL_FROM, show_from);
2055 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2057 main_window_reflect_prefs_all();
2061 #define SET_CHECK_BUTTON(column, label) \
2063 summarydispitem.chkbtn[column] = \
2064 gtk_check_button_new_with_label(label); \
2065 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2066 summarydispitem.chkbtn[column], \
2070 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2074 GtkWidget *chkbtn_vbox;
2077 GtkWidget *cancel_btn;
2079 window = gtk_window_new(GTK_WINDOW_DIALOG);
2080 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2081 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2082 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2083 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2084 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2085 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2086 GTK_SIGNAL_FUNC(display_item_delete_event),
2088 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2089 GTK_SIGNAL_FUNC(display_item_key_pressed),
2092 vbox = gtk_vbox_new(FALSE, 8);
2093 gtk_container_add(GTK_CONTAINER(window), vbox);
2095 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2096 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2098 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2099 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2100 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2101 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2102 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2103 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2104 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2105 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2107 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2108 &cancel_btn, _("Cancel"), NULL, NULL);
2109 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2110 gtk_widget_grab_default(ok_btn);
2112 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2113 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2114 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2115 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2117 gtk_widget_show_all(vbox);
2119 summarydispitem.window = window;
2120 summarydispitem.ok_btn = ok_btn;
2121 summarydispitem.cancel_btn = cancel_btn;
2124 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2130 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2136 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2137 gboolean *cancelled)
2145 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2146 gboolean *cancelled)
2148 if (event && event->keyval == GDK_Escape) {
2154 static void prefs_font_select(GtkButton *button)
2156 if (!font_sel_win) {
2157 font_sel_win = gtk_font_selection_dialog_new
2158 (_("Font selection"));
2159 gtk_window_position(GTK_WINDOW(font_sel_win),
2160 GTK_WIN_POS_CENTER);
2161 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2162 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2165 (GTK_OBJECT(font_sel_win), "key_press_event",
2166 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2169 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2171 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2173 gtk_signal_connect_object
2174 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2176 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2177 GTK_OBJECT(font_sel_win));
2180 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2181 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2182 gtk_widget_grab_focus
2183 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2184 gtk_widget_show(font_sel_win);
2187 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2191 if (event && event->keyval == GDK_Escape)
2192 gtk_widget_hide(font_sel_win);
2195 static void prefs_font_selection_ok(GtkButton *button)
2199 fontname = gtk_font_selection_dialog_get_font_name
2200 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2203 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2207 gtk_widget_hide(font_sel_win);
2210 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2213 GtkWidget *menuitem;
2216 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2217 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2218 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2219 g_free(*((gchar **)pparam->data));
2220 *((gchar **)pparam->data) = g_strdup(charset);
2223 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2226 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2228 GtkWidget *menuitem;
2232 g_return_if_fail(optmenu != NULL);
2233 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2235 menu = gtk_option_menu_get_menu(optmenu);
2236 for (cur = GTK_MENU_SHELL(menu)->children;
2237 cur != NULL; cur = cur->next) {
2238 menuitem = GTK_WIDGET(cur->data);
2239 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2240 if (!strcmp(charset, *((gchar **)pparam->data))) {
2241 gtk_option_menu_set_history(optmenu, n);
2247 gtk_option_menu_set_history(optmenu, 0);
2248 prefs_common_charset_set_data_from_optmenu(pparam);
2251 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2254 if (event && event->keyval == GDK_Escape)
2255 gtk_widget_hide(dialog.window);
2258 static void prefs_common_ok(GtkButton *button)
2260 prefs_common_apply(button);
2261 gtk_widget_hide(dialog.window);
2262 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2263 gtk_widget_hide(quote_desc_win);
2266 static void prefs_common_apply(GtkButton *button)
2268 prefs_set_data_from_dialog(param);
2269 main_window_reflect_prefs_all();
2270 prefs_common_save_config();