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"
50 #include "prefs_display_headers.h"
52 PrefsCommon prefs_common;
54 static PrefsDialog dialog;
56 static struct Receive {
57 GtkWidget *checkbtn_incext;
58 GtkWidget *entry_incext;
59 GtkWidget *button_incext;
61 GtkWidget *checkbtn_local;
62 GtkWidget *checkbtn_filter_on_inc;
63 GtkWidget *entry_spool;
65 GtkWidget *checkbtn_autochk;
66 GtkWidget *spinbtn_autochk;
67 GtkObject *spinbtn_autochk_adj;
69 GtkWidget *checkbtn_chkonstartup;
71 GtkWidget *spinbtn_maxarticle;
72 GtkObject *spinbtn_maxarticle_adj;
76 GtkWidget *checkbtn_sendext;
77 GtkWidget *entry_sendext;
78 GtkWidget *button_sendext;
80 GtkWidget *checkbtn_savemsg;
81 GtkWidget *checkbtn_queuemsg;
83 GtkWidget *optmenu_charset;
86 static struct Compose {
87 GtkWidget *checkbtn_quote;
88 GtkWidget *entry_quotemark;
89 GtkWidget *text_quotefmt;
90 GtkWidget *checkbtn_autosig;
91 GtkWidget *entry_sigsep;
93 GtkWidget *spinbtn_linewrap;
94 GtkObject *spinbtn_linewrap_adj;
95 GtkWidget *checkbtn_wrapquote;
96 GtkWidget *checkbtn_wrapatsend;
99 static struct Display {
100 GtkWidget *entry_textfont;
101 GtkWidget *button_textfont;
103 GtkWidget *chkbtn_folder_unread;
105 GtkWidget *chkbtn_transhdr;
107 GtkWidget *chkbtn_swapfrom;
108 GtkWidget *chkbtn_hscrollbar;
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_gpgme_warning;
130 GtkWidget *checkbtn_default_encrypt;
131 GtkWidget *checkbtn_default_sign;
132 GtkWidget *checkbtn_auto_check_signatures;
133 GtkWidget *checkbtn_passphrase_grab;
134 GtkWidget *optmenu_default_signkey;
138 static struct Interface {
139 GtkWidget *checkbtn_emacs;
140 GtkWidget *checkbtn_openunread;
141 GtkWidget *checkbtn_openinbox;
142 GtkWidget *checkbtn_immedexec;
143 GtkWidget *checkbtn_confonexit;
144 GtkWidget *checkbtn_cleanonexit;
145 GtkWidget *checkbtn_askonclean;
146 GtkWidget *checkbtn_warnqueued;
147 GtkWidget *checkbtn_returnreceipt;
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;
170 static GtkWidget *entry_datefmt;
171 static GtkWidget *datefmt_sample;
173 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
174 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
176 static void prefs_common_default_signkey_set_data_from_optmenu
178 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
182 parameter name, default value, pointer to the prefs variable, data type,
183 pointer to the widget pointer,
184 pointer to the function for data setting,
185 pointer to the function for widget setting
188 static PrefParam param[] = {
190 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
191 &receive.checkbtn_incext,
192 prefs_set_data_from_toggle, prefs_set_toggle},
193 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
194 &receive.entry_incext,
195 prefs_set_data_from_entry, prefs_set_entry},
197 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
198 &receive.checkbtn_local,
199 prefs_set_data_from_toggle, prefs_set_toggle},
200 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
201 &receive.checkbtn_filter_on_inc,
202 prefs_set_data_from_toggle, prefs_set_toggle},
203 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
204 &receive.entry_spool,
205 prefs_set_data_from_entry, prefs_set_entry},
207 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
208 &receive.checkbtn_autochk,
209 prefs_set_data_from_toggle, prefs_set_toggle},
210 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
211 &receive.spinbtn_autochk,
212 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
213 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
214 &receive.checkbtn_chkonstartup,
215 prefs_set_data_from_toggle, prefs_set_toggle},
217 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
218 &receive.spinbtn_maxarticle,
219 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
222 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
223 &send.checkbtn_sendext,
224 prefs_set_data_from_toggle, prefs_set_toggle},
225 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
226 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
227 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
228 &send.checkbtn_savemsg,
229 prefs_set_data_from_toggle, prefs_set_toggle},
230 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
231 &send.checkbtn_queuemsg,
232 prefs_set_data_from_toggle, prefs_set_toggle},
234 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
235 &send.optmenu_charset,
236 prefs_common_charset_set_data_from_optmenu,
237 prefs_common_charset_set_optmenu},
240 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
241 &compose.checkbtn_quote,
242 prefs_set_data_from_toggle, prefs_set_toggle},
243 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
244 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
245 {"quote_format", "On %d\\n%f wrote:\\n\\n",
246 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
247 prefs_set_data_from_text, prefs_set_text},
249 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
250 &compose.checkbtn_autosig,
251 prefs_set_data_from_toggle, prefs_set_toggle},
252 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
253 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
255 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
256 &compose.spinbtn_linewrap,
257 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
258 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
259 &compose.checkbtn_wrapquote,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"linewrap_before_sending", "FALSE",
262 &prefs_common.linewrap_at_send, P_BOOL,
263 &compose.checkbtn_wrapatsend,
264 prefs_set_data_from_toggle, prefs_set_toggle},
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
270 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
272 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
273 &prefs_common.textfont, P_STRING,
274 &display.entry_textfont,
275 prefs_set_data_from_entry, prefs_set_entry},
277 {"display_folder_unread_num", "TRUE",
278 &prefs_common.display_folder_unread, P_BOOL,
279 &display.chkbtn_folder_unread,
280 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
283 &display.chkbtn_transhdr,
284 prefs_set_data_from_toggle, prefs_set_toggle},
286 /* Display: Summary View */
287 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
288 &display.chkbtn_swapfrom,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
291 &display.chkbtn_hscrollbar,
292 prefs_set_data_from_toggle, prefs_set_toggle},
293 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
294 P_STRING, &entry_datefmt,
295 prefs_set_data_from_entry, prefs_set_entry},
297 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
299 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
301 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
304 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
306 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
308 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
310 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
312 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
314 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
316 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
318 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
322 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
324 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
326 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
328 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
330 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
332 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
334 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
336 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
338 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
340 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
342 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
344 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
346 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
348 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
350 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
352 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
353 P_INT, NULL, NULL, NULL},
354 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
356 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
358 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
360 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
362 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
364 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
366 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
368 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
370 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
372 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
374 {"compose_width", "600", &prefs_common.compose_width, P_INT,
376 {"compose_height", "560", &prefs_common.compose_height, P_INT,
380 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
381 &message.chkbtn_enablecol,
382 prefs_set_data_from_toggle, prefs_set_toggle},
384 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
386 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
388 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
390 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
392 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
394 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
395 P_BOOL, NULL, NULL, NULL},
397 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
398 &message.chkbtn_mbalnum,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
401 P_BOOL, &message.chkbtn_disphdrpane,
402 prefs_set_data_from_toggle, prefs_set_toggle},
403 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
404 &message.chkbtn_disphdr,
405 prefs_set_data_from_toggle, prefs_set_toggle},
406 {"line_space", "2", &prefs_common.line_space, P_INT,
407 &message.spinbtn_linespc,
408 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
409 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
410 &message.chkbtn_headspc,
411 prefs_set_data_from_toggle, prefs_set_toggle},
413 {"enable_smooth_scroll", "FALSE",
414 &prefs_common.enable_smooth_scroll, P_BOOL,
415 &message.chkbtn_smoothscroll,
416 prefs_set_data_from_toggle, prefs_set_toggle},
417 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
418 &message.spinbtn_scrollstep,
419 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
420 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
421 &message.chkbtn_halfpage,
422 prefs_set_data_from_toggle, prefs_set_toggle},
425 {"mime_image_viewer", "display '%s'",
426 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
427 {"mime_audio_player", "play '%s'",
428 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
432 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
433 &privacy.checkbtn_gpgme_warning,
434 prefs_set_data_from_toggle, prefs_set_toggle},
435 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
436 &privacy.checkbtn_default_encrypt,
437 prefs_set_data_from_toggle, prefs_set_toggle},
438 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
439 &privacy.checkbtn_default_sign,
440 prefs_set_data_from_toggle, prefs_set_toggle},
441 {"auto_check_signatures", "TRUE",
442 &prefs_common.auto_check_signatures, P_BOOL,
443 &privacy.checkbtn_auto_check_signatures,
444 prefs_set_data_from_toggle, prefs_set_toggle},
446 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
447 &privacy.checkbtn_passphrase_grab,
448 prefs_set_data_from_toggle, prefs_set_toggle},
449 #endif /* __MINGW32__ */
450 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
451 &privacy.optmenu_default_signkey,
452 prefs_common_default_signkey_set_data_from_optmenu,
453 prefs_common_default_signkey_set_optmenu},
454 #endif /* USE_GPGME */
457 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
459 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
462 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
463 &interface.checkbtn_emacs,
464 prefs_set_data_from_toggle, prefs_set_toggle},
465 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
466 P_BOOL, &interface.checkbtn_openunread,
467 prefs_set_data_from_toggle, prefs_set_toggle},
468 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
469 P_BOOL, &interface.checkbtn_openinbox,
470 prefs_set_data_from_toggle, prefs_set_toggle},
471 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
472 &interface.checkbtn_immedexec,
473 prefs_set_data_from_toggle, prefs_set_toggle},
474 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
475 P_BOOL, &interface.checkbtn_addaddrbyclick,
476 prefs_set_data_from_toggle, prefs_set_toggle},
478 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
479 &interface.checkbtn_confonexit,
480 prefs_set_data_from_toggle, prefs_set_toggle},
481 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
482 &interface.checkbtn_returnreceipt,
483 prefs_set_data_from_toggle, prefs_set_toggle},
484 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
485 &interface.checkbtn_cleanonexit,
486 prefs_set_data_from_toggle, prefs_set_toggle},
487 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
488 &interface.checkbtn_askonclean,
489 prefs_set_data_from_toggle, prefs_set_toggle},
490 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
491 P_BOOL, &interface.checkbtn_warnqueued,
492 prefs_set_data_from_toggle, prefs_set_toggle},
495 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
496 &prefs_common.uri_cmd, P_STRING,
497 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
498 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
499 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
500 {"ext_editor_command", "gedit %s",
501 &prefs_common.ext_editor_cmd, P_STRING,
502 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
504 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
508 #define VSPACING_NARROW 4
509 #define VBOX_BORDER 16
510 #define DEFAULT_ENTRY_WIDTH 80
511 #define PREFSBUFSIZE 1024
513 /* widget creating functions */
514 static void prefs_common_create (void);
515 static void prefs_receive_create (void);
516 static void prefs_send_create (void);
517 static void prefs_compose_create (void);
518 static void prefs_display_create (void);
519 static void prefs_message_create (void);
521 static void prefs_privacy_create (void);
523 static void prefs_interface_create (void);
524 static void prefs_other_create (void);
526 static void prefs_quote_description (void);
527 static void prefs_quote_description_create (void);
528 static void prefs_quote_colors_dialog (void);
529 static void prefs_quote_colors_dialog_create (void);
530 static void quote_color_set_dialog (GtkWidget *widget,
532 static void quote_colors_set_dialog_ok (GtkWidget *widget,
534 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
536 static void set_button_bg_color (GtkWidget *widget,
538 static void prefs_enable_message_color_toggled (void);
539 static void prefs_recycle_colors_toggled (GtkWidget *widget);
541 /* functions for setting items of SummaryView */
542 static void prefs_summary_display_item_dialog_create
543 (gboolean *cancelled);
544 static void display_item_ok (GtkWidget *widget,
545 gboolean *cancelled);
546 static void display_item_cancel (GtkWidget *widget,
547 gboolean *cancelled);
548 static gint display_item_delete_event (GtkWidget *widget,
550 gboolean *cancelled);
551 static void display_item_key_pressed (GtkWidget *widget,
553 gboolean *cancelled);
555 static void prefs_font_select (GtkButton *button);
556 static void prefs_font_selection_key_pressed (GtkWidget *widget,
559 static void prefs_font_selection_ok (GtkButton *button);
561 static void prefs_common_key_pressed (GtkWidget *widget,
564 static void prefs_common_ok (GtkButton *button);
565 static void prefs_common_apply (GtkButton *button);
567 void prefs_common_read_config(void)
569 prefs_read_config(param, "Common", COMMON_RC);
572 void prefs_common_save_config(void)
574 prefs_save_config(param, "Common", COMMON_RC);
577 void prefs_common_open(void)
579 if (!dialog.window) {
580 prefs_common_create();
583 manage_window_set_transient(GTK_WINDOW(dialog.window));
584 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
585 gtk_widget_grab_focus(dialog.ok_btn);
587 prefs_set_dialog(param);
589 gtk_widget_show(dialog.window);
592 static void prefs_common_create(void)
596 debug_print(_("Creating common preferences window...\n"));
598 prefs_dialog_create(&dialog);
599 gtk_window_set_title (GTK_WINDOW(dialog.window),
600 _("Common Preferences"));
601 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
602 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
603 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
604 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
605 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
606 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
607 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
608 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
609 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
610 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
611 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
612 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
613 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
614 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
615 GTK_OBJECT(dialog.window));
617 /* create all widgets on notebook */
618 prefs_receive_create();
619 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
621 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
622 prefs_compose_create();
623 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
624 prefs_display_create();
625 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
626 prefs_message_create();
627 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
629 prefs_privacy_create();
630 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
632 prefs_interface_create();
633 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
634 prefs_other_create();
635 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
637 gtk_widget_show_all(dialog.window);
640 static void prefs_receive_create(void)
644 GtkWidget *frame_incext;
645 GtkWidget *checkbtn_incext;
647 GtkWidget *label_incext;
648 GtkWidget *entry_incext;
649 GtkWidget *button_incext;
651 GtkWidget *frame_spool;
652 GtkWidget *checkbtn_local;
653 GtkWidget *checkbtn_filter_on_inc;
654 GtkWidget *label_spool;
655 GtkWidget *entry_spool;
657 GtkWidget *hbox_autochk;
658 GtkWidget *checkbtn_autochk;
659 GtkWidget *label_autochk1;
660 GtkObject *spinbtn_autochk_adj;
661 GtkWidget *spinbtn_autochk;
662 GtkWidget *label_autochk2;
663 GtkWidget *checkbtn_chkonstartup;
665 GtkWidget *frame_news;
666 GtkWidget *label_maxarticle;
667 GtkWidget *spinbtn_maxarticle;
668 GtkObject *spinbtn_maxarticle_adj;
670 vbox1 = gtk_vbox_new (FALSE, VSPACING);
671 gtk_widget_show (vbox1);
672 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
673 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
675 PACK_FRAME(vbox1, frame_incext, _("External program"));
677 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
678 gtk_widget_show (vbox2);
679 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
680 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
682 /* Use of external incorporation program */
683 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
684 _("Use external program for incorporation"));
686 hbox = gtk_hbox_new (FALSE, 8);
687 gtk_widget_show (hbox);
688 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
689 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
691 label_incext = gtk_label_new (_("Program path"));
692 gtk_widget_show (label_incext);
693 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
695 entry_incext = gtk_entry_new ();
696 gtk_widget_show (entry_incext);
697 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
699 button_incext = gtk_button_new_with_label ("... ");
700 gtk_widget_show (button_incext);
701 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
703 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
705 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
706 gtk_widget_show (vbox2);
707 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
708 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
710 hbox = gtk_hbox_new (FALSE, 32);
711 gtk_widget_show (hbox);
712 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
714 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
715 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
716 _("Filter on incorporation"));
717 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
719 hbox = gtk_hbox_new (FALSE, 8);
720 gtk_widget_show (hbox);
721 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
722 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
724 label_spool = gtk_label_new (_("Spool directory"));
725 gtk_widget_show (label_spool);
726 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
728 entry_spool = gtk_entry_new ();
729 gtk_widget_show (entry_spool);
730 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
732 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
733 gtk_widget_show (vbox2);
734 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
737 hbox_autochk = gtk_hbox_new (FALSE, 8);
738 gtk_widget_show (hbox_autochk);
739 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
741 gtk_widget_set_sensitive(hbox_autochk, FALSE);
743 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
744 _("Auto-check new mail"));
746 label_autochk1 = gtk_label_new (_("each"));
747 gtk_widget_show (label_autochk1);
748 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
750 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
751 spinbtn_autochk = gtk_spin_button_new
752 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
753 gtk_widget_show (spinbtn_autochk);
754 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
755 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
756 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
758 label_autochk2 = gtk_label_new (_("minute(s)"));
759 gtk_widget_show (label_autochk2);
760 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
762 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
763 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
764 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
766 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
767 _("Check new mail on startup"));
769 PACK_FRAME(vbox1, frame_news, _("News"));
771 hbox = gtk_hbox_new (FALSE, 8);
772 gtk_widget_show (hbox);
773 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
774 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
776 label_maxarticle = gtk_label_new
777 (_("Maximum article number to download\n"
778 "(unlimited if 0 is specified)"));
779 gtk_widget_show (label_maxarticle);
780 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
781 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
783 spinbtn_maxarticle_adj =
784 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
785 spinbtn_maxarticle = gtk_spin_button_new
786 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
787 gtk_widget_show (spinbtn_maxarticle);
788 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
790 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
791 gtk_spin_button_set_numeric
792 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
794 receive.checkbtn_incext = checkbtn_incext;
795 receive.entry_incext = entry_incext;
796 receive.button_incext = button_incext;
798 receive.checkbtn_local = checkbtn_local;
799 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
800 receive.entry_spool = entry_spool;
802 receive.checkbtn_autochk = checkbtn_autochk;
803 receive.spinbtn_autochk = spinbtn_autochk;
804 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
806 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
808 receive.spinbtn_maxarticle = spinbtn_maxarticle;
809 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
812 static void prefs_send_create(void)
816 GtkWidget *frame_sendext;
817 GtkWidget *vbox_sendext;
818 GtkWidget *checkbtn_sendext;
820 GtkWidget *label_sendext;
821 GtkWidget *entry_sendext;
822 GtkWidget *button_sendext;
823 GtkWidget *checkbtn_savemsg;
824 GtkWidget *checkbtn_queuemsg;
825 GtkWidget *label_outcharset;
827 GtkWidget *optmenu_menu;
830 vbox1 = gtk_vbox_new (FALSE, VSPACING);
831 gtk_widget_show (vbox1);
832 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
833 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
835 PACK_FRAME(vbox1, frame_sendext, _("External program"));
837 gtk_widget_set_sensitive(frame_sendext, FALSE);
839 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
840 gtk_widget_show (vbox_sendext);
841 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
842 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
844 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
845 _("Use external program for sending"));
847 hbox1 = gtk_hbox_new (FALSE, 8);
848 gtk_widget_show (hbox1);
849 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
850 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
852 label_sendext = gtk_label_new (_("Program path"));
853 gtk_widget_show (label_sendext);
854 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
856 entry_sendext = gtk_entry_new ();
857 gtk_widget_show (entry_sendext);
858 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
860 button_sendext = gtk_button_new_with_label ("... ");
861 gtk_widget_show (button_sendext);
862 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
864 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
865 gtk_widget_show (vbox2);
866 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
868 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
869 _("Save sent message to outbox"));
870 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
871 _("Queue message that failed to send"));
873 hbox1 = gtk_hbox_new (FALSE, 8);
874 gtk_widget_show (hbox1);
875 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
877 label_outcharset = gtk_label_new (_("Outgoing codeset"));
878 gtk_widget_show (label_outcharset);
879 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
881 optmenu = gtk_option_menu_new ();
882 gtk_widget_show (optmenu);
883 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
885 optmenu_menu = gtk_menu_new ();
887 #define SET_MENUITEM(str, charset) \
889 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
892 SET_MENUITEM(_("Automatic"), CS_AUTO);
893 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
895 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
897 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
899 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
900 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
901 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
902 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
903 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
904 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
905 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
906 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
907 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
908 #endif /* HAVE_LIBJCONV */
909 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
911 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
912 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
915 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
916 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
918 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
919 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
921 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
922 #endif /* HAVE_LIBJCONV */
924 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
926 send.checkbtn_sendext = checkbtn_sendext;
927 send.entry_sendext = entry_sendext;
928 send.button_sendext = button_sendext;
930 send.checkbtn_savemsg = checkbtn_savemsg;
931 send.checkbtn_queuemsg = checkbtn_queuemsg;
933 send.optmenu_charset = optmenu;
936 static void prefs_compose_create(void)
939 GtkWidget *frame_quote;
940 GtkWidget *vbox_quote;
941 GtkWidget *checkbtn_quote;
943 GtkWidget *label_quotemark;
944 GtkWidget *entry_quotemark;
946 GtkWidget *label_quotefmt;
947 GtkWidget *btn_quotedesc;
948 GtkWidget *scrolledwin_quotefmt;
949 GtkWidget *text_quotefmt;
951 GtkWidget *frame_sig;
953 GtkWidget *checkbtn_autosig;
954 GtkWidget *label_sigsep;
955 GtkWidget *entry_sigsep;
957 GtkWidget *vbox_linewrap;
960 GtkWidget *label_linewrap;
961 GtkObject *spinbtn_linewrap_adj;
962 GtkWidget *spinbtn_linewrap;
963 GtkWidget *checkbtn_wrapquote;
964 GtkWidget *checkbtn_wrapatsend;
966 vbox1 = gtk_vbox_new (FALSE, VSPACING);
967 gtk_widget_show (vbox1);
968 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
969 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
971 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
973 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
974 gtk_widget_show (vbox_quote);
975 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
976 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
978 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
979 _("Quote message when replying"));
981 hbox1 = gtk_hbox_new (FALSE, 8);
982 gtk_widget_show (hbox1);
983 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
985 label_quotemark = gtk_label_new (_("Quotation mark"));
986 gtk_widget_show (label_quotemark);
987 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
989 entry_quotemark = gtk_entry_new ();
990 gtk_widget_show (entry_quotemark);
991 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
992 gtk_widget_set_usize (entry_quotemark, 64, -1);
994 hbox2 = gtk_hbox_new (FALSE, 0);
995 gtk_widget_show (hbox2);
996 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
998 label_quotefmt = gtk_label_new (_("Quotation format:"));
999 gtk_widget_show (label_quotefmt);
1000 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1003 gtk_button_new_with_label (_(" Description of symbols "));
1004 gtk_widget_show (btn_quotedesc);
1005 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1006 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1007 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1009 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1010 gtk_widget_show (scrolledwin_quotefmt);
1011 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1012 gtk_scrolled_window_set_policy
1013 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1014 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1016 text_quotefmt = gtk_text_new (NULL, NULL);
1017 gtk_widget_show (text_quotefmt);
1018 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1019 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1020 gtk_widget_set_usize(text_quotefmt, -1, 60);
1022 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1024 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1025 gtk_widget_show (vbox_sig);
1026 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1027 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1029 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1030 _("Insert signature automatically"));
1032 hbox1 = gtk_hbox_new (FALSE, 8);
1033 gtk_widget_show (hbox1);
1034 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1036 label_sigsep = gtk_label_new (_("Signature separator"));
1037 gtk_widget_show (label_sigsep);
1038 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1040 entry_sigsep = gtk_entry_new ();
1041 gtk_widget_show (entry_sigsep);
1042 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1043 gtk_widget_set_usize (entry_sigsep, 64, -1);
1046 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1047 gtk_widget_show (vbox_linewrap);
1048 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1050 hbox3 = gtk_hbox_new (FALSE, 8);
1051 gtk_widget_show (hbox3);
1052 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1054 label_linewrap = gtk_label_new (_("Wrap messages at"));
1055 gtk_widget_show (label_linewrap);
1056 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1058 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1059 spinbtn_linewrap = gtk_spin_button_new
1060 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1061 gtk_widget_show (spinbtn_linewrap);
1062 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1063 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1064 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1066 label_linewrap = gtk_label_new (_("characters"));
1067 gtk_widget_show (label_linewrap);
1068 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1070 hbox4 = gtk_hbox_new (FALSE, 32);
1071 gtk_widget_show (hbox4);
1072 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1074 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1076 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1078 compose.checkbtn_quote = checkbtn_quote;
1079 compose.entry_quotemark = entry_quotemark;
1080 compose.text_quotefmt = text_quotefmt;
1081 compose.checkbtn_autosig = checkbtn_autosig;
1082 compose.entry_sigsep = entry_sigsep;
1084 compose.spinbtn_linewrap = spinbtn_linewrap;
1085 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1086 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1087 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1091 /* alfons - nice ui for darko */
1093 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1097 g_return_if_fail(widget != NULL);
1098 g_return_if_fail(*widget != NULL);
1099 g_return_if_fail(entry_datefmt != NULL);
1100 g_return_if_fail(datefmt_sample != NULL);
1102 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1103 g_free(prefs_common.date_format);
1104 prefs_common.date_format = text;
1105 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1107 gtk_widget_destroy(*widget);
1111 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1113 g_return_if_fail(widget != NULL);
1114 g_return_if_fail(*widget != NULL);
1119 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1122 struct tm *cal_time;
1125 cur_time = time(NULL);
1126 cal_time = localtime(&cur_time);
1128 text = gtk_editable_get_chars(editable, 0, -1);
1130 strftime(buffer, sizeof buffer, text, cal_time);
1132 gtk_label_set_text(example, buffer);
1135 static GtkWidget *create_date_format(GtkButton *button, void *data)
1137 static GtkWidget *date_format = NULL;
1139 GtkWidget *scrolledwindow1;
1140 GtkWidget *date_format_list;
1158 { "%a", _("the full abbreviated weekday name") },
1159 { "%A", _("the full weekday name") },
1160 { "%b", _("the abbreviated month name") },
1161 { "%B", _("the full month name") },
1162 { "%c", _("the preferred date and time for the current locale") },
1163 { "%C", _("the century number (year/100)") },
1164 { "%d", _("the day of the month as a decimal number") },
1165 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1166 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1167 { "%j", _("the day of the year as a decimal number") },
1168 { "%m", _("the month as a decimal number") },
1169 { "%M", _("the minute as a decimal number") },
1170 { "%p", _("either AM or PM") },
1171 { "%S", _("the second as a decimal number") },
1172 { "%w", _("the day of the week as a decimal number") },
1173 { "%x", _("the preferred date for the current locale") },
1174 { "%y", _("the last two digits of a year") },
1175 { "%Y", _("the year as a decimal number") },
1176 { "%Z", _("the time zone or name or abbreviation") }
1179 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1181 if (date_format) return date_format;
1183 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1184 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1185 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1186 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1188 vbox1 = gtk_vbox_new(FALSE, 10);
1189 gtk_widget_show(vbox1);
1190 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1192 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1193 gtk_widget_show(scrolledwindow1);
1194 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1196 date_format_list = gtk_clist_new(2);
1197 gtk_widget_show(date_format_list);
1198 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1199 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1200 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1201 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1203 label3 = gtk_label_new(_("Date Format"));
1204 gtk_widget_show(label3);
1205 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1207 label4 = gtk_label_new(_("Date Format Description"));
1208 gtk_widget_show(label4);
1209 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1211 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1213 /* phoney casting necessary because of gtk... */
1214 text[0] = (gchar *) time_format[tmp].fmt;
1215 text[1] = (gchar *) time_format[tmp].txt;
1217 gtk_clist_append(GTK_CLIST(date_format_list), text);
1220 table2 = gtk_table_new(1, 1, TRUE);
1221 gtk_widget_show(table2);
1222 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1224 vbox2 = gtk_vbox_new(FALSE, 0);
1225 gtk_widget_show(vbox2);
1226 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1227 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1228 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1230 vbox3 = gtk_vbox_new(TRUE, 4);
1231 gtk_widget_show(vbox3);
1232 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1234 hbox2 = gtk_hbox_new(FALSE, 0);
1235 gtk_widget_show(hbox2);
1236 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1238 label5 = gtk_label_new(_("Date format"));
1239 gtk_widget_show(label5);
1240 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1241 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1243 datefmt_sample = gtk_entry_new_with_max_length(300);
1244 gtk_widget_show(datefmt_sample);
1245 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1247 hbox1 = gtk_hbox_new(FALSE, 0);
1248 gtk_widget_show(hbox1);
1249 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1251 label6 = gtk_label_new(_("Example"));
1252 gtk_widget_show(label6);
1253 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1254 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1256 label7 = gtk_label_new(_("label7"));
1257 gtk_widget_show(label7);
1258 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1259 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1261 hbox3 = gtk_hbox_new(TRUE, 0);
1262 gtk_widget_show(hbox3);
1263 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1265 button1 = gtk_button_new_with_label(_("Close"));
1266 gtk_widget_show(button1);
1267 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1269 /* set the current format */
1270 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1271 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1274 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1275 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1277 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1278 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1280 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1281 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1283 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1284 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1286 gtk_widget_show(date_format);
1290 static void prefs_display_create(void)
1293 GtkWidget *frame_font;
1295 GtkWidget *label_textfont;
1296 GtkWidget *entry_textfont;
1297 GtkWidget *button_textfont;
1298 GtkWidget *chkbtn_folder_unread;
1299 GtkWidget *chkbtn_transhdr;
1300 GtkWidget *frame_summary;
1302 GtkWidget *chkbtn_swapfrom;
1303 GtkWidget *chkbtn_hscrollbar;
1305 GtkWidget *label_datefmt;
1306 GtkWidget *button_dispitem;
1307 GtkWidget *button_headers_display;
1309 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1310 gtk_widget_show (vbox1);
1311 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1312 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1314 PACK_FRAME(vbox1, frame_font, _("Font"));
1316 table1 = gtk_table_new (1, 3, FALSE);
1317 gtk_widget_show (table1);
1318 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1319 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1320 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1321 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1323 label_textfont = gtk_label_new (_("Text"));
1324 gtk_widget_show (label_textfont);
1325 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1326 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1328 entry_textfont = gtk_entry_new ();
1329 gtk_widget_show (entry_textfont);
1330 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1331 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1333 button_textfont = gtk_button_new_with_label ("... ");
1334 gtk_widget_show (button_textfont);
1335 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1337 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1338 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1340 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1341 gtk_widget_show (vbox2);
1342 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1345 (vbox2, chkbtn_transhdr,
1346 _("Translate header name (such as `From:', `Subject:')"));
1348 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1349 _("Display unread number next to folder name"));
1351 /* ---- Summary ---- */
1353 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1355 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1356 gtk_widget_show (vbox2);
1357 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1358 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1361 (vbox2, chkbtn_swapfrom,
1362 _("Display recipient on `From' column if sender is yourself"));
1364 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1366 hbox1 = gtk_hbox_new (FALSE, 8);
1367 gtk_widget_show (hbox1);
1368 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1370 label_datefmt = gtk_button_new_with_label (_("Date format"));
1371 gtk_widget_show (label_datefmt);
1372 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1373 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1374 GTK_SIGNAL_FUNC(create_date_format), NULL);
1376 entry_datefmt = gtk_entry_new ();
1377 gtk_widget_show (entry_datefmt);
1378 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1380 hbox1 = gtk_hbox_new (FALSE, 8);
1381 gtk_widget_show (hbox1);
1382 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1384 button_dispitem = gtk_button_new_with_label
1385 (_(" Set display item of summary... "));
1386 gtk_widget_show (button_dispitem);
1387 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1388 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1389 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1392 hbox1 = gtk_hbox_new (FALSE, 8);
1393 gtk_widget_show (hbox1);
1394 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1396 button_headers_display = gtk_button_new_with_label
1397 (_(" Set displaying of headers... "));
1398 gtk_widget_show (button_headers_display);
1399 gtk_box_pack_start (GTK_BOX (hbox1), button_headers_display, FALSE,
1401 gtk_signal_connect (GTK_OBJECT (button_headers_display), "clicked",
1402 GTK_SIGNAL_FUNC (prefs_display_headers_open),
1405 display.entry_textfont = entry_textfont;
1406 display.button_textfont = button_textfont;
1408 display.chkbtn_folder_unread = chkbtn_folder_unread;
1409 display.chkbtn_transhdr = chkbtn_transhdr;
1411 display.chkbtn_swapfrom = chkbtn_swapfrom;
1412 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1415 static void prefs_message_create(void)
1420 GtkWidget *chkbtn_enablecol;
1421 GtkWidget *button_edit_col;
1422 GtkWidget *chkbtn_mbalnum;
1423 GtkWidget *chkbtn_disphdrpane;
1424 GtkWidget *chkbtn_disphdr;
1425 GtkWidget *hbox_linespc;
1426 GtkWidget *label_linespc;
1427 GtkObject *spinbtn_linespc_adj;
1428 GtkWidget *spinbtn_linespc;
1429 GtkWidget *chkbtn_headspc;
1431 GtkWidget *frame_scr;
1432 GtkWidget *vbox_scr;
1433 GtkWidget *chkbtn_smoothscroll;
1434 GtkWidget *hbox_scr;
1435 GtkWidget *label_scr;
1436 GtkObject *spinbtn_scrollstep_adj;
1437 GtkWidget *spinbtn_scrollstep;
1438 GtkWidget *chkbtn_halfpage;
1440 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1441 gtk_widget_show (vbox1);
1442 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1443 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1445 hbox1 = gtk_hbox_new (FALSE, 8);
1446 gtk_widget_show (hbox1);
1447 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1449 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1450 _("Enable coloration of message"));
1451 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1452 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1455 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1456 gtk_widget_show (button_edit_col);
1457 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1458 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1459 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1461 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1463 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1464 gtk_widget_show (vbox2);
1465 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1468 (vbox2, chkbtn_mbalnum,
1469 _("Display 2-byte alphabet and numeric with 1-byte character"));
1470 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1471 _("Display header pane above message view"));
1472 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1473 _("Display short headers on message view"));
1475 hbox1 = gtk_hbox_new (FALSE, 32);
1476 gtk_widget_show (hbox1);
1477 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1479 hbox_linespc = gtk_hbox_new (FALSE, 8);
1480 gtk_widget_show (hbox1);
1481 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1483 label_linespc = gtk_label_new (_("Line space"));
1484 gtk_widget_show (label_linespc);
1485 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1488 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1489 spinbtn_linespc = gtk_spin_button_new
1490 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1491 gtk_widget_show (spinbtn_linespc);
1492 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1494 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1495 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1497 label_linespc = gtk_label_new (_("pixel(s)"));
1498 gtk_widget_show (label_linespc);
1499 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1502 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1504 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1506 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1507 gtk_widget_show (vbox_scr);
1508 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1509 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1511 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1513 hbox1 = gtk_hbox_new (FALSE, 32);
1514 gtk_widget_show (hbox1);
1515 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1517 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1519 hbox_scr = gtk_hbox_new (FALSE, 8);
1520 gtk_widget_show (hbox_scr);
1521 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1523 label_scr = gtk_label_new (_("Step"));
1524 gtk_widget_show (label_scr);
1525 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1527 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1528 spinbtn_scrollstep = gtk_spin_button_new
1529 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1530 gtk_widget_show (spinbtn_scrollstep);
1531 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1533 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1534 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1537 label_scr = gtk_label_new (_("pixel(s)"));
1538 gtk_widget_show (label_scr);
1539 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1541 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1543 message.chkbtn_enablecol = chkbtn_enablecol;
1544 message.button_edit_col = button_edit_col;
1545 message.chkbtn_mbalnum = chkbtn_mbalnum;
1546 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1547 message.chkbtn_disphdr = chkbtn_disphdr;
1548 message.spinbtn_linespc = spinbtn_linespc;
1549 message.chkbtn_headspc = chkbtn_headspc;
1551 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1552 message.spinbtn_scrollstep = spinbtn_scrollstep;
1553 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1554 message.chkbtn_halfpage = chkbtn_halfpage;
1558 static void prefs_privacy_create(void)
1563 GtkWidget *checkbtn_gpgme_warning;
1564 GtkWidget *checkbtn_default_encrypt;
1565 GtkWidget *checkbtn_default_sign;
1566 GtkWidget *checkbtn_auto_check_signatures;
1567 GtkWidget *checkbtn_passphrase_grab;
1569 GtkWidget *menuitem;
1571 GtkWidget *optmenu_menu;
1573 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1574 gtk_widget_show (vbox1);
1575 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1576 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1578 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1579 gtk_widget_show (vbox2);
1580 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1583 (vbox2, checkbtn_gpgme_warning,
1584 _("Display warning on startup if GnuPG does not work"));
1586 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1587 _("Encrypt message by default"));
1589 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1590 _("Sign message by default"));
1592 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1593 _("Automatically check signatures"));
1596 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1597 _("Grab input while entering a passphrase"));
1600 hbox1 = gtk_hbox_new (FALSE, 8);
1601 gtk_widget_show (hbox1);
1602 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1604 /* create default signkey box */
1605 label = gtk_label_new (_("Default Sign Key"));
1606 gtk_widget_show (label);
1607 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1608 optmenu = gtk_option_menu_new ();
1609 gtk_widget_show (optmenu);
1610 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1611 optmenu_menu = gtk_menu_new ();
1613 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1614 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1615 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1616 /* FIXME: disabled because not implemented */
1617 gtk_widget_set_sensitive(optmenu, FALSE);
1619 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1620 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1621 privacy.checkbtn_default_sign = checkbtn_default_sign;
1622 privacy.checkbtn_auto_check_signatures
1623 = checkbtn_auto_check_signatures;
1624 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1625 privacy.optmenu_default_signkey = optmenu;
1629 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1633 GtkWidget *menuitem;
1636 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1637 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1638 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1639 g_free(*((gchar **)pparam->data));
1640 *((gchar **)pparam->data) = g_strdup(charset);
1644 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1648 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1650 GtkWidget *menuitem;
1654 g_return_if_fail(optmenu != NULL);
1655 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1657 menu = gtk_option_menu_get_menu(optmenu);
1658 for (cur = GTK_MENU_SHELL(menu)->children;
1659 cur != NULL; cur = cur->next) {
1660 menuitem = GTK_WIDGET(cur->data);
1661 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1662 if (!strcmp(charset, *((gchar **)pparam->data))) {
1663 gtk_option_menu_set_history(optmenu, n);
1669 gtk_option_menu_set_history(optmenu, 0);
1670 prefs_common_charset_set_data_from_optmenu(pparam);
1673 #endif /* USE_GPGME */
1675 static void prefs_interface_create(void)
1680 GtkWidget *checkbtn_emacs;
1681 GtkWidget *checkbtn_openunread;
1682 GtkWidget *checkbtn_openinbox;
1683 GtkWidget *checkbtn_immedexec;
1684 GtkWidget *checkbtn_addaddrbyclick;
1687 GtkWidget *frame_exit;
1688 GtkWidget *vbox_exit;
1690 GtkWidget *checkbtn_confonexit;
1691 GtkWidget *checkbtn_cleanonexit;
1692 GtkWidget *checkbtn_askonclean;
1693 GtkWidget *checkbtn_warnqueued;
1694 GtkWidget *checkbtn_returnreceipt;
1696 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1697 gtk_widget_show (vbox1);
1698 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1699 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1701 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1702 gtk_widget_show (vbox2);
1703 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1705 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1706 _("Emulate the behavior of mouse operation of\n"
1707 "Emacs-based mailer"));
1708 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1712 (vbox2, checkbtn_openunread,
1713 _("Open first unread message when entering a folder"));
1716 (vbox2, checkbtn_openinbox,
1717 _("Go to inbox after receiving new mail"));
1719 vbox3 = gtk_vbox_new (FALSE, 0);
1720 gtk_widget_show (vbox3);
1721 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1724 (vbox3, checkbtn_immedexec,
1725 _("Execute immediately when moving or deleting messages"));
1727 hbox1 = gtk_hbox_new (FALSE, 0);
1728 gtk_widget_show (hbox1);
1729 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1731 label = gtk_label_new
1732 (_("(Messages will be just marked till execution\n"
1733 " if this is turned off)"));
1734 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1735 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1738 (vbox2, checkbtn_addaddrbyclick,
1739 _("Add address to destination when double-clicked"));
1741 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1743 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1744 gtk_widget_show (vbox_exit);
1745 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1746 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1748 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1749 _("Confirm on exit"));
1751 hbox1 = gtk_hbox_new (FALSE, 32);
1752 gtk_widget_show (hbox1);
1753 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1755 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1756 _("Empty trash on exit"));
1757 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1758 _("Ask before emptying"));
1759 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1761 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1762 _("Warn if there are queued messages"));
1764 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1765 _("Send return receipt on request"));
1767 interface.checkbtn_emacs = checkbtn_emacs;
1768 interface.checkbtn_openunread = checkbtn_openunread;
1769 interface.checkbtn_openinbox = checkbtn_openinbox;
1770 interface.checkbtn_immedexec = checkbtn_immedexec;
1771 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1772 interface.checkbtn_confonexit = checkbtn_confonexit;
1773 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1774 interface.checkbtn_askonclean = checkbtn_askonclean;
1775 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1776 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1779 static void prefs_other_create(void)
1784 GtkWidget *uri_frame;
1785 GtkWidget *uri_label;
1786 GtkWidget *uri_combo;
1787 GtkWidget *uri_entry;
1789 GtkWidget *print_frame;
1790 GtkWidget *printcmd_label;
1791 GtkWidget *printcmd_entry;
1793 GtkWidget *exteditor_frame;
1794 GtkWidget *exteditor_label;
1795 GtkWidget *exteditor_combo;
1796 GtkWidget *exteditor_entry;
1798 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1799 gtk_widget_show (vbox1);
1800 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1801 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1803 PACK_FRAME(vbox1, uri_frame,
1804 _("External Web browser (%s will be replaced with URI)"));
1806 hbox1 = gtk_hbox_new (FALSE, 8);
1807 gtk_widget_show (hbox1);
1808 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1809 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1811 uri_label = gtk_label_new (_("Command"));
1812 gtk_widget_show(uri_label);
1813 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1815 uri_combo = gtk_combo_new ();
1816 gtk_widget_show (uri_combo);
1817 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1818 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1819 "netscape -remote 'openURL(%s,raise)'",
1820 "gnome-moz-remote --raise --newwin '%s'",
1821 "kterm -e w3m '%s'",
1822 "kterm -e lynx '%s'",
1825 uri_entry = GTK_COMBO (uri_combo)->entry;
1827 PACK_FRAME(vbox1, print_frame,
1828 _("Printing (%s will be replaced with file name)"));
1830 hbox1 = gtk_hbox_new (FALSE, 8);
1831 gtk_widget_show (hbox1);
1832 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1833 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1835 printcmd_label = gtk_label_new (_("Command"));
1836 gtk_widget_show (printcmd_label);
1837 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1839 printcmd_entry = gtk_entry_new ();
1840 gtk_widget_show (printcmd_entry);
1841 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1843 PACK_FRAME(vbox1, exteditor_frame,
1844 _("External editor (%s will be replaced with file name)"));
1846 hbox1 = gtk_hbox_new (FALSE, 8);
1847 gtk_widget_show (hbox1);
1848 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1849 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1851 exteditor_label = gtk_label_new (_("Command"));
1852 gtk_widget_show (exteditor_label);
1853 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1855 exteditor_combo = gtk_combo_new ();
1856 gtk_widget_show (exteditor_combo);
1857 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1858 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1860 "mgedit --no-fork %s",
1866 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1868 other.uri_combo = uri_combo;
1869 other.uri_entry = uri_entry;
1870 other.printcmd_entry = printcmd_entry;
1872 other.exteditor_combo = exteditor_combo;
1873 other.exteditor_entry = exteditor_entry;
1876 void prefs_quote_colors_dialog(void)
1878 if (!quote_color_win)
1879 prefs_quote_colors_dialog_create();
1880 gtk_widget_show(quote_color_win);
1883 gtk_widget_hide(quote_color_win);
1885 textview_update_message_colors();
1886 main_window_reflect_prefs_all();
1889 static void prefs_quote_colors_dialog_create(void)
1894 GtkWidget *quotelevel1_label;
1895 GtkWidget *quotelevel2_label;
1896 GtkWidget *quotelevel3_label;
1897 GtkWidget *uri_label;
1900 //GtkWidget *cancel_btn;
1901 GtkWidget *recycle_colors_btn;
1902 GtkWidget *frame_colors;
1904 window = gtk_window_new(GTK_WINDOW_DIALOG);
1905 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1906 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1907 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1908 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1909 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1911 vbox = gtk_vbox_new (FALSE, VSPACING);
1912 gtk_container_add (GTK_CONTAINER (window), vbox);
1913 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1914 PACK_FRAME(vbox, frame_colors, _("Colors"));
1916 table = gtk_table_new (4, 2, FALSE);
1917 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1918 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1919 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1920 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1922 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1924 color_buttons.quote_level1_btn = gtk_button_new();
1925 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1926 (GtkAttachOptions) (0),
1927 (GtkAttachOptions) (0), 0, 0);
1928 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1929 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1931 color_buttons.quote_level2_btn = gtk_button_new();
1932 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1933 (GtkAttachOptions) (0),
1934 (GtkAttachOptions) (0), 0, 0);
1935 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1936 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1938 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1939 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1940 (GtkAttachOptions) (0),
1941 (GtkAttachOptions) (0), 0, 0);
1942 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1943 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1945 color_buttons.uri_btn = gtk_button_new_with_label ("");
1946 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1947 (GtkAttachOptions) (0),
1948 (GtkAttachOptions) (0), 0, 0);
1949 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1950 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1952 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1953 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1954 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1955 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1956 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1958 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1959 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1960 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1961 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1962 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1964 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1965 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1966 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1967 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1968 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1970 uri_label = gtk_label_new (_("URI link"));
1971 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1972 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1973 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1974 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1976 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1977 _("Recycle quote colors"));
1979 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1980 NULL, NULL, NULL, NULL);
1981 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1983 gtk_widget_grab_default(ok_btn);
1984 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1985 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1986 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1987 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1989 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1990 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1991 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1992 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1993 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1994 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1995 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1996 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1997 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1998 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2000 /* show message button colors and recycle options */
2001 set_button_bg_color(color_buttons.quote_level1_btn,
2002 prefs_common.quote_level1_col);
2003 set_button_bg_color(color_buttons.quote_level2_btn,
2004 prefs_common.quote_level2_col);
2005 set_button_bg_color(color_buttons.quote_level3_btn,
2006 prefs_common.quote_level3_col);
2007 set_button_bg_color(color_buttons.uri_btn,
2008 prefs_common.uri_col);
2009 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2010 prefs_common.recycle_quote_colors);
2012 gtk_widget_show_all(vbox);
2013 quote_color_win = window;
2016 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2018 gchar *type = (gchar *)data;
2019 gchar *title = NULL;
2020 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2022 GtkColorSelectionDialog *dialog;
2024 if(g_strcasecmp(type, "LEVEL1") == 0) {
2025 title = _("Pick color for quotation level 1");
2026 rgbvalue = prefs_common.quote_level1_col;
2027 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2028 title = _("Pick color for quotation level 2");
2029 rgbvalue = prefs_common.quote_level2_col;
2030 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2031 title = _("Pick color for quotation level 3");
2032 rgbvalue = prefs_common.quote_level3_col;
2033 } else if(g_strcasecmp(type, "URI") == 0) {
2034 title = _("Pick color for URI");
2035 rgbvalue = prefs_common.uri_col;
2036 } else { /* Should never be called */
2037 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2041 color_dialog = gtk_color_selection_dialog_new(title);
2042 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2043 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2044 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2046 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2047 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2048 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2049 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2051 /* preselect the previous color in the color selection dialog */
2052 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2053 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2054 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2055 dialog = (GtkColorSelectionDialog *)color_dialog;
2056 gtk_color_selection_set_color
2057 ((GtkColorSelection *)dialog->colorsel, color);
2059 gtk_widget_show(color_dialog);
2062 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2064 GtkColorSelection *colorsel = (GtkColorSelection *)
2065 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2067 gint red, green, blue, rgbvalue;
2068 gchar *type = (gchar *)data;
2070 gtk_color_selection_get_color(colorsel, color);
2072 red = (gint) (color[0] * 255.0);
2073 green = (gint) (color[1] * 255.0);
2074 blue = (gint) (color[2] * 255.0);
2075 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2078 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2079 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2080 fprintf(stderr, "Color is %x\n", rgbvalue);
2083 if (g_strcasecmp(type, "LEVEL1") == 0) {
2084 prefs_common.quote_level1_col = rgbvalue;
2085 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2086 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2087 prefs_common.quote_level2_col = rgbvalue;
2088 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2089 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2090 prefs_common.quote_level3_col = rgbvalue;
2091 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2092 } else if (g_strcasecmp(type, "URI") == 0) {
2093 prefs_common.uri_col = rgbvalue;
2094 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2096 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2098 gtk_widget_hide(color_dialog);
2101 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2103 gtk_widget_hide(color_dialog);
2106 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2111 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2112 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2113 newstyle->bg[GTK_STATE_NORMAL] = color;
2114 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2115 newstyle->bg[GTK_STATE_ACTIVE] = color;
2117 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2120 static void prefs_enable_message_color_toggled(void)
2124 is_active = gtk_toggle_button_get_active
2125 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2126 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2127 prefs_common.enable_color = is_active;
2130 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2134 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2135 prefs_common.recycle_quote_colors = is_active;
2138 static void prefs_quote_description(void)
2140 if (!quote_desc_win)
2141 prefs_quote_description_create();
2143 gtk_widget_show(quote_desc_win);
2145 gtk_widget_hide(quote_desc_win);
2148 static void prefs_quote_description_create(void)
2156 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2157 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2158 _("Description of symbols"));
2159 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2160 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2161 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2162 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2164 vbox = gtk_vbox_new(FALSE, 8);
2165 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2167 hbox = gtk_hbox_new(FALSE, 4);
2168 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2170 label = gtk_label_new
2181 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2182 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2184 label = gtk_label_new
2187 "Full Name of Sender\n"
2188 "First Name of Sender\n"
2189 "Initial of Sender\n"
2195 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2196 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2198 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2199 NULL, NULL, NULL, NULL);
2200 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2202 gtk_widget_grab_default(ok_btn);
2203 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2204 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2206 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2207 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2209 gtk_widget_show_all(vbox);
2212 /* functions for setting items of SummaryView */
2214 static struct _SummaryDisplayItem
2218 GtkWidget *chkbtn[N_SUMMARY_COLS];
2221 GtkWidget *cancel_btn;
2224 #define SET_ACTIVE(column, var) \
2225 gtk_toggle_button_set_active \
2226 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2228 #define GET_ACTIVE(column, var) \
2229 prefs_common.var = gtk_toggle_button_get_active \
2230 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2232 void prefs_summary_display_item_set(void)
2234 static gboolean cancelled;
2236 if (!summarydispitem.window)
2237 prefs_summary_display_item_dialog_create(&cancelled);
2238 gtk_widget_grab_focus(summarydispitem.ok_btn);
2239 gtk_widget_show(summarydispitem.window);
2240 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2242 SET_ACTIVE(S_COL_MARK, show_mark);
2243 SET_ACTIVE(S_COL_UNREAD, show_unread);
2244 SET_ACTIVE(S_COL_MIME, show_mime);
2245 SET_ACTIVE(S_COL_NUMBER, show_number);
2246 SET_ACTIVE(S_COL_SIZE, show_size);
2247 SET_ACTIVE(S_COL_DATE, show_date);
2248 SET_ACTIVE(S_COL_FROM, show_from);
2249 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2252 gtk_widget_hide(summarydispitem.window);
2254 if (cancelled != TRUE) {
2255 GET_ACTIVE(S_COL_MARK, show_mark);
2256 GET_ACTIVE(S_COL_UNREAD, show_unread);
2257 GET_ACTIVE(S_COL_MIME, show_mime);
2258 GET_ACTIVE(S_COL_NUMBER, show_number);
2259 GET_ACTIVE(S_COL_SIZE, show_size);
2260 GET_ACTIVE(S_COL_DATE, show_date);
2261 GET_ACTIVE(S_COL_FROM, show_from);
2262 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2264 main_window_reflect_prefs_all();
2268 #define SET_CHECK_BUTTON(column, label) \
2270 summarydispitem.chkbtn[column] = \
2271 gtk_check_button_new_with_label(label); \
2272 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2273 summarydispitem.chkbtn[column], \
2277 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2281 GtkWidget *chkbtn_vbox;
2284 GtkWidget *cancel_btn;
2286 window = gtk_window_new(GTK_WINDOW_DIALOG);
2287 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2288 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2289 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2290 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2291 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2292 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2293 GTK_SIGNAL_FUNC(display_item_delete_event),
2295 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2296 GTK_SIGNAL_FUNC(display_item_key_pressed),
2299 vbox = gtk_vbox_new(FALSE, 8);
2300 gtk_container_add(GTK_CONTAINER(window), vbox);
2302 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2303 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2305 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2306 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2307 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2308 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2309 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2310 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2311 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2312 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2314 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2315 &cancel_btn, _("Cancel"), NULL, NULL);
2316 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2317 gtk_widget_grab_default(ok_btn);
2319 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2320 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2321 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2322 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2324 gtk_widget_show_all(vbox);
2326 summarydispitem.window = window;
2327 summarydispitem.ok_btn = ok_btn;
2328 summarydispitem.cancel_btn = cancel_btn;
2331 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2337 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2343 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2344 gboolean *cancelled)
2352 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2353 gboolean *cancelled)
2355 if (event && event->keyval == GDK_Escape) {
2361 static void prefs_font_select(GtkButton *button)
2363 if (!font_sel_win) {
2364 font_sel_win = gtk_font_selection_dialog_new
2365 (_("Font selection"));
2366 gtk_window_position(GTK_WINDOW(font_sel_win),
2367 GTK_WIN_POS_CENTER);
2368 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2369 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2372 (GTK_OBJECT(font_sel_win), "key_press_event",
2373 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2376 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2378 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2380 gtk_signal_connect_object
2381 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2383 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2384 GTK_OBJECT(font_sel_win));
2387 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2388 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2389 gtk_widget_grab_focus
2390 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2391 gtk_widget_show(font_sel_win);
2394 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2398 if (event && event->keyval == GDK_Escape)
2399 gtk_widget_hide(font_sel_win);
2402 static void prefs_font_selection_ok(GtkButton *button)
2406 fontname = gtk_font_selection_dialog_get_font_name
2407 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2410 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2414 gtk_widget_hide(font_sel_win);
2417 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2420 GtkWidget *menuitem;
2423 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2424 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2425 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2426 g_free(*((gchar **)pparam->data));
2427 *((gchar **)pparam->data) = g_strdup(charset);
2430 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2433 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2435 GtkWidget *menuitem;
2439 g_return_if_fail(optmenu != NULL);
2440 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2442 menu = gtk_option_menu_get_menu(optmenu);
2443 for (cur = GTK_MENU_SHELL(menu)->children;
2444 cur != NULL; cur = cur->next) {
2445 menuitem = GTK_WIDGET(cur->data);
2446 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2447 if (!strcmp(charset, *((gchar **)pparam->data))) {
2448 gtk_option_menu_set_history(optmenu, n);
2454 gtk_option_menu_set_history(optmenu, 0);
2455 prefs_common_charset_set_data_from_optmenu(pparam);
2458 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2461 if (event && event->keyval == GDK_Escape)
2462 gtk_widget_hide(dialog.window);
2465 static void prefs_common_ok(GtkButton *button)
2467 prefs_common_apply(button);
2468 gtk_widget_hide(dialog.window);
2469 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2470 gtk_widget_hide(quote_desc_win);
2473 static void prefs_common_apply(GtkButton *button)
2475 prefs_set_data_from_dialog(param);
2476 main_window_reflect_prefs_all();
2477 prefs_common_save_config();