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 "prefs_display_header.h"
41 #include "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
50 #include "alertpanel.h"
53 PrefsCommon prefs_common;
55 static PrefsDialog dialog;
57 static struct Receive {
58 GtkWidget *checkbtn_incext;
59 GtkWidget *entry_incext;
60 GtkWidget *button_incext;
62 GtkWidget *checkbtn_local;
63 GtkWidget *checkbtn_filter_on_inc;
64 GtkWidget *entry_spool;
66 GtkWidget *checkbtn_autochk;
67 GtkWidget *spinbtn_autochk;
68 GtkObject *spinbtn_autochk_adj;
70 GtkWidget *checkbtn_chkonstartup;
72 GtkWidget *spinbtn_maxarticle;
73 GtkObject *spinbtn_maxarticle_adj;
77 GtkWidget *checkbtn_sendext;
78 GtkWidget *entry_sendext;
79 GtkWidget *button_sendext;
81 GtkWidget *checkbtn_savemsg;
82 GtkWidget *checkbtn_queuemsg;
84 GtkWidget *optmenu_charset;
87 static struct Compose {
88 GtkWidget *checkbtn_quote;
89 GtkWidget *entry_quotemark;
90 GtkWidget *text_quotefmt;
91 GtkWidget *checkbtn_autosig;
92 GtkWidget *entry_sigsep;
94 GtkWidget *spinbtn_linewrap;
95 GtkObject *spinbtn_linewrap_adj;
96 GtkWidget *checkbtn_wrapquote;
97 GtkWidget *checkbtn_wrapatsend;
100 static struct Display {
101 GtkWidget *entry_textfont;
102 GtkWidget *button_textfont;
104 GtkWidget *chkbtn_folder_unread;
106 GtkWidget *chkbtn_transhdr;
108 GtkWidget *chkbtn_swapfrom;
109 GtkWidget *chkbtn_hscrollbar;
112 static struct Message {
113 GtkWidget *chkbtn_enablecol;
114 GtkWidget *button_edit_col;
115 GtkWidget *chkbtn_mbalnum;
116 GtkWidget *chkbtn_disphdrpane;
117 GtkWidget *chkbtn_disphdr;
118 GtkWidget *spinbtn_linespc;
119 GtkObject *spinbtn_linespc_adj;
120 GtkWidget *chkbtn_headspc;
122 GtkWidget *chkbtn_smoothscroll;
123 GtkWidget *spinbtn_scrollstep;
124 GtkObject *spinbtn_scrollstep_adj;
125 GtkWidget *chkbtn_halfpage;
129 static struct Privacy {
130 GtkWidget *checkbtn_gpgme_warning;
131 GtkWidget *checkbtn_default_encrypt;
132 GtkWidget *checkbtn_default_sign;
133 GtkWidget *checkbtn_auto_check_signatures;
134 GtkWidget *checkbtn_passphrase_grab;
135 GtkWidget *optmenu_default_signkey;
139 static struct Interface {
140 GtkWidget *checkbtn_emacs;
141 GtkWidget *checkbtn_openunread;
142 GtkWidget *checkbtn_openinbox;
143 GtkWidget *checkbtn_immedexec;
144 GtkWidget *checkbtn_confonexit;
145 GtkWidget *checkbtn_cleanonexit;
146 GtkWidget *checkbtn_askonclean;
147 GtkWidget *checkbtn_warnqueued;
148 GtkWidget *checkbtn_returnreceipt;
149 GtkWidget *checkbtn_addaddrbyclick;
152 static struct Other {
153 GtkWidget *uri_combo;
154 GtkWidget *uri_entry;
155 GtkWidget *printcmd_entry;
156 GtkWidget *exteditor_combo;
157 GtkWidget *exteditor_entry;
160 static struct MessageColorButtons {
161 GtkWidget *quote_level1_btn;
162 GtkWidget *quote_level2_btn;
163 GtkWidget *quote_level3_btn;
167 static GtkWidget *quote_desc_win;
168 static GtkWidget *font_sel_win;
169 static GtkWidget *quote_color_win;
170 static GtkWidget *color_dialog;
171 static GtkWidget *entry_datefmt;
172 static GtkWidget *datefmt_sample;
174 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
175 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
177 static void prefs_common_default_signkey_set_data_from_optmenu
179 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
183 parameter name, default value, pointer to the prefs variable, data type,
184 pointer to the widget pointer,
185 pointer to the function for data setting,
186 pointer to the function for widget setting
189 static PrefParam param[] = {
191 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
192 &receive.checkbtn_incext,
193 prefs_set_data_from_toggle, prefs_set_toggle},
194 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
195 &receive.entry_incext,
196 prefs_set_data_from_entry, prefs_set_entry},
198 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
199 &receive.checkbtn_local,
200 prefs_set_data_from_toggle, prefs_set_toggle},
201 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
202 &receive.checkbtn_filter_on_inc,
203 prefs_set_data_from_toggle, prefs_set_toggle},
204 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
205 &receive.entry_spool,
206 prefs_set_data_from_entry, prefs_set_entry},
208 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
209 &receive.checkbtn_autochk,
210 prefs_set_data_from_toggle, prefs_set_toggle},
211 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
212 &receive.spinbtn_autochk,
213 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
214 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
215 &receive.checkbtn_chkonstartup,
216 prefs_set_data_from_toggle, prefs_set_toggle},
218 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
219 &receive.spinbtn_maxarticle,
220 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
223 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
224 &send.checkbtn_sendext,
225 prefs_set_data_from_toggle, prefs_set_toggle},
226 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
227 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
228 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
229 &send.checkbtn_savemsg,
230 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
232 &send.checkbtn_queuemsg,
233 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
236 &send.optmenu_charset,
237 prefs_common_charset_set_data_from_optmenu,
238 prefs_common_charset_set_optmenu},
241 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
242 &compose.checkbtn_quote,
243 prefs_set_data_from_toggle, prefs_set_toggle},
244 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
245 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
246 {"quote_format", "On %d\\n%f wrote:\\n\\n",
247 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
248 prefs_set_data_from_text, prefs_set_text},
250 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
251 &compose.checkbtn_autosig,
252 prefs_set_data_from_toggle, prefs_set_toggle},
253 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
254 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
256 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
257 &compose.spinbtn_linewrap,
258 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
259 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
260 &compose.checkbtn_wrapquote,
261 prefs_set_data_from_toggle, prefs_set_toggle},
262 {"linewrap_before_sending", "FALSE",
263 &prefs_common.linewrap_at_send, P_BOOL,
264 &compose.checkbtn_wrapatsend,
265 prefs_set_data_from_toggle, prefs_set_toggle},
267 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
271 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
273 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
274 &prefs_common.textfont, P_STRING,
275 &display.entry_textfont,
276 prefs_set_data_from_entry, prefs_set_entry},
278 {"display_folder_unread_num", "TRUE",
279 &prefs_common.display_folder_unread, P_BOOL,
280 &display.chkbtn_folder_unread,
281 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
284 &display.chkbtn_transhdr,
285 prefs_set_data_from_toggle, prefs_set_toggle},
287 /* Display: Summary View */
288 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
289 &display.chkbtn_swapfrom,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
292 &display.chkbtn_hscrollbar,
293 prefs_set_data_from_toggle, prefs_set_toggle},
294 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
295 P_STRING, &entry_datefmt,
296 prefs_set_data_from_entry, prefs_set_entry},
298 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
300 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
302 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
305 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
307 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
309 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
311 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
313 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
315 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
317 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
319 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
321 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
325 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
327 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
329 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
331 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
333 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
335 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
337 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
339 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
341 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
343 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
345 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
347 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
349 {"summary_col_score", "40", &prefs_common.summary_col_score,
350 P_INT, NULL, NULL, NULL},
351 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
353 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
355 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
357 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
358 P_INT, NULL, NULL, NULL},
359 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
361 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
363 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
365 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
367 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
369 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
371 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
373 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
375 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
377 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
379 {"compose_width", "600", &prefs_common.compose_width, P_INT,
381 {"compose_height", "560", &prefs_common.compose_height, P_INT,
385 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
386 &message.chkbtn_enablecol,
387 prefs_set_data_from_toggle, prefs_set_toggle},
389 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
391 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
393 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
395 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
397 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
399 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
400 P_BOOL, NULL, NULL, NULL},
402 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
403 &message.chkbtn_mbalnum,
404 prefs_set_data_from_toggle, prefs_set_toggle},
405 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
406 P_BOOL, &message.chkbtn_disphdrpane,
407 prefs_set_data_from_toggle, prefs_set_toggle},
408 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
409 &message.chkbtn_disphdr,
410 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"line_space", "2", &prefs_common.line_space, P_INT,
412 &message.spinbtn_linespc,
413 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
414 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
415 &message.chkbtn_headspc,
416 prefs_set_data_from_toggle, prefs_set_toggle},
418 {"enable_smooth_scroll", "FALSE",
419 &prefs_common.enable_smooth_scroll, P_BOOL,
420 &message.chkbtn_smoothscroll,
421 prefs_set_data_from_toggle, prefs_set_toggle},
422 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
423 &message.spinbtn_scrollstep,
424 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
425 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
426 &message.chkbtn_halfpage,
427 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
433 {"mime_image_viewer", "display '%s'",
434 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
435 {"mime_audio_player", "play '%s'",
436 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
440 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
441 &privacy.checkbtn_gpgme_warning,
442 prefs_set_data_from_toggle, prefs_set_toggle},
443 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
444 &privacy.checkbtn_default_encrypt,
445 prefs_set_data_from_toggle, prefs_set_toggle},
446 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
447 &privacy.checkbtn_default_sign,
448 prefs_set_data_from_toggle, prefs_set_toggle},
449 {"auto_check_signatures", "TRUE",
450 &prefs_common.auto_check_signatures, P_BOOL,
451 &privacy.checkbtn_auto_check_signatures,
452 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
455 &privacy.checkbtn_passphrase_grab,
456 prefs_set_data_from_toggle, prefs_set_toggle},
457 #endif /* __MINGW32__ */
458 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
459 &privacy.optmenu_default_signkey,
460 prefs_common_default_signkey_set_data_from_optmenu,
461 prefs_common_default_signkey_set_optmenu},
462 #endif /* USE_GPGME */
465 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
467 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
470 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
471 &interface.checkbtn_emacs,
472 prefs_set_data_from_toggle, prefs_set_toggle},
473 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
474 P_BOOL, &interface.checkbtn_openunread,
475 prefs_set_data_from_toggle, prefs_set_toggle},
476 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
477 P_BOOL, &interface.checkbtn_openinbox,
478 prefs_set_data_from_toggle, prefs_set_toggle},
479 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
480 &interface.checkbtn_immedexec,
481 prefs_set_data_from_toggle, prefs_set_toggle},
482 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
483 P_BOOL, &interface.checkbtn_addaddrbyclick,
484 prefs_set_data_from_toggle, prefs_set_toggle},
486 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
487 &interface.checkbtn_confonexit,
488 prefs_set_data_from_toggle, prefs_set_toggle},
489 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
490 &interface.checkbtn_returnreceipt,
491 prefs_set_data_from_toggle, prefs_set_toggle},
492 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
493 &interface.checkbtn_cleanonexit,
494 prefs_set_data_from_toggle, prefs_set_toggle},
495 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
496 &interface.checkbtn_askonclean,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
499 P_BOOL, &interface.checkbtn_warnqueued,
500 prefs_set_data_from_toggle, prefs_set_toggle},
503 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
504 &prefs_common.uri_cmd, P_STRING,
505 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
506 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
507 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
508 {"ext_editor_command", "gedit %s",
509 &prefs_common.ext_editor_cmd, P_STRING,
510 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
512 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
516 #define VSPACING_NARROW 4
517 #define VBOX_BORDER 16
518 #define DEFAULT_ENTRY_WIDTH 80
519 #define PREFSBUFSIZE 1024
521 /* widget creating functions */
522 static void prefs_common_create (void);
523 static void prefs_receive_create (void);
524 static void prefs_send_create (void);
525 static void prefs_compose_create (void);
526 static void prefs_display_create (void);
527 static void prefs_message_create (void);
529 static void prefs_privacy_create (void);
531 static void prefs_interface_create (void);
532 static void prefs_other_create (void);
534 static void prefs_quote_description (void);
535 static void prefs_quote_description_create (void);
536 static void prefs_quote_colors_dialog (void);
537 static void prefs_quote_colors_dialog_create (void);
538 static void quote_color_set_dialog (GtkWidget *widget,
540 static void quote_colors_set_dialog_ok (GtkWidget *widget,
542 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
544 static void set_button_bg_color (GtkWidget *widget,
546 static void prefs_enable_message_color_toggled (void);
547 static void prefs_recycle_colors_toggled (GtkWidget *widget);
549 /* functions for setting items of SummaryView */
550 static void prefs_summary_display_item_dialog_create
551 (gboolean *cancelled);
552 static void display_item_ok (GtkWidget *widget,
553 gboolean *cancelled);
554 static void display_item_cancel (GtkWidget *widget,
555 gboolean *cancelled);
556 static gint display_item_delete_event (GtkWidget *widget,
558 gboolean *cancelled);
559 static void display_item_key_pressed (GtkWidget *widget,
561 gboolean *cancelled);
563 static void prefs_font_select (GtkButton *button);
564 static void prefs_font_selection_key_pressed (GtkWidget *widget,
567 static void prefs_font_selection_ok (GtkButton *button);
569 static void prefs_common_key_pressed (GtkWidget *widget,
572 static void prefs_common_ok (void);
573 static void prefs_common_apply (void);
574 static void prefs_common_cancel (void);
576 void prefs_common_read_config(void)
578 prefs_read_config(param, "Common", COMMON_RC);
581 void prefs_common_save_config(void)
583 prefs_save_config(param, "Common", COMMON_RC);
586 void prefs_common_open(void)
588 inc_autocheck_timer_remove();
590 if (!dialog.window) {
591 prefs_common_create();
594 manage_window_set_transient(GTK_WINDOW(dialog.window));
595 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
596 gtk_widget_grab_focus(dialog.ok_btn);
598 prefs_set_dialog(param);
600 gtk_widget_show(dialog.window);
603 static void prefs_common_create(void)
607 debug_print(_("Creating common preferences window...\n"));
609 prefs_dialog_create(&dialog);
610 gtk_window_set_title (GTK_WINDOW(dialog.window),
611 _("Common Preferences"));
612 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
613 GTK_SIGNAL_FUNC(prefs_common_cancel), NULL);
614 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
615 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
616 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
617 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
618 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
619 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
620 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
621 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
622 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
623 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
624 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
625 GTK_SIGNAL_FUNC(prefs_common_cancel),
626 GTK_OBJECT(dialog.window));
628 /* create all widgets on notebook */
629 prefs_receive_create();
630 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
632 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
633 prefs_compose_create();
634 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
635 prefs_display_create();
636 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
637 prefs_message_create();
638 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
640 prefs_privacy_create();
641 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
643 prefs_interface_create();
644 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
645 prefs_other_create();
646 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
648 gtk_widget_show_all(dialog.window);
651 static void prefs_receive_create(void)
655 GtkWidget *frame_incext;
656 GtkWidget *checkbtn_incext;
658 GtkWidget *label_incext;
659 GtkWidget *entry_incext;
660 GtkWidget *button_incext;
662 GtkWidget *frame_spool;
663 GtkWidget *checkbtn_local;
664 GtkWidget *checkbtn_filter_on_inc;
665 GtkWidget *label_spool;
666 GtkWidget *entry_spool;
668 GtkWidget *hbox_autochk;
669 GtkWidget *checkbtn_autochk;
670 GtkWidget *label_autochk1;
671 GtkObject *spinbtn_autochk_adj;
672 GtkWidget *spinbtn_autochk;
673 GtkWidget *label_autochk2;
674 GtkWidget *checkbtn_chkonstartup;
676 GtkWidget *frame_news;
677 GtkWidget *label_maxarticle;
678 GtkWidget *spinbtn_maxarticle;
679 GtkObject *spinbtn_maxarticle_adj;
681 vbox1 = gtk_vbox_new (FALSE, VSPACING);
682 gtk_widget_show (vbox1);
683 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
684 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
686 PACK_FRAME(vbox1, frame_incext, _("External program"));
688 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
689 gtk_widget_show (vbox2);
690 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
691 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
693 /* Use of external incorporation program */
694 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
695 _("Use external program for incorporation"));
697 hbox = gtk_hbox_new (FALSE, 8);
698 gtk_widget_show (hbox);
699 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
700 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
702 label_incext = gtk_label_new (_("Program path"));
703 gtk_widget_show (label_incext);
704 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
706 entry_incext = gtk_entry_new ();
707 gtk_widget_show (entry_incext);
708 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
710 button_incext = gtk_button_new_with_label ("... ");
711 gtk_widget_show (button_incext);
712 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
714 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
716 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
717 gtk_widget_show (vbox2);
718 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
719 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
721 hbox = gtk_hbox_new (FALSE, 32);
722 gtk_widget_show (hbox);
723 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
725 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
726 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
727 _("Filter on incorporation"));
728 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
730 hbox = gtk_hbox_new (FALSE, 8);
731 gtk_widget_show (hbox);
732 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
733 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
735 label_spool = gtk_label_new (_("Spool directory"));
736 gtk_widget_show (label_spool);
737 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
739 entry_spool = gtk_entry_new ();
740 gtk_widget_show (entry_spool);
741 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
743 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
744 gtk_widget_show (vbox2);
745 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
748 hbox_autochk = gtk_hbox_new (FALSE, 8);
749 gtk_widget_show (hbox_autochk);
750 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
752 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
753 _("Auto-check new mail"));
755 label_autochk1 = gtk_label_new (_("each"));
756 gtk_widget_show (label_autochk1);
757 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
759 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
760 spinbtn_autochk = gtk_spin_button_new
761 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
762 gtk_widget_show (spinbtn_autochk);
763 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
764 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
765 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
767 label_autochk2 = gtk_label_new (_("minute(s)"));
768 gtk_widget_show (label_autochk2);
769 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
771 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
772 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
773 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
775 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
776 _("Check new mail on startup"));
778 PACK_FRAME(vbox1, frame_news, _("News"));
780 hbox = gtk_hbox_new (FALSE, 8);
781 gtk_widget_show (hbox);
782 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
783 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
785 label_maxarticle = gtk_label_new
786 (_("Maximum article number to download\n"
787 "(unlimited if 0 is specified)"));
788 gtk_widget_show (label_maxarticle);
789 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
790 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
792 spinbtn_maxarticle_adj =
793 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
794 spinbtn_maxarticle = gtk_spin_button_new
795 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
796 gtk_widget_show (spinbtn_maxarticle);
797 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
799 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
800 gtk_spin_button_set_numeric
801 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
803 receive.checkbtn_incext = checkbtn_incext;
804 receive.entry_incext = entry_incext;
805 receive.button_incext = button_incext;
807 receive.checkbtn_local = checkbtn_local;
808 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
809 receive.entry_spool = entry_spool;
811 receive.checkbtn_autochk = checkbtn_autochk;
812 receive.spinbtn_autochk = spinbtn_autochk;
813 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
815 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
817 receive.spinbtn_maxarticle = spinbtn_maxarticle;
818 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
821 static void prefs_send_create(void)
825 GtkWidget *frame_sendext;
826 GtkWidget *vbox_sendext;
827 GtkWidget *checkbtn_sendext;
829 GtkWidget *label_sendext;
830 GtkWidget *entry_sendext;
831 GtkWidget *button_sendext;
832 GtkWidget *checkbtn_savemsg;
833 GtkWidget *checkbtn_queuemsg;
834 GtkWidget *label_outcharset;
836 GtkWidget *optmenu_menu;
839 vbox1 = gtk_vbox_new (FALSE, VSPACING);
840 gtk_widget_show (vbox1);
841 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
842 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
844 PACK_FRAME(vbox1, frame_sendext, _("External program"));
846 gtk_widget_set_sensitive(frame_sendext, FALSE);
848 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
849 gtk_widget_show (vbox_sendext);
850 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
851 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
853 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
854 _("Use external program for sending"));
856 hbox1 = gtk_hbox_new (FALSE, 8);
857 gtk_widget_show (hbox1);
858 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
859 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
861 label_sendext = gtk_label_new (_("Program path"));
862 gtk_widget_show (label_sendext);
863 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
865 entry_sendext = gtk_entry_new ();
866 gtk_widget_show (entry_sendext);
867 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
869 button_sendext = gtk_button_new_with_label ("... ");
870 gtk_widget_show (button_sendext);
871 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
873 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
874 gtk_widget_show (vbox2);
875 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
877 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
878 _("Save sent message to outbox"));
879 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
880 _("Queue message that failed to send"));
882 hbox1 = gtk_hbox_new (FALSE, 8);
883 gtk_widget_show (hbox1);
884 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
886 label_outcharset = gtk_label_new (_("Outgoing codeset"));
887 gtk_widget_show (label_outcharset);
888 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
890 optmenu = gtk_option_menu_new ();
891 gtk_widget_show (optmenu);
892 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
894 optmenu_menu = gtk_menu_new ();
896 #define SET_MENUITEM(str, charset) \
898 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
901 SET_MENUITEM(_("Automatic"), CS_AUTO);
902 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
904 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
906 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
908 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
909 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
910 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
911 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
912 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
913 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
914 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
915 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
916 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
917 #endif /* HAVE_LIBJCONV */
918 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
920 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
921 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
924 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
925 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
927 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
928 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
930 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
931 #endif /* HAVE_LIBJCONV */
933 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
935 send.checkbtn_sendext = checkbtn_sendext;
936 send.entry_sendext = entry_sendext;
937 send.button_sendext = button_sendext;
939 send.checkbtn_savemsg = checkbtn_savemsg;
940 send.checkbtn_queuemsg = checkbtn_queuemsg;
942 send.optmenu_charset = optmenu;
945 static void prefs_compose_create(void)
948 GtkWidget *frame_quote;
949 GtkWidget *vbox_quote;
950 GtkWidget *checkbtn_quote;
952 GtkWidget *label_quotemark;
953 GtkWidget *entry_quotemark;
955 GtkWidget *label_quotefmt;
956 GtkWidget *btn_quotedesc;
957 GtkWidget *scrolledwin_quotefmt;
958 GtkWidget *text_quotefmt;
960 GtkWidget *frame_sig;
962 GtkWidget *checkbtn_autosig;
963 GtkWidget *label_sigsep;
964 GtkWidget *entry_sigsep;
966 GtkWidget *vbox_linewrap;
969 GtkWidget *label_linewrap;
970 GtkObject *spinbtn_linewrap_adj;
971 GtkWidget *spinbtn_linewrap;
972 GtkWidget *checkbtn_wrapquote;
973 GtkWidget *checkbtn_wrapatsend;
975 vbox1 = gtk_vbox_new (FALSE, VSPACING);
976 gtk_widget_show (vbox1);
977 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
978 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
980 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
982 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
983 gtk_widget_show (vbox_quote);
984 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
985 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
987 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
988 _("Quote message when replying"));
990 hbox1 = gtk_hbox_new (FALSE, 8);
991 gtk_widget_show (hbox1);
992 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
994 label_quotemark = gtk_label_new (_("Quotation mark"));
995 gtk_widget_show (label_quotemark);
996 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
998 entry_quotemark = gtk_entry_new ();
999 gtk_widget_show (entry_quotemark);
1000 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1001 gtk_widget_set_usize (entry_quotemark, 64, -1);
1003 hbox2 = gtk_hbox_new (FALSE, 0);
1004 gtk_widget_show (hbox2);
1005 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1007 label_quotefmt = gtk_label_new (_("Quotation format:"));
1008 gtk_widget_show (label_quotefmt);
1009 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1012 gtk_button_new_with_label (_(" Description of symbols "));
1013 gtk_widget_show (btn_quotedesc);
1014 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1015 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1016 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1018 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1019 gtk_widget_show (scrolledwin_quotefmt);
1020 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1021 gtk_scrolled_window_set_policy
1022 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1023 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1025 text_quotefmt = gtk_text_new (NULL, NULL);
1026 gtk_widget_show (text_quotefmt);
1027 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1028 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1029 gtk_widget_set_usize(text_quotefmt, -1, 60);
1031 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1033 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1034 gtk_widget_show (vbox_sig);
1035 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1036 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1038 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1039 _("Insert signature automatically"));
1041 hbox1 = gtk_hbox_new (FALSE, 8);
1042 gtk_widget_show (hbox1);
1043 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1045 label_sigsep = gtk_label_new (_("Signature separator"));
1046 gtk_widget_show (label_sigsep);
1047 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1049 entry_sigsep = gtk_entry_new ();
1050 gtk_widget_show (entry_sigsep);
1051 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1052 gtk_widget_set_usize (entry_sigsep, 64, -1);
1055 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1056 gtk_widget_show (vbox_linewrap);
1057 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1059 hbox3 = gtk_hbox_new (FALSE, 8);
1060 gtk_widget_show (hbox3);
1061 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1063 label_linewrap = gtk_label_new (_("Wrap messages at"));
1064 gtk_widget_show (label_linewrap);
1065 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1067 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1068 spinbtn_linewrap = gtk_spin_button_new
1069 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1070 gtk_widget_show (spinbtn_linewrap);
1071 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1072 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1073 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1075 label_linewrap = gtk_label_new (_("characters"));
1076 gtk_widget_show (label_linewrap);
1077 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1079 hbox4 = gtk_hbox_new (FALSE, 32);
1080 gtk_widget_show (hbox4);
1081 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1083 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1085 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1087 compose.checkbtn_quote = checkbtn_quote;
1088 compose.entry_quotemark = entry_quotemark;
1089 compose.text_quotefmt = text_quotefmt;
1090 compose.checkbtn_autosig = checkbtn_autosig;
1091 compose.entry_sigsep = entry_sigsep;
1093 compose.spinbtn_linewrap = spinbtn_linewrap;
1094 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1095 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1096 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1100 /* alfons - nice ui for darko */
1102 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1106 g_return_if_fail(widget != NULL);
1107 g_return_if_fail(*widget != NULL);
1108 g_return_if_fail(entry_datefmt != NULL);
1109 g_return_if_fail(datefmt_sample != NULL);
1111 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1112 g_free(prefs_common.date_format);
1113 prefs_common.date_format = text;
1114 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1116 gtk_widget_destroy(*widget);
1120 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1122 g_return_if_fail(widget != NULL);
1123 g_return_if_fail(*widget != NULL);
1128 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1131 struct tm *cal_time;
1134 cur_time = time(NULL);
1135 cal_time = localtime(&cur_time);
1137 text = gtk_editable_get_chars(editable, 0, -1);
1139 strftime(buffer, sizeof buffer, text, cal_time);
1141 gtk_label_set_text(example, buffer);
1144 static GtkWidget *create_date_format(GtkButton *button, void *data)
1146 static GtkWidget *date_format = NULL;
1148 GtkWidget *scrolledwindow1;
1149 GtkWidget *date_format_list;
1167 { "%a", _("the full abbreviated weekday name") },
1168 { "%A", _("the full weekday name") },
1169 { "%b", _("the abbreviated month name") },
1170 { "%B", _("the full month name") },
1171 { "%c", _("the preferred date and time for the current locale") },
1172 { "%C", _("the century number (year/100)") },
1173 { "%d", _("the day of the month as a decimal number") },
1174 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1175 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1176 { "%j", _("the day of the year as a decimal number") },
1177 { "%m", _("the month as a decimal number") },
1178 { "%M", _("the minute as a decimal number") },
1179 { "%p", _("either AM or PM") },
1180 { "%S", _("the second as a decimal number") },
1181 { "%w", _("the day of the week as a decimal number") },
1182 { "%x", _("the preferred date for the current locale") },
1183 { "%y", _("the last two digits of a year") },
1184 { "%Y", _("the year as a decimal number") },
1185 { "%Z", _("the time zone or name or abbreviation") }
1188 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1190 if (date_format) return date_format;
1192 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1193 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1194 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1195 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1197 vbox1 = gtk_vbox_new(FALSE, 10);
1198 gtk_widget_show(vbox1);
1199 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1201 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1202 gtk_widget_show(scrolledwindow1);
1203 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1205 date_format_list = gtk_clist_new(2);
1206 gtk_widget_show(date_format_list);
1207 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1208 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1209 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1210 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1212 label3 = gtk_label_new(_("Date Format"));
1213 gtk_widget_show(label3);
1214 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1216 label4 = gtk_label_new(_("Date Format Description"));
1217 gtk_widget_show(label4);
1218 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1220 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1222 /* phoney casting necessary because of gtk... */
1223 text[0] = (gchar *) time_format[tmp].fmt;
1224 text[1] = (gchar *) time_format[tmp].txt;
1226 gtk_clist_append(GTK_CLIST(date_format_list), text);
1229 table2 = gtk_table_new(1, 1, TRUE);
1230 gtk_widget_show(table2);
1231 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1233 vbox2 = gtk_vbox_new(FALSE, 0);
1234 gtk_widget_show(vbox2);
1235 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1236 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1237 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1239 vbox3 = gtk_vbox_new(TRUE, 4);
1240 gtk_widget_show(vbox3);
1241 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1243 hbox2 = gtk_hbox_new(FALSE, 0);
1244 gtk_widget_show(hbox2);
1245 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1247 label5 = gtk_label_new(_("Date format"));
1248 gtk_widget_show(label5);
1249 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1250 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1252 datefmt_sample = gtk_entry_new_with_max_length(300);
1253 gtk_widget_show(datefmt_sample);
1254 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1256 hbox1 = gtk_hbox_new(FALSE, 0);
1257 gtk_widget_show(hbox1);
1258 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1260 label6 = gtk_label_new(_("Example"));
1261 gtk_widget_show(label6);
1262 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1263 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1265 label7 = gtk_label_new(_("label7"));
1266 gtk_widget_show(label7);
1267 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1268 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1270 hbox3 = gtk_hbox_new(TRUE, 0);
1271 gtk_widget_show(hbox3);
1272 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1274 button1 = gtk_button_new_with_label(_("Close"));
1275 gtk_widget_show(button1);
1276 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1278 /* set the current format */
1279 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1280 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1283 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1284 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1286 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1287 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1289 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1290 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1292 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1293 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1295 gtk_widget_show(date_format);
1299 static void prefs_display_create(void)
1302 GtkWidget *frame_font;
1304 GtkWidget *label_textfont;
1305 GtkWidget *entry_textfont;
1306 GtkWidget *button_textfont;
1307 GtkWidget *chkbtn_folder_unread;
1308 GtkWidget *chkbtn_transhdr;
1309 GtkWidget *frame_summary;
1311 GtkWidget *chkbtn_swapfrom;
1312 GtkWidget *chkbtn_hscrollbar;
1314 GtkWidget *label_datefmt;
1315 GtkWidget *button_dispitem;
1317 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1318 gtk_widget_show (vbox1);
1319 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1320 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1322 PACK_FRAME(vbox1, frame_font, _("Font"));
1324 table1 = gtk_table_new (1, 3, FALSE);
1325 gtk_widget_show (table1);
1326 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1327 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1328 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1329 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1331 label_textfont = gtk_label_new (_("Text"));
1332 gtk_widget_show (label_textfont);
1333 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1334 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1336 entry_textfont = gtk_entry_new ();
1337 gtk_widget_show (entry_textfont);
1338 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1339 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1341 button_textfont = gtk_button_new_with_label ("... ");
1342 gtk_widget_show (button_textfont);
1343 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1345 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1346 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1348 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1349 gtk_widget_show (vbox2);
1350 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1353 (vbox2, chkbtn_transhdr,
1354 _("Translate header name (such as `From:', `Subject:')"));
1356 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1357 _("Display unread number next to folder name"));
1359 /* ---- Summary ---- */
1361 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1363 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1364 gtk_widget_show (vbox2);
1365 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1366 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1369 (vbox2, chkbtn_swapfrom,
1370 _("Display recipient on `From' column if sender is yourself"));
1372 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1374 hbox1 = gtk_hbox_new (FALSE, 8);
1375 gtk_widget_show (hbox1);
1376 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1378 label_datefmt = gtk_button_new_with_label (_("Date format"));
1379 gtk_widget_show (label_datefmt);
1380 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1381 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1382 GTK_SIGNAL_FUNC(create_date_format), NULL);
1384 entry_datefmt = gtk_entry_new ();
1385 gtk_widget_show (entry_datefmt);
1386 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1388 hbox1 = gtk_hbox_new (FALSE, 8);
1389 gtk_widget_show (hbox1);
1390 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1392 button_dispitem = gtk_button_new_with_label
1393 (_(" Set display item of summary... "));
1394 gtk_widget_show (button_dispitem);
1395 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1396 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1397 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1400 display.entry_textfont = entry_textfont;
1401 display.button_textfont = button_textfont;
1403 display.chkbtn_folder_unread = chkbtn_folder_unread;
1404 display.chkbtn_transhdr = chkbtn_transhdr;
1406 display.chkbtn_swapfrom = chkbtn_swapfrom;
1407 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1410 static void prefs_message_create(void)
1415 GtkWidget *chkbtn_enablecol;
1416 GtkWidget *button_edit_col;
1417 GtkWidget *chkbtn_mbalnum;
1418 GtkWidget *chkbtn_disphdrpane;
1419 GtkWidget *chkbtn_disphdr;
1420 GtkWidget *button_edit_disphdr;
1421 GtkWidget *hbox_linespc;
1422 GtkWidget *label_linespc;
1423 GtkObject *spinbtn_linespc_adj;
1424 GtkWidget *spinbtn_linespc;
1425 GtkWidget *chkbtn_headspc;
1427 GtkWidget *frame_scr;
1428 GtkWidget *vbox_scr;
1429 GtkWidget *chkbtn_smoothscroll;
1430 GtkWidget *hbox_scr;
1431 GtkWidget *label_scr;
1432 GtkObject *spinbtn_scrollstep_adj;
1433 GtkWidget *spinbtn_scrollstep;
1434 GtkWidget *chkbtn_halfpage;
1436 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1437 gtk_widget_show (vbox1);
1438 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1439 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1441 hbox1 = gtk_hbox_new (FALSE, 8);
1442 gtk_widget_show (hbox1);
1443 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1445 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1446 _("Enable coloration of message"));
1447 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1448 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1451 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1452 gtk_widget_show (button_edit_col);
1453 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1454 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1455 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1457 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1459 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1460 gtk_widget_show (vbox2);
1461 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1464 (vbox2, chkbtn_mbalnum,
1465 _("Display 2-byte alphabet and numeric with 1-byte character"));
1466 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1467 _("Display header pane above message view"));
1469 hbox1 = gtk_hbox_new (FALSE, 8);
1470 gtk_widget_show (hbox1);
1471 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1473 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1474 _("Display short headers on message view"));
1476 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1477 gtk_widget_show (button_edit_disphdr);
1478 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1480 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1481 GTK_SIGNAL_FUNC (prefs_display_header_open),
1484 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1486 hbox1 = gtk_hbox_new (FALSE, 32);
1487 gtk_widget_show (hbox1);
1488 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1490 hbox_linespc = gtk_hbox_new (FALSE, 8);
1491 gtk_widget_show (hbox1);
1492 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1494 label_linespc = gtk_label_new (_("Line space"));
1495 gtk_widget_show (label_linespc);
1496 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1499 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1500 spinbtn_linespc = gtk_spin_button_new
1501 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1502 gtk_widget_show (spinbtn_linespc);
1503 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1505 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1506 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1508 label_linespc = gtk_label_new (_("pixel(s)"));
1509 gtk_widget_show (label_linespc);
1510 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1513 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1515 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1517 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1518 gtk_widget_show (vbox_scr);
1519 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1520 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1522 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1524 hbox1 = gtk_hbox_new (FALSE, 32);
1525 gtk_widget_show (hbox1);
1526 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1528 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1530 hbox_scr = gtk_hbox_new (FALSE, 8);
1531 gtk_widget_show (hbox_scr);
1532 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1534 label_scr = gtk_label_new (_("Step"));
1535 gtk_widget_show (label_scr);
1536 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1538 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1539 spinbtn_scrollstep = gtk_spin_button_new
1540 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1541 gtk_widget_show (spinbtn_scrollstep);
1542 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1544 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1545 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1548 label_scr = gtk_label_new (_("pixel(s)"));
1549 gtk_widget_show (label_scr);
1550 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1552 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1554 message.chkbtn_enablecol = chkbtn_enablecol;
1555 message.button_edit_col = button_edit_col;
1556 message.chkbtn_mbalnum = chkbtn_mbalnum;
1557 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1558 message.chkbtn_disphdr = chkbtn_disphdr;
1559 message.spinbtn_linespc = spinbtn_linespc;
1560 message.chkbtn_headspc = chkbtn_headspc;
1562 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1563 message.spinbtn_scrollstep = spinbtn_scrollstep;
1564 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1565 message.chkbtn_halfpage = chkbtn_halfpage;
1569 static void prefs_privacy_create(void)
1574 GtkWidget *checkbtn_gpgme_warning;
1575 GtkWidget *checkbtn_default_encrypt;
1576 GtkWidget *checkbtn_default_sign;
1577 GtkWidget *checkbtn_auto_check_signatures;
1578 GtkWidget *checkbtn_passphrase_grab;
1580 GtkWidget *menuitem;
1582 GtkWidget *optmenu_menu;
1584 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1585 gtk_widget_show (vbox1);
1586 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1587 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1589 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1590 gtk_widget_show (vbox2);
1591 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1594 (vbox2, checkbtn_gpgme_warning,
1595 _("Display warning on startup if GnuPG does not work"));
1597 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1598 _("Encrypt message by default"));
1600 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1601 _("Sign message by default"));
1603 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1604 _("Automatically check signatures"));
1607 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1608 _("Grab input while entering a passphrase"));
1611 hbox1 = gtk_hbox_new (FALSE, 8);
1612 gtk_widget_show (hbox1);
1613 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1615 /* create default signkey box */
1616 label = gtk_label_new (_("Default Sign Key"));
1617 gtk_widget_show (label);
1618 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1619 optmenu = gtk_option_menu_new ();
1620 gtk_widget_show (optmenu);
1621 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1622 optmenu_menu = gtk_menu_new ();
1624 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1625 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1626 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1627 /* FIXME: disabled because not implemented */
1628 gtk_widget_set_sensitive(optmenu, FALSE);
1630 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1631 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1632 privacy.checkbtn_default_sign = checkbtn_default_sign;
1633 privacy.checkbtn_auto_check_signatures
1634 = checkbtn_auto_check_signatures;
1635 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1636 privacy.optmenu_default_signkey = optmenu;
1640 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1644 GtkWidget *menuitem;
1647 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1648 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1649 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1650 g_free(*((gchar **)pparam->data));
1651 *((gchar **)pparam->data) = g_strdup(charset);
1655 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1659 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1661 GtkWidget *menuitem;
1665 g_return_if_fail(optmenu != NULL);
1666 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1668 menu = gtk_option_menu_get_menu(optmenu);
1669 for (cur = GTK_MENU_SHELL(menu)->children;
1670 cur != NULL; cur = cur->next) {
1671 menuitem = GTK_WIDGET(cur->data);
1672 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1673 if (!strcmp(charset, *((gchar **)pparam->data))) {
1674 gtk_option_menu_set_history(optmenu, n);
1680 gtk_option_menu_set_history(optmenu, 0);
1681 prefs_common_charset_set_data_from_optmenu(pparam);
1684 #endif /* USE_GPGME */
1686 static void prefs_interface_create(void)
1691 GtkWidget *checkbtn_emacs;
1692 GtkWidget *checkbtn_openunread;
1693 GtkWidget *checkbtn_openinbox;
1694 GtkWidget *checkbtn_immedexec;
1695 GtkWidget *checkbtn_addaddrbyclick;
1698 GtkWidget *frame_exit;
1699 GtkWidget *vbox_exit;
1701 GtkWidget *checkbtn_confonexit;
1702 GtkWidget *checkbtn_cleanonexit;
1703 GtkWidget *checkbtn_askonclean;
1704 GtkWidget *checkbtn_warnqueued;
1705 GtkWidget *checkbtn_returnreceipt;
1707 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1708 gtk_widget_show (vbox1);
1709 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1710 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1712 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1713 gtk_widget_show (vbox2);
1714 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1716 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1717 _("Emulate the behavior of mouse operation of\n"
1718 "Emacs-based mailer"));
1719 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1723 (vbox2, checkbtn_openunread,
1724 _("Open first unread message when entering a folder"));
1727 (vbox2, checkbtn_openinbox,
1728 _("Go to inbox after receiving new mail"));
1730 vbox3 = gtk_vbox_new (FALSE, 0);
1731 gtk_widget_show (vbox3);
1732 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1735 (vbox3, checkbtn_immedexec,
1736 _("Execute immediately when moving or deleting messages"));
1738 hbox1 = gtk_hbox_new (FALSE, 0);
1739 gtk_widget_show (hbox1);
1740 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1742 label = gtk_label_new
1743 (_("(Messages will be just marked till execution\n"
1744 " if this is turned off)"));
1745 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1746 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1749 (vbox2, checkbtn_addaddrbyclick,
1750 _("Add address to destination when double-clicked"));
1752 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1754 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1755 gtk_widget_show (vbox_exit);
1756 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1757 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1759 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1760 _("Confirm on exit"));
1762 hbox1 = gtk_hbox_new (FALSE, 32);
1763 gtk_widget_show (hbox1);
1764 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1766 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1767 _("Empty trash on exit"));
1768 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1769 _("Ask before emptying"));
1770 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1772 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1773 _("Warn if there are queued messages"));
1775 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1776 _("Send return receipt on request"));
1778 interface.checkbtn_emacs = checkbtn_emacs;
1779 interface.checkbtn_openunread = checkbtn_openunread;
1780 interface.checkbtn_openinbox = checkbtn_openinbox;
1781 interface.checkbtn_immedexec = checkbtn_immedexec;
1782 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1783 interface.checkbtn_confonexit = checkbtn_confonexit;
1784 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1785 interface.checkbtn_askonclean = checkbtn_askonclean;
1786 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1787 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1790 static void prefs_other_create(void)
1795 GtkWidget *uri_frame;
1796 GtkWidget *uri_label;
1797 GtkWidget *uri_combo;
1798 GtkWidget *uri_entry;
1800 GtkWidget *print_frame;
1801 GtkWidget *printcmd_label;
1802 GtkWidget *printcmd_entry;
1804 GtkWidget *exteditor_frame;
1805 GtkWidget *exteditor_label;
1806 GtkWidget *exteditor_combo;
1807 GtkWidget *exteditor_entry;
1809 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1810 gtk_widget_show (vbox1);
1811 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1812 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1814 PACK_FRAME(vbox1, uri_frame,
1815 _("External Web browser (%s will be replaced with URI)"));
1817 hbox1 = gtk_hbox_new (FALSE, 8);
1818 gtk_widget_show (hbox1);
1819 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1820 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1822 uri_label = gtk_label_new (_("Command"));
1823 gtk_widget_show(uri_label);
1824 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1826 uri_combo = gtk_combo_new ();
1827 gtk_widget_show (uri_combo);
1828 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1829 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1830 "netscape -remote 'openURL(%s,raise)'",
1831 "gnome-moz-remote --raise --newwin '%s'",
1832 "kterm -e w3m '%s'",
1833 "kterm -e lynx '%s'",
1836 uri_entry = GTK_COMBO (uri_combo)->entry;
1838 PACK_FRAME(vbox1, print_frame,
1839 _("Printing (%s will be replaced with file name)"));
1841 hbox1 = gtk_hbox_new (FALSE, 8);
1842 gtk_widget_show (hbox1);
1843 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1844 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1846 printcmd_label = gtk_label_new (_("Command"));
1847 gtk_widget_show (printcmd_label);
1848 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1850 printcmd_entry = gtk_entry_new ();
1851 gtk_widget_show (printcmd_entry);
1852 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1854 PACK_FRAME(vbox1, exteditor_frame,
1855 _("External editor (%s will be replaced with file name)"));
1857 hbox1 = gtk_hbox_new (FALSE, 8);
1858 gtk_widget_show (hbox1);
1859 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1860 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1862 exteditor_label = gtk_label_new (_("Command"));
1863 gtk_widget_show (exteditor_label);
1864 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1866 exteditor_combo = gtk_combo_new ();
1867 gtk_widget_show (exteditor_combo);
1868 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1869 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1871 "mgedit --no-fork %s",
1877 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1879 other.uri_combo = uri_combo;
1880 other.uri_entry = uri_entry;
1881 other.printcmd_entry = printcmd_entry;
1883 other.exteditor_combo = exteditor_combo;
1884 other.exteditor_entry = exteditor_entry;
1887 void prefs_quote_colors_dialog(void)
1889 if (!quote_color_win)
1890 prefs_quote_colors_dialog_create();
1891 gtk_widget_show(quote_color_win);
1894 gtk_widget_hide(quote_color_win);
1896 textview_update_message_colors();
1897 main_window_reflect_prefs_all();
1900 static void prefs_quote_colors_dialog_create(void)
1905 GtkWidget *quotelevel1_label;
1906 GtkWidget *quotelevel2_label;
1907 GtkWidget *quotelevel3_label;
1908 GtkWidget *uri_label;
1911 //GtkWidget *cancel_btn;
1912 GtkWidget *recycle_colors_btn;
1913 GtkWidget *frame_colors;
1915 window = gtk_window_new(GTK_WINDOW_DIALOG);
1916 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1917 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1918 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1919 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1920 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1922 vbox = gtk_vbox_new (FALSE, VSPACING);
1923 gtk_container_add (GTK_CONTAINER (window), vbox);
1924 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1925 PACK_FRAME(vbox, frame_colors, _("Colors"));
1927 table = gtk_table_new (4, 2, FALSE);
1928 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1929 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1930 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1931 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1933 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1935 color_buttons.quote_level1_btn = gtk_button_new();
1936 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1937 (GtkAttachOptions) (0),
1938 (GtkAttachOptions) (0), 0, 0);
1939 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1940 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1942 color_buttons.quote_level2_btn = gtk_button_new();
1943 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1944 (GtkAttachOptions) (0),
1945 (GtkAttachOptions) (0), 0, 0);
1946 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1947 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1949 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1950 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1951 (GtkAttachOptions) (0),
1952 (GtkAttachOptions) (0), 0, 0);
1953 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1954 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1956 color_buttons.uri_btn = gtk_button_new_with_label ("");
1957 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1958 (GtkAttachOptions) (0),
1959 (GtkAttachOptions) (0), 0, 0);
1960 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1961 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1963 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1964 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1965 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1966 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1967 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1969 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1970 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1971 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1972 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1973 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1975 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1976 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1977 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1978 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1979 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1981 uri_label = gtk_label_new (_("URI link"));
1982 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1983 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1984 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1985 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1987 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1988 _("Recycle quote colors"));
1990 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1991 NULL, NULL, NULL, NULL);
1992 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1994 gtk_widget_grab_default(ok_btn);
1995 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1996 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1997 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1998 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2000 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2001 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2002 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2003 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2004 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2005 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2006 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2007 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2008 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2009 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2011 /* show message button colors and recycle options */
2012 set_button_bg_color(color_buttons.quote_level1_btn,
2013 prefs_common.quote_level1_col);
2014 set_button_bg_color(color_buttons.quote_level2_btn,
2015 prefs_common.quote_level2_col);
2016 set_button_bg_color(color_buttons.quote_level3_btn,
2017 prefs_common.quote_level3_col);
2018 set_button_bg_color(color_buttons.uri_btn,
2019 prefs_common.uri_col);
2020 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2021 prefs_common.recycle_quote_colors);
2023 gtk_widget_show_all(vbox);
2024 quote_color_win = window;
2027 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2029 gchar *type = (gchar *)data;
2030 gchar *title = NULL;
2031 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2033 GtkColorSelectionDialog *dialog;
2035 if(g_strcasecmp(type, "LEVEL1") == 0) {
2036 title = _("Pick color for quotation level 1");
2037 rgbvalue = prefs_common.quote_level1_col;
2038 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2039 title = _("Pick color for quotation level 2");
2040 rgbvalue = prefs_common.quote_level2_col;
2041 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2042 title = _("Pick color for quotation level 3");
2043 rgbvalue = prefs_common.quote_level3_col;
2044 } else if(g_strcasecmp(type, "URI") == 0) {
2045 title = _("Pick color for URI");
2046 rgbvalue = prefs_common.uri_col;
2047 } else { /* Should never be called */
2048 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2052 color_dialog = gtk_color_selection_dialog_new(title);
2053 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2054 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2055 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2057 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2058 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2059 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2060 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2062 /* preselect the previous color in the color selection dialog */
2063 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2064 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2065 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2066 dialog = (GtkColorSelectionDialog *)color_dialog;
2067 gtk_color_selection_set_color
2068 ((GtkColorSelection *)dialog->colorsel, color);
2070 gtk_widget_show(color_dialog);
2073 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2075 GtkColorSelection *colorsel = (GtkColorSelection *)
2076 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2078 gint red, green, blue, rgbvalue;
2079 gchar *type = (gchar *)data;
2081 gtk_color_selection_get_color(colorsel, color);
2083 red = (gint) (color[0] * 255.0);
2084 green = (gint) (color[1] * 255.0);
2085 blue = (gint) (color[2] * 255.0);
2086 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2089 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2090 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2091 fprintf(stderr, "Color is %x\n", rgbvalue);
2094 if (g_strcasecmp(type, "LEVEL1") == 0) {
2095 prefs_common.quote_level1_col = rgbvalue;
2096 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2097 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2098 prefs_common.quote_level2_col = rgbvalue;
2099 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2100 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2101 prefs_common.quote_level3_col = rgbvalue;
2102 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2103 } else if (g_strcasecmp(type, "URI") == 0) {
2104 prefs_common.uri_col = rgbvalue;
2105 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2107 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2109 gtk_widget_hide(color_dialog);
2112 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2114 gtk_widget_hide(color_dialog);
2117 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2122 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2123 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2124 newstyle->bg[GTK_STATE_NORMAL] = color;
2125 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2126 newstyle->bg[GTK_STATE_ACTIVE] = color;
2128 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2131 static void prefs_enable_message_color_toggled(void)
2135 is_active = gtk_toggle_button_get_active
2136 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2137 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2138 prefs_common.enable_color = is_active;
2141 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2145 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2146 prefs_common.recycle_quote_colors = is_active;
2149 static void prefs_quote_description(void)
2151 if (!quote_desc_win)
2152 prefs_quote_description_create();
2154 gtk_widget_show(quote_desc_win);
2156 gtk_widget_hide(quote_desc_win);
2159 static void prefs_quote_description_create(void)
2167 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2168 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2169 _("Description of symbols"));
2170 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2171 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2172 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2173 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2175 vbox = gtk_vbox_new(FALSE, 8);
2176 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2178 hbox = gtk_hbox_new(FALSE, 4);
2179 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2181 label = gtk_label_new
2192 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2193 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2195 label = gtk_label_new
2198 "Full Name of Sender\n"
2199 "First Name of Sender\n"
2200 "Initial of Sender\n"
2206 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2207 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2209 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2210 NULL, NULL, NULL, NULL);
2211 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2213 gtk_widget_grab_default(ok_btn);
2214 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2215 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2217 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2218 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2220 gtk_widget_show_all(vbox);
2223 /* functions for setting items of SummaryView */
2225 static struct _SummaryDisplayItem
2229 GtkWidget *chkbtn[N_SUMMARY_COLS];
2232 GtkWidget *cancel_btn;
2235 #define SET_ACTIVE(column, var) \
2236 gtk_toggle_button_set_active \
2237 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2239 #define GET_ACTIVE(column, var) \
2240 prefs_common.var = gtk_toggle_button_get_active \
2241 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2243 void prefs_summary_display_item_set(void)
2245 static gboolean cancelled;
2247 if (!summarydispitem.window)
2248 prefs_summary_display_item_dialog_create(&cancelled);
2249 gtk_widget_grab_focus(summarydispitem.ok_btn);
2250 gtk_widget_show(summarydispitem.window);
2251 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2253 SET_ACTIVE(S_COL_MARK, show_mark);
2254 SET_ACTIVE(S_COL_UNREAD, show_unread);
2255 SET_ACTIVE(S_COL_MIME, show_mime);
2256 SET_ACTIVE(S_COL_NUMBER, show_number);
2257 SET_ACTIVE(S_COL_SCORE, show_score);
2258 SET_ACTIVE(S_COL_SIZE, show_size);
2259 SET_ACTIVE(S_COL_DATE, show_date);
2260 SET_ACTIVE(S_COL_FROM, show_from);
2261 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2264 gtk_widget_hide(summarydispitem.window);
2266 if (cancelled != TRUE) {
2267 GET_ACTIVE(S_COL_MARK, show_mark);
2268 GET_ACTIVE(S_COL_UNREAD, show_unread);
2269 GET_ACTIVE(S_COL_MIME, show_mime);
2270 GET_ACTIVE(S_COL_NUMBER, show_number);
2271 GET_ACTIVE(S_COL_SCORE, show_score);
2272 GET_ACTIVE(S_COL_SIZE, show_size);
2273 GET_ACTIVE(S_COL_DATE, show_date);
2274 GET_ACTIVE(S_COL_FROM, show_from);
2275 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2277 main_window_reflect_prefs_all();
2281 #define SET_CHECK_BUTTON(column, label) \
2283 summarydispitem.chkbtn[column] = \
2284 gtk_check_button_new_with_label(label); \
2285 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2286 summarydispitem.chkbtn[column], \
2290 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2294 GtkWidget *chkbtn_vbox;
2297 GtkWidget *cancel_btn;
2299 window = gtk_window_new(GTK_WINDOW_DIALOG);
2300 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2301 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2302 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2303 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2304 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2305 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2306 GTK_SIGNAL_FUNC(display_item_delete_event),
2308 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2309 GTK_SIGNAL_FUNC(display_item_key_pressed),
2312 vbox = gtk_vbox_new(FALSE, 8);
2313 gtk_container_add(GTK_CONTAINER(window), vbox);
2315 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2316 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2318 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2319 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2320 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2321 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2322 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2323 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2324 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2325 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2326 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2328 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2329 &cancel_btn, _("Cancel"), NULL, NULL);
2330 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2331 gtk_widget_grab_default(ok_btn);
2333 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2334 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2335 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2336 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2338 gtk_widget_show_all(vbox);
2340 summarydispitem.window = window;
2341 summarydispitem.ok_btn = ok_btn;
2342 summarydispitem.cancel_btn = cancel_btn;
2345 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2351 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2357 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2358 gboolean *cancelled)
2366 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2367 gboolean *cancelled)
2369 if (event && event->keyval == GDK_Escape) {
2375 static void prefs_font_select(GtkButton *button)
2377 if (!font_sel_win) {
2378 font_sel_win = gtk_font_selection_dialog_new
2379 (_("Font selection"));
2380 gtk_window_position(GTK_WINDOW(font_sel_win),
2381 GTK_WIN_POS_CENTER);
2382 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2383 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2386 (GTK_OBJECT(font_sel_win), "key_press_event",
2387 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2390 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2392 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2394 gtk_signal_connect_object
2395 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2397 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2398 GTK_OBJECT(font_sel_win));
2401 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2402 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2403 gtk_widget_grab_focus
2404 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2405 gtk_widget_show(font_sel_win);
2408 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2412 if (event && event->keyval == GDK_Escape)
2413 gtk_widget_hide(font_sel_win);
2416 static void prefs_font_selection_ok(GtkButton *button)
2420 fontname = gtk_font_selection_dialog_get_font_name
2421 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2424 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2428 gtk_widget_hide(font_sel_win);
2431 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2434 GtkWidget *menuitem;
2437 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2438 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2439 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2440 g_free(*((gchar **)pparam->data));
2441 *((gchar **)pparam->data) = g_strdup(charset);
2444 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2447 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2449 GtkWidget *menuitem;
2453 g_return_if_fail(optmenu != NULL);
2454 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2456 menu = gtk_option_menu_get_menu(optmenu);
2457 for (cur = GTK_MENU_SHELL(menu)->children;
2458 cur != NULL; cur = cur->next) {
2459 menuitem = GTK_WIDGET(cur->data);
2460 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2461 if (!strcmp(charset, *((gchar **)pparam->data))) {
2462 gtk_option_menu_set_history(optmenu, n);
2468 gtk_option_menu_set_history(optmenu, 0);
2469 prefs_common_charset_set_data_from_optmenu(pparam);
2472 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2475 if (event && event->keyval == GDK_Escape)
2476 prefs_common_cancel();
2479 static void prefs_common_ok(void)
2481 prefs_common_apply();
2482 gtk_widget_hide(dialog.window);
2483 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2484 gtk_widget_hide(quote_desc_win);
2486 inc_autocheck_timer_set();
2489 static void prefs_common_apply(void)
2491 prefs_set_data_from_dialog(param);
2492 main_window_reflect_prefs_all();
2493 prefs_common_save_config();
2496 static void prefs_common_cancel(void)
2498 gtk_widget_hide(dialog.window);
2499 inc_autocheck_timer_set();