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;
110 GtkWidget *chkbtn_useaddrbook;
113 static struct Message {
114 GtkWidget *chkbtn_enablecol;
115 GtkWidget *button_edit_col;
116 GtkWidget *chkbtn_mbalnum;
117 GtkWidget *chkbtn_disphdrpane;
118 GtkWidget *chkbtn_disphdr;
119 GtkWidget *spinbtn_linespc;
120 GtkObject *spinbtn_linespc_adj;
121 GtkWidget *chkbtn_headspc;
123 GtkWidget *chkbtn_smoothscroll;
124 GtkWidget *spinbtn_scrollstep;
125 GtkObject *spinbtn_scrollstep_adj;
126 GtkWidget *chkbtn_halfpage;
130 static struct Privacy {
131 GtkWidget *checkbtn_gpgme_warning;
132 GtkWidget *checkbtn_default_encrypt;
133 GtkWidget *checkbtn_default_sign;
134 GtkWidget *checkbtn_auto_check_signatures;
135 GtkWidget *checkbtn_passphrase_grab;
136 GtkWidget *checkbtn_signature_popup;
137 GtkWidget *optmenu_default_signkey;
141 static struct Interface {
142 GtkWidget *checkbtn_emacs;
143 GtkWidget *checkbtn_openunread;
144 GtkWidget *checkbtn_openinbox;
145 GtkWidget *checkbtn_immedexec;
146 GtkWidget *checkbtn_confonexit;
147 GtkWidget *checkbtn_cleanonexit;
148 GtkWidget *checkbtn_askonclean;
149 GtkWidget *checkbtn_warnqueued;
150 GtkWidget *checkbtn_returnreceipt;
151 GtkWidget *checkbtn_addaddrbyclick;
154 static struct Other {
155 GtkWidget *uri_combo;
156 GtkWidget *uri_entry;
157 GtkWidget *printcmd_entry;
158 GtkWidget *exteditor_combo;
159 GtkWidget *exteditor_entry;
162 static struct MessageColorButtons {
163 GtkWidget *quote_level1_btn;
164 GtkWidget *quote_level2_btn;
165 GtkWidget *quote_level3_btn;
169 static GtkWidget *quote_desc_win;
170 static GtkWidget *font_sel_win;
171 static GtkWidget *quote_color_win;
172 static GtkWidget *color_dialog;
173 static GtkWidget *entry_datefmt;
174 static GtkWidget *datefmt_sample;
176 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
177 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
179 static void prefs_common_default_signkey_set_data_from_optmenu
181 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
185 parameter name, default value, pointer to the prefs variable, data type,
186 pointer to the widget pointer,
187 pointer to the function for data setting,
188 pointer to the function for widget setting
191 static PrefParam param[] = {
193 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
194 &receive.checkbtn_incext,
195 prefs_set_data_from_toggle, prefs_set_toggle},
196 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
197 &receive.entry_incext,
198 prefs_set_data_from_entry, prefs_set_entry},
200 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
201 &receive.checkbtn_local,
202 prefs_set_data_from_toggle, prefs_set_toggle},
203 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
204 &receive.checkbtn_filter_on_inc,
205 prefs_set_data_from_toggle, prefs_set_toggle},
206 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
207 &receive.entry_spool,
208 prefs_set_data_from_entry, prefs_set_entry},
210 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
211 &receive.checkbtn_autochk,
212 prefs_set_data_from_toggle, prefs_set_toggle},
213 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
214 &receive.spinbtn_autochk,
215 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
216 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
217 &receive.checkbtn_chkonstartup,
218 prefs_set_data_from_toggle, prefs_set_toggle},
220 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
221 &receive.spinbtn_maxarticle,
222 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
225 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
226 &send.checkbtn_sendext,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
229 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
230 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
231 &send.checkbtn_savemsg,
232 prefs_set_data_from_toggle, prefs_set_toggle},
233 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
234 &send.checkbtn_queuemsg,
235 prefs_set_data_from_toggle, prefs_set_toggle},
237 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
238 &send.optmenu_charset,
239 prefs_common_charset_set_data_from_optmenu,
240 prefs_common_charset_set_optmenu},
243 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
244 &compose.checkbtn_quote,
245 prefs_set_data_from_toggle, prefs_set_toggle},
246 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
247 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
248 {"quote_format", "On %d\\n%f wrote:\\n\\n",
249 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
250 prefs_set_data_from_text, prefs_set_text},
252 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
253 &compose.checkbtn_autosig,
254 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
256 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
258 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
259 &compose.spinbtn_linewrap,
260 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
261 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
262 &compose.checkbtn_wrapquote,
263 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"linewrap_before_sending", "FALSE",
265 &prefs_common.linewrap_at_send, P_BOOL,
266 &compose.checkbtn_wrapatsend,
267 prefs_set_data_from_toggle, prefs_set_toggle},
269 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
273 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
275 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
276 &prefs_common.textfont, P_STRING,
277 &display.entry_textfont,
278 prefs_set_data_from_entry, prefs_set_entry},
280 {"display_folder_unread_num", "TRUE",
281 &prefs_common.display_folder_unread, P_BOOL,
282 &display.chkbtn_folder_unread,
283 prefs_set_data_from_toggle, prefs_set_toggle},
285 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
286 &display.chkbtn_transhdr,
287 prefs_set_data_from_toggle, prefs_set_toggle},
289 /* Display: Summary View */
290 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
291 &display.chkbtn_swapfrom,
292 prefs_set_data_from_toggle, prefs_set_toggle},
293 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
294 &display.chkbtn_hscrollbar,
295 prefs_set_data_from_toggle, prefs_set_toggle},
296 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
297 &display.chkbtn_useaddrbook,
298 prefs_set_data_from_toggle, prefs_set_toggle},
299 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
300 P_STRING, &entry_datefmt,
301 prefs_set_data_from_entry, prefs_set_entry},
303 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
305 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
307 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
310 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
312 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
314 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
316 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
318 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
320 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
322 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
324 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
326 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
330 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
332 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
334 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
336 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
338 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
340 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
342 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
344 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
346 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
348 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
350 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
352 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
354 {"summary_col_score", "40", &prefs_common.summary_col_score,
355 P_INT, NULL, NULL, NULL},
356 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
358 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
360 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
362 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
363 P_INT, NULL, NULL, NULL},
364 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
366 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
368 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
370 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
372 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
374 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
376 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
378 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
380 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
382 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
384 {"compose_width", "600", &prefs_common.compose_width, P_INT,
386 {"compose_height", "560", &prefs_common.compose_height, P_INT,
390 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
391 &message.chkbtn_enablecol,
392 prefs_set_data_from_toggle, prefs_set_toggle},
394 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
396 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
398 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
400 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
402 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
404 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
405 P_BOOL, NULL, NULL, NULL},
407 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
408 &message.chkbtn_mbalnum,
409 prefs_set_data_from_toggle, prefs_set_toggle},
410 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
411 P_BOOL, &message.chkbtn_disphdrpane,
412 prefs_set_data_from_toggle, prefs_set_toggle},
413 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
414 &message.chkbtn_disphdr,
415 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"line_space", "2", &prefs_common.line_space, P_INT,
417 &message.spinbtn_linespc,
418 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
419 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
420 &message.chkbtn_headspc,
421 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"enable_smooth_scroll", "FALSE",
424 &prefs_common.enable_smooth_scroll, P_BOOL,
425 &message.chkbtn_smoothscroll,
426 prefs_set_data_from_toggle, prefs_set_toggle},
427 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
428 &message.spinbtn_scrollstep,
429 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
430 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
431 &message.chkbtn_halfpage,
432 prefs_set_data_from_toggle, prefs_set_toggle},
434 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
438 {"mime_image_viewer", "display '%s'",
439 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
440 {"mime_audio_player", "play '%s'",
441 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
445 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
446 &privacy.checkbtn_gpgme_warning,
447 prefs_set_data_from_toggle, prefs_set_toggle},
448 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
449 &privacy.checkbtn_default_encrypt,
450 prefs_set_data_from_toggle, prefs_set_toggle},
451 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
452 &privacy.checkbtn_default_sign,
453 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"auto_check_signatures", "TRUE",
455 &prefs_common.auto_check_signatures, P_BOOL,
456 &privacy.checkbtn_auto_check_signatures,
457 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"signature_popup", "FALSE",
459 &prefs_common.signature_popup, P_BOOL,
460 &privacy.checkbtn_signature_popup,
461 prefs_set_data_from_toggle, prefs_set_toggle},
463 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
464 &privacy.checkbtn_passphrase_grab,
465 prefs_set_data_from_toggle, prefs_set_toggle},
466 #endif /* __MINGW32__ */
467 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
468 &privacy.optmenu_default_signkey,
469 prefs_common_default_signkey_set_data_from_optmenu,
470 prefs_common_default_signkey_set_optmenu},
471 #endif /* USE_GPGME */
474 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
476 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
479 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
480 &interface.checkbtn_emacs,
481 prefs_set_data_from_toggle, prefs_set_toggle},
482 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
483 P_BOOL, &interface.checkbtn_openunread,
484 prefs_set_data_from_toggle, prefs_set_toggle},
485 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
486 P_BOOL, &interface.checkbtn_openinbox,
487 prefs_set_data_from_toggle, prefs_set_toggle},
488 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
489 &interface.checkbtn_immedexec,
490 prefs_set_data_from_toggle, prefs_set_toggle},
491 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
492 P_BOOL, &interface.checkbtn_addaddrbyclick,
493 prefs_set_data_from_toggle, prefs_set_toggle},
495 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
496 &interface.checkbtn_confonexit,
497 prefs_set_data_from_toggle, prefs_set_toggle},
498 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
499 &interface.checkbtn_returnreceipt,
500 prefs_set_data_from_toggle, prefs_set_toggle},
501 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
502 &interface.checkbtn_cleanonexit,
503 prefs_set_data_from_toggle, prefs_set_toggle},
504 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
505 &interface.checkbtn_askonclean,
506 prefs_set_data_from_toggle, prefs_set_toggle},
507 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
508 P_BOOL, &interface.checkbtn_warnqueued,
509 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
513 &prefs_common.uri_cmd, P_STRING,
514 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
515 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
516 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
517 {"ext_editor_command", "gedit %s",
518 &prefs_common.ext_editor_cmd, P_STRING,
519 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
521 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
525 #define VSPACING_NARROW 4
526 #define VBOX_BORDER 16
527 #define DEFAULT_ENTRY_WIDTH 80
528 #define PREFSBUFSIZE 1024
530 /* widget creating functions */
531 static void prefs_common_create (void);
532 static void prefs_receive_create (void);
533 static void prefs_send_create (void);
534 static void prefs_compose_create (void);
535 static void prefs_display_create (void);
536 static void prefs_message_create (void);
538 static void prefs_privacy_create (void);
540 static void prefs_interface_create (void);
541 static void prefs_other_create (void);
543 static void prefs_quote_description (void);
544 static void prefs_quote_description_create (void);
545 static void prefs_quote_colors_dialog (void);
546 static void prefs_quote_colors_dialog_create (void);
547 static void quote_color_set_dialog (GtkWidget *widget,
549 static void quote_colors_set_dialog_ok (GtkWidget *widget,
551 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
553 static void set_button_bg_color (GtkWidget *widget,
555 static void prefs_enable_message_color_toggled (void);
556 static void prefs_recycle_colors_toggled (GtkWidget *widget);
558 /* functions for setting items of SummaryView */
559 static void prefs_summary_display_item_dialog_create
560 (gboolean *cancelled);
561 static void display_item_ok (GtkWidget *widget,
562 gboolean *cancelled);
563 static void display_item_cancel (GtkWidget *widget,
564 gboolean *cancelled);
565 static gint display_item_delete_event (GtkWidget *widget,
567 gboolean *cancelled);
568 static void display_item_key_pressed (GtkWidget *widget,
570 gboolean *cancelled);
572 static void prefs_font_select (GtkButton *button);
573 static void prefs_font_selection_key_pressed (GtkWidget *widget,
576 static void prefs_font_selection_ok (GtkButton *button);
578 static gint prefs_common_deleted (GtkWidget *widget,
581 static void prefs_common_key_pressed (GtkWidget *widget,
584 static void prefs_common_ok (void);
585 static void prefs_common_apply (void);
586 static void prefs_common_cancel (void);
588 void prefs_common_read_config(void)
590 prefs_read_config(param, "Common", COMMON_RC);
593 void prefs_common_save_config(void)
595 prefs_save_config(param, "Common", COMMON_RC);
598 void prefs_common_open(void)
600 inc_autocheck_timer_remove();
602 if (!dialog.window) {
603 prefs_common_create();
606 manage_window_set_transient(GTK_WINDOW(dialog.window));
607 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
608 gtk_widget_grab_focus(dialog.ok_btn);
610 prefs_set_dialog(param);
612 gtk_widget_show(dialog.window);
615 static void prefs_common_create(void)
619 debug_print(_("Creating common preferences window...\n"));
621 prefs_dialog_create(&dialog);
622 gtk_window_set_title (GTK_WINDOW(dialog.window),
623 _("Common Preferences"));
624 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
625 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
626 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
627 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
628 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
629 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
630 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
631 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
632 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
633 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
634 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
635 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
636 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
637 GTK_SIGNAL_FUNC(prefs_common_cancel),
638 GTK_OBJECT(dialog.window));
640 /* create all widgets on notebook */
641 prefs_receive_create();
642 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
644 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
645 prefs_compose_create();
646 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
647 prefs_display_create();
648 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
649 prefs_message_create();
650 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
652 prefs_privacy_create();
653 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
655 prefs_interface_create();
656 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
657 prefs_other_create();
658 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
660 gtk_widget_show_all(dialog.window);
663 static void prefs_receive_create(void)
667 GtkWidget *frame_incext;
668 GtkWidget *checkbtn_incext;
670 GtkWidget *label_incext;
671 GtkWidget *entry_incext;
672 GtkWidget *button_incext;
674 GtkWidget *frame_spool;
675 GtkWidget *checkbtn_local;
676 GtkWidget *checkbtn_filter_on_inc;
677 GtkWidget *label_spool;
678 GtkWidget *entry_spool;
680 GtkWidget *hbox_autochk;
681 GtkWidget *checkbtn_autochk;
682 GtkWidget *label_autochk1;
683 GtkObject *spinbtn_autochk_adj;
684 GtkWidget *spinbtn_autochk;
685 GtkWidget *label_autochk2;
686 GtkWidget *checkbtn_chkonstartup;
688 GtkWidget *frame_news;
689 GtkWidget *label_maxarticle;
690 GtkWidget *spinbtn_maxarticle;
691 GtkObject *spinbtn_maxarticle_adj;
693 vbox1 = gtk_vbox_new (FALSE, VSPACING);
694 gtk_widget_show (vbox1);
695 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
696 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
698 PACK_FRAME(vbox1, frame_incext, _("External program"));
700 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
701 gtk_widget_show (vbox2);
702 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
703 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
705 /* Use of external incorporation program */
706 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
707 _("Use external program for incorporation"));
709 hbox = gtk_hbox_new (FALSE, 8);
710 gtk_widget_show (hbox);
711 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
712 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
714 label_incext = gtk_label_new (_("Program path"));
715 gtk_widget_show (label_incext);
716 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
718 entry_incext = gtk_entry_new ();
719 gtk_widget_show (entry_incext);
720 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
722 button_incext = gtk_button_new_with_label ("... ");
723 gtk_widget_show (button_incext);
724 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
726 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
728 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
729 gtk_widget_show (vbox2);
730 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
731 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
733 hbox = gtk_hbox_new (FALSE, 32);
734 gtk_widget_show (hbox);
735 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
737 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
738 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
739 _("Filter on incorporation"));
740 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
742 hbox = gtk_hbox_new (FALSE, 8);
743 gtk_widget_show (hbox);
744 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
745 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
747 label_spool = gtk_label_new (_("Spool directory"));
748 gtk_widget_show (label_spool);
749 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
751 entry_spool = gtk_entry_new ();
752 gtk_widget_show (entry_spool);
753 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
755 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
756 gtk_widget_show (vbox2);
757 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
760 hbox_autochk = gtk_hbox_new (FALSE, 8);
761 gtk_widget_show (hbox_autochk);
762 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
764 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
765 _("Auto-check new mail"));
767 label_autochk1 = gtk_label_new (_("each"));
768 gtk_widget_show (label_autochk1);
769 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
771 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
772 spinbtn_autochk = gtk_spin_button_new
773 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
774 gtk_widget_show (spinbtn_autochk);
775 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
776 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
777 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
779 label_autochk2 = gtk_label_new (_("minute(s)"));
780 gtk_widget_show (label_autochk2);
781 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
783 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
784 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
785 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
787 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
788 _("Check new mail on startup"));
790 PACK_FRAME(vbox1, frame_news, _("News"));
792 hbox = gtk_hbox_new (FALSE, 8);
793 gtk_widget_show (hbox);
794 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
795 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
797 label_maxarticle = gtk_label_new
798 (_("Maximum article number to download\n"
799 "(unlimited if 0 is specified)"));
800 gtk_widget_show (label_maxarticle);
801 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
802 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
804 spinbtn_maxarticle_adj =
805 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
806 spinbtn_maxarticle = gtk_spin_button_new
807 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
808 gtk_widget_show (spinbtn_maxarticle);
809 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
811 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
812 gtk_spin_button_set_numeric
813 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
815 receive.checkbtn_incext = checkbtn_incext;
816 receive.entry_incext = entry_incext;
817 receive.button_incext = button_incext;
819 receive.checkbtn_local = checkbtn_local;
820 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
821 receive.entry_spool = entry_spool;
823 receive.checkbtn_autochk = checkbtn_autochk;
824 receive.spinbtn_autochk = spinbtn_autochk;
825 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
827 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
829 receive.spinbtn_maxarticle = spinbtn_maxarticle;
830 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
833 static void prefs_send_create(void)
837 GtkWidget *frame_sendext;
838 GtkWidget *vbox_sendext;
839 GtkWidget *checkbtn_sendext;
841 GtkWidget *label_sendext;
842 GtkWidget *entry_sendext;
843 GtkWidget *button_sendext;
844 GtkWidget *checkbtn_savemsg;
845 GtkWidget *checkbtn_queuemsg;
846 GtkWidget *label_outcharset;
848 GtkWidget *optmenu_menu;
851 vbox1 = gtk_vbox_new (FALSE, VSPACING);
852 gtk_widget_show (vbox1);
853 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
854 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
856 PACK_FRAME(vbox1, frame_sendext, _("External program"));
858 gtk_widget_set_sensitive(frame_sendext, FALSE);
860 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
861 gtk_widget_show (vbox_sendext);
862 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
863 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
865 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
866 _("Use external program for sending"));
868 hbox1 = gtk_hbox_new (FALSE, 8);
869 gtk_widget_show (hbox1);
870 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
871 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
873 label_sendext = gtk_label_new (_("Program path"));
874 gtk_widget_show (label_sendext);
875 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
877 entry_sendext = gtk_entry_new ();
878 gtk_widget_show (entry_sendext);
879 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
881 button_sendext = gtk_button_new_with_label ("... ");
882 gtk_widget_show (button_sendext);
883 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
885 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
886 gtk_widget_show (vbox2);
887 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
889 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
890 _("Save sent message to outbox"));
891 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
892 _("Queue message that failed to send"));
894 hbox1 = gtk_hbox_new (FALSE, 8);
895 gtk_widget_show (hbox1);
896 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
898 label_outcharset = gtk_label_new (_("Outgoing codeset"));
899 gtk_widget_show (label_outcharset);
900 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
902 optmenu = gtk_option_menu_new ();
903 gtk_widget_show (optmenu);
904 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
906 optmenu_menu = gtk_menu_new ();
908 #define SET_MENUITEM(str, charset) \
910 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
913 SET_MENUITEM(_("Automatic"), CS_AUTO);
914 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
916 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
918 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
920 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
921 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
922 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
923 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
924 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
925 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
926 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
927 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
928 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
929 #endif /* HAVE_LIBJCONV */
930 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
932 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
933 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
936 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
937 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
939 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
940 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
942 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
943 #endif /* HAVE_LIBJCONV */
945 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
947 send.checkbtn_sendext = checkbtn_sendext;
948 send.entry_sendext = entry_sendext;
949 send.button_sendext = button_sendext;
951 send.checkbtn_savemsg = checkbtn_savemsg;
952 send.checkbtn_queuemsg = checkbtn_queuemsg;
954 send.optmenu_charset = optmenu;
957 static void prefs_compose_create(void)
960 GtkWidget *frame_quote;
961 GtkWidget *vbox_quote;
962 GtkWidget *checkbtn_quote;
964 GtkWidget *label_quotemark;
965 GtkWidget *entry_quotemark;
967 GtkWidget *label_quotefmt;
968 GtkWidget *btn_quotedesc;
969 GtkWidget *scrolledwin_quotefmt;
970 GtkWidget *text_quotefmt;
972 GtkWidget *frame_sig;
974 GtkWidget *checkbtn_autosig;
975 GtkWidget *label_sigsep;
976 GtkWidget *entry_sigsep;
978 GtkWidget *vbox_linewrap;
981 GtkWidget *label_linewrap;
982 GtkObject *spinbtn_linewrap_adj;
983 GtkWidget *spinbtn_linewrap;
984 GtkWidget *checkbtn_wrapquote;
985 GtkWidget *checkbtn_wrapatsend;
987 vbox1 = gtk_vbox_new (FALSE, VSPACING);
988 gtk_widget_show (vbox1);
989 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
990 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
992 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
994 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
995 gtk_widget_show (vbox_quote);
996 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
997 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
999 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1000 _("Quote message when replying"));
1002 hbox1 = gtk_hbox_new (FALSE, 8);
1003 gtk_widget_show (hbox1);
1004 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1006 label_quotemark = gtk_label_new (_("Quotation mark"));
1007 gtk_widget_show (label_quotemark);
1008 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1010 entry_quotemark = gtk_entry_new ();
1011 gtk_widget_show (entry_quotemark);
1012 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1013 gtk_widget_set_usize (entry_quotemark, 64, -1);
1015 hbox2 = gtk_hbox_new (FALSE, 0);
1016 gtk_widget_show (hbox2);
1017 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1019 label_quotefmt = gtk_label_new (_("Quotation format:"));
1020 gtk_widget_show (label_quotefmt);
1021 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1024 gtk_button_new_with_label (_(" Description of symbols "));
1025 gtk_widget_show (btn_quotedesc);
1026 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1027 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1028 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1030 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1031 gtk_widget_show (scrolledwin_quotefmt);
1032 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1033 gtk_scrolled_window_set_policy
1034 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1035 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1037 text_quotefmt = gtk_text_new (NULL, NULL);
1038 gtk_widget_show (text_quotefmt);
1039 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1040 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1041 gtk_widget_set_usize(text_quotefmt, -1, 60);
1043 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1045 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1046 gtk_widget_show (vbox_sig);
1047 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1048 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1050 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1051 _("Insert signature automatically"));
1053 hbox1 = gtk_hbox_new (FALSE, 8);
1054 gtk_widget_show (hbox1);
1055 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1057 label_sigsep = gtk_label_new (_("Signature separator"));
1058 gtk_widget_show (label_sigsep);
1059 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1061 entry_sigsep = gtk_entry_new ();
1062 gtk_widget_show (entry_sigsep);
1063 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1064 gtk_widget_set_usize (entry_sigsep, 64, -1);
1067 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1068 gtk_widget_show (vbox_linewrap);
1069 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1071 hbox3 = gtk_hbox_new (FALSE, 8);
1072 gtk_widget_show (hbox3);
1073 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1075 label_linewrap = gtk_label_new (_("Wrap messages at"));
1076 gtk_widget_show (label_linewrap);
1077 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1079 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1080 spinbtn_linewrap = gtk_spin_button_new
1081 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1082 gtk_widget_show (spinbtn_linewrap);
1083 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1084 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1085 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1087 label_linewrap = gtk_label_new (_("characters"));
1088 gtk_widget_show (label_linewrap);
1089 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1091 hbox4 = gtk_hbox_new (FALSE, 32);
1092 gtk_widget_show (hbox4);
1093 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1095 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1097 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1099 compose.checkbtn_quote = checkbtn_quote;
1100 compose.entry_quotemark = entry_quotemark;
1101 compose.text_quotefmt = text_quotefmt;
1102 compose.checkbtn_autosig = checkbtn_autosig;
1103 compose.entry_sigsep = entry_sigsep;
1105 compose.spinbtn_linewrap = spinbtn_linewrap;
1106 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1107 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1108 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1112 /* alfons - nice ui for darko */
1114 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1118 g_return_if_fail(widget != NULL);
1119 g_return_if_fail(*widget != NULL);
1120 g_return_if_fail(entry_datefmt != NULL);
1121 g_return_if_fail(datefmt_sample != NULL);
1123 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1124 g_free(prefs_common.date_format);
1125 prefs_common.date_format = text;
1126 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1128 gtk_widget_destroy(*widget);
1132 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1134 g_return_if_fail(widget != NULL);
1135 g_return_if_fail(*widget != NULL);
1140 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1143 struct tm *cal_time;
1146 cur_time = time(NULL);
1147 cal_time = localtime(&cur_time);
1149 text = gtk_editable_get_chars(editable, 0, -1);
1151 strftime(buffer, sizeof buffer, text, cal_time);
1153 gtk_label_set_text(example, buffer);
1156 static GtkWidget *create_date_format(GtkButton *button, void *data)
1158 static GtkWidget *date_format = NULL;
1160 GtkWidget *scrolledwindow1;
1161 GtkWidget *date_format_list;
1179 { "%a", _("the full abbreviated weekday name") },
1180 { "%A", _("the full weekday name") },
1181 { "%b", _("the abbreviated month name") },
1182 { "%B", _("the full month name") },
1183 { "%c", _("the preferred date and time for the current locale") },
1184 { "%C", _("the century number (year/100)") },
1185 { "%d", _("the day of the month as a decimal number") },
1186 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1187 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1188 { "%j", _("the day of the year as a decimal number") },
1189 { "%m", _("the month as a decimal number") },
1190 { "%M", _("the minute as a decimal number") },
1191 { "%p", _("either AM or PM") },
1192 { "%S", _("the second as a decimal number") },
1193 { "%w", _("the day of the week as a decimal number") },
1194 { "%x", _("the preferred date for the current locale") },
1195 { "%y", _("the last two digits of a year") },
1196 { "%Y", _("the year as a decimal number") },
1197 { "%Z", _("the time zone or name or abbreviation") }
1200 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1202 if (date_format) return date_format;
1204 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1205 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1206 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1207 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1209 vbox1 = gtk_vbox_new(FALSE, 10);
1210 gtk_widget_show(vbox1);
1211 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1213 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1214 gtk_widget_show(scrolledwindow1);
1215 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1217 date_format_list = gtk_clist_new(2);
1218 gtk_widget_show(date_format_list);
1219 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1220 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1221 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1222 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1224 label3 = gtk_label_new(_("Date Format"));
1225 gtk_widget_show(label3);
1226 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1228 label4 = gtk_label_new(_("Date Format Description"));
1229 gtk_widget_show(label4);
1230 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1232 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1234 /* phoney casting necessary because of gtk... */
1235 text[0] = (gchar *) time_format[tmp].fmt;
1236 text[1] = (gchar *) time_format[tmp].txt;
1238 gtk_clist_append(GTK_CLIST(date_format_list), text);
1241 table2 = gtk_table_new(1, 1, TRUE);
1242 gtk_widget_show(table2);
1243 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1245 vbox2 = gtk_vbox_new(FALSE, 0);
1246 gtk_widget_show(vbox2);
1247 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1248 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1249 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1251 vbox3 = gtk_vbox_new(TRUE, 4);
1252 gtk_widget_show(vbox3);
1253 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1255 hbox2 = gtk_hbox_new(FALSE, 0);
1256 gtk_widget_show(hbox2);
1257 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1259 label5 = gtk_label_new(_("Date format"));
1260 gtk_widget_show(label5);
1261 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1262 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1264 datefmt_sample = gtk_entry_new_with_max_length(300);
1265 gtk_widget_show(datefmt_sample);
1266 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1268 hbox1 = gtk_hbox_new(FALSE, 0);
1269 gtk_widget_show(hbox1);
1270 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1272 label6 = gtk_label_new(_("Example"));
1273 gtk_widget_show(label6);
1274 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1275 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1277 label7 = gtk_label_new(_("label7"));
1278 gtk_widget_show(label7);
1279 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1280 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1282 hbox3 = gtk_hbox_new(TRUE, 0);
1283 gtk_widget_show(hbox3);
1284 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1286 button1 = gtk_button_new_with_label(_("Close"));
1287 gtk_widget_show(button1);
1288 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1290 /* set the current format */
1291 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1292 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1295 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1296 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1298 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1299 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1301 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1302 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1304 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1305 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1307 gtk_widget_show(date_format);
1311 static void prefs_display_create(void)
1314 GtkWidget *frame_font;
1316 GtkWidget *label_textfont;
1317 GtkWidget *entry_textfont;
1318 GtkWidget *button_textfont;
1319 GtkWidget *chkbtn_folder_unread;
1320 GtkWidget *chkbtn_transhdr;
1321 GtkWidget *frame_summary;
1323 GtkWidget *chkbtn_swapfrom;
1324 GtkWidget *chkbtn_hscrollbar;
1325 GtkWidget *chkbtn_useaddrbook;
1327 GtkWidget *label_datefmt;
1328 GtkWidget *button_dispitem;
1330 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1331 gtk_widget_show (vbox1);
1332 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1333 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1335 PACK_FRAME(vbox1, frame_font, _("Font"));
1337 table1 = gtk_table_new (1, 3, FALSE);
1338 gtk_widget_show (table1);
1339 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1340 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1341 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1342 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1344 label_textfont = gtk_label_new (_("Text"));
1345 gtk_widget_show (label_textfont);
1346 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1347 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1349 entry_textfont = gtk_entry_new ();
1350 gtk_widget_show (entry_textfont);
1351 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1352 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1354 button_textfont = gtk_button_new_with_label ("... ");
1355 gtk_widget_show (button_textfont);
1356 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1358 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1359 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1361 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1362 gtk_widget_show (vbox2);
1363 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1366 (vbox2, chkbtn_transhdr,
1367 _("Translate header name (such as `From:', `Subject:')"));
1369 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1370 _("Display unread number next to folder name"));
1372 /* ---- Summary ---- */
1374 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1376 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1377 gtk_widget_show (vbox2);
1378 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1379 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1382 (vbox2, chkbtn_swapfrom,
1383 _("Display recipient on `From' column if sender is yourself"));
1385 (vbox2, chkbtn_useaddrbook,
1386 _("Display sender using address book"));
1388 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1390 hbox1 = gtk_hbox_new (FALSE, 8);
1391 gtk_widget_show (hbox1);
1392 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1394 label_datefmt = gtk_button_new_with_label (_("Date format"));
1395 gtk_widget_show (label_datefmt);
1396 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1397 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1398 GTK_SIGNAL_FUNC(create_date_format), NULL);
1400 entry_datefmt = gtk_entry_new ();
1401 gtk_widget_show (entry_datefmt);
1402 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1404 hbox1 = gtk_hbox_new (FALSE, 8);
1405 gtk_widget_show (hbox1);
1406 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1408 button_dispitem = gtk_button_new_with_label
1409 (_(" Set display item of summary... "));
1410 gtk_widget_show (button_dispitem);
1411 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1412 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1413 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1416 display.entry_textfont = entry_textfont;
1417 display.button_textfont = button_textfont;
1419 display.chkbtn_folder_unread = chkbtn_folder_unread;
1420 display.chkbtn_transhdr = chkbtn_transhdr;
1422 display.chkbtn_swapfrom = chkbtn_swapfrom;
1423 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1424 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1427 static void prefs_message_create(void)
1432 GtkWidget *chkbtn_enablecol;
1433 GtkWidget *button_edit_col;
1434 GtkWidget *chkbtn_mbalnum;
1435 GtkWidget *chkbtn_disphdrpane;
1436 GtkWidget *chkbtn_disphdr;
1437 GtkWidget *button_edit_disphdr;
1438 GtkWidget *hbox_linespc;
1439 GtkWidget *label_linespc;
1440 GtkObject *spinbtn_linespc_adj;
1441 GtkWidget *spinbtn_linespc;
1442 GtkWidget *chkbtn_headspc;
1444 GtkWidget *frame_scr;
1445 GtkWidget *vbox_scr;
1446 GtkWidget *chkbtn_smoothscroll;
1447 GtkWidget *hbox_scr;
1448 GtkWidget *label_scr;
1449 GtkObject *spinbtn_scrollstep_adj;
1450 GtkWidget *spinbtn_scrollstep;
1451 GtkWidget *chkbtn_halfpage;
1453 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1454 gtk_widget_show (vbox1);
1455 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1456 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1458 hbox1 = gtk_hbox_new (FALSE, 8);
1459 gtk_widget_show (hbox1);
1460 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1462 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1463 _("Enable coloration of message"));
1464 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1465 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1468 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1469 gtk_widget_show (button_edit_col);
1470 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1471 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1472 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1474 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1476 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1477 gtk_widget_show (vbox2);
1478 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1481 (vbox2, chkbtn_mbalnum,
1482 _("Display 2-byte alphabet and numeric with 1-byte character"));
1483 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1484 _("Display header pane above message view"));
1486 hbox1 = gtk_hbox_new (FALSE, 8);
1487 gtk_widget_show (hbox1);
1488 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1490 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1491 _("Display short headers on message view"));
1493 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1494 gtk_widget_show (button_edit_disphdr);
1495 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1497 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1498 GTK_SIGNAL_FUNC (prefs_display_header_open),
1501 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1503 hbox1 = gtk_hbox_new (FALSE, 32);
1504 gtk_widget_show (hbox1);
1505 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1507 hbox_linespc = gtk_hbox_new (FALSE, 8);
1508 gtk_widget_show (hbox1);
1509 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1511 label_linespc = gtk_label_new (_("Line space"));
1512 gtk_widget_show (label_linespc);
1513 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1516 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1517 spinbtn_linespc = gtk_spin_button_new
1518 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1519 gtk_widget_show (spinbtn_linespc);
1520 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1522 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1523 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1525 label_linespc = gtk_label_new (_("pixel(s)"));
1526 gtk_widget_show (label_linespc);
1527 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1530 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1532 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1534 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1535 gtk_widget_show (vbox_scr);
1536 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1537 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1539 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1541 hbox1 = gtk_hbox_new (FALSE, 32);
1542 gtk_widget_show (hbox1);
1543 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1545 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1547 hbox_scr = gtk_hbox_new (FALSE, 8);
1548 gtk_widget_show (hbox_scr);
1549 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1551 label_scr = gtk_label_new (_("Step"));
1552 gtk_widget_show (label_scr);
1553 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1555 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1556 spinbtn_scrollstep = gtk_spin_button_new
1557 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1558 gtk_widget_show (spinbtn_scrollstep);
1559 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1561 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1562 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1565 label_scr = gtk_label_new (_("pixel(s)"));
1566 gtk_widget_show (label_scr);
1567 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1569 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1571 message.chkbtn_enablecol = chkbtn_enablecol;
1572 message.button_edit_col = button_edit_col;
1573 message.chkbtn_mbalnum = chkbtn_mbalnum;
1574 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1575 message.chkbtn_disphdr = chkbtn_disphdr;
1576 message.spinbtn_linespc = spinbtn_linespc;
1577 message.chkbtn_headspc = chkbtn_headspc;
1579 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1580 message.spinbtn_scrollstep = spinbtn_scrollstep;
1581 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1582 message.chkbtn_halfpage = chkbtn_halfpage;
1586 static void prefs_privacy_create(void)
1591 GtkWidget *checkbtn_gpgme_warning;
1592 GtkWidget *checkbtn_default_encrypt;
1593 GtkWidget *checkbtn_default_sign;
1594 GtkWidget *checkbtn_auto_check_signatures;
1595 GtkWidget *checkbtn_signature_popup;
1596 GtkWidget *checkbtn_passphrase_grab;
1598 GtkWidget *menuitem;
1600 GtkWidget *optmenu_menu;
1602 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1603 gtk_widget_show (vbox1);
1604 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1605 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1607 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1608 gtk_widget_show (vbox2);
1609 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1612 (vbox2, checkbtn_gpgme_warning,
1613 _("Display warning on startup if GnuPG does not work"));
1615 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1616 _("Encrypt message by default"));
1618 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1619 _("Sign message by default"));
1621 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1622 _("Automatically check signatures"));
1624 PACK_CHECK_BUTTON (vbox2, checkbtn_signature_popup,
1625 _("Show signature check result in a popup window"));
1628 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1629 _("Grab input while entering a passphrase"));
1632 hbox1 = gtk_hbox_new (FALSE, 8);
1633 gtk_widget_show (hbox1);
1634 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1636 /* create default signkey box */
1637 label = gtk_label_new (_("Default Sign Key"));
1638 gtk_widget_show (label);
1639 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1640 optmenu = gtk_option_menu_new ();
1641 gtk_widget_show (optmenu);
1642 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1643 optmenu_menu = gtk_menu_new ();
1645 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1646 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1647 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1648 /* FIXME: disabled because not implemented */
1649 gtk_widget_set_sensitive(optmenu, FALSE);
1651 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1652 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1653 privacy.checkbtn_default_sign = checkbtn_default_sign;
1654 privacy.checkbtn_auto_check_signatures
1655 = checkbtn_auto_check_signatures;
1656 privacy.checkbtn_signature_popup = checkbtn_signature_popup;
1657 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1658 privacy.optmenu_default_signkey = optmenu;
1662 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1666 GtkWidget *menuitem;
1669 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1670 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1671 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1672 g_free(*((gchar **)pparam->data));
1673 *((gchar **)pparam->data) = g_strdup(charset);
1677 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1681 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1683 GtkWidget *menuitem;
1687 g_return_if_fail(optmenu != NULL);
1688 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1690 menu = gtk_option_menu_get_menu(optmenu);
1691 for (cur = GTK_MENU_SHELL(menu)->children;
1692 cur != NULL; cur = cur->next) {
1693 menuitem = GTK_WIDGET(cur->data);
1694 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1695 if (!strcmp(charset, *((gchar **)pparam->data))) {
1696 gtk_option_menu_set_history(optmenu, n);
1702 gtk_option_menu_set_history(optmenu, 0);
1703 prefs_common_charset_set_data_from_optmenu(pparam);
1706 #endif /* USE_GPGME */
1708 static void prefs_interface_create(void)
1713 GtkWidget *checkbtn_emacs;
1714 GtkWidget *checkbtn_openunread;
1715 GtkWidget *checkbtn_openinbox;
1716 GtkWidget *checkbtn_immedexec;
1717 GtkWidget *checkbtn_addaddrbyclick;
1720 GtkWidget *frame_exit;
1721 GtkWidget *vbox_exit;
1723 GtkWidget *checkbtn_confonexit;
1724 GtkWidget *checkbtn_cleanonexit;
1725 GtkWidget *checkbtn_askonclean;
1726 GtkWidget *checkbtn_warnqueued;
1727 GtkWidget *checkbtn_returnreceipt;
1729 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1730 gtk_widget_show (vbox1);
1731 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1732 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1734 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1735 gtk_widget_show (vbox2);
1736 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1738 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1739 _("Emulate the behavior of mouse operation of\n"
1740 "Emacs-based mailer"));
1741 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1745 (vbox2, checkbtn_openunread,
1746 _("Open first unread message when entering a folder"));
1749 (vbox2, checkbtn_openinbox,
1750 _("Go to inbox after receiving new mail"));
1752 vbox3 = gtk_vbox_new (FALSE, 0);
1753 gtk_widget_show (vbox3);
1754 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1757 (vbox3, checkbtn_immedexec,
1758 _("Execute immediately when moving or deleting messages"));
1760 hbox1 = gtk_hbox_new (FALSE, 0);
1761 gtk_widget_show (hbox1);
1762 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1764 label = gtk_label_new
1765 (_("(Messages will be just marked till execution\n"
1766 " if this is turned off)"));
1767 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1768 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1771 (vbox2, checkbtn_addaddrbyclick,
1772 _("Add address to destination when double-clicked"));
1774 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1776 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1777 gtk_widget_show (vbox_exit);
1778 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1779 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1781 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1782 _("Confirm on exit"));
1784 hbox1 = gtk_hbox_new (FALSE, 32);
1785 gtk_widget_show (hbox1);
1786 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1788 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1789 _("Empty trash on exit"));
1790 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1791 _("Ask before emptying"));
1792 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1794 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1795 _("Warn if there are queued messages"));
1797 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1798 _("Send return receipt on request"));
1800 interface.checkbtn_emacs = checkbtn_emacs;
1801 interface.checkbtn_openunread = checkbtn_openunread;
1802 interface.checkbtn_openinbox = checkbtn_openinbox;
1803 interface.checkbtn_immedexec = checkbtn_immedexec;
1804 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1805 interface.checkbtn_confonexit = checkbtn_confonexit;
1806 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1807 interface.checkbtn_askonclean = checkbtn_askonclean;
1808 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1809 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1812 static void prefs_other_create(void)
1817 GtkWidget *uri_frame;
1818 GtkWidget *uri_label;
1819 GtkWidget *uri_combo;
1820 GtkWidget *uri_entry;
1822 GtkWidget *print_frame;
1823 GtkWidget *printcmd_label;
1824 GtkWidget *printcmd_entry;
1826 GtkWidget *exteditor_frame;
1827 GtkWidget *exteditor_label;
1828 GtkWidget *exteditor_combo;
1829 GtkWidget *exteditor_entry;
1831 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1832 gtk_widget_show (vbox1);
1833 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1834 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1836 PACK_FRAME(vbox1, uri_frame,
1837 _("External Web browser (%s will be replaced with URI)"));
1839 hbox1 = gtk_hbox_new (FALSE, 8);
1840 gtk_widget_show (hbox1);
1841 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1842 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1844 uri_label = gtk_label_new (_("Command"));
1845 gtk_widget_show(uri_label);
1846 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1848 uri_combo = gtk_combo_new ();
1849 gtk_widget_show (uri_combo);
1850 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1851 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1852 "netscape -remote 'openURL(%s,raise)'",
1853 "gnome-moz-remote --raise --newwin '%s'",
1854 "kterm -e w3m '%s'",
1855 "kterm -e lynx '%s'",
1858 uri_entry = GTK_COMBO (uri_combo)->entry;
1860 PACK_FRAME(vbox1, print_frame,
1861 _("Printing (%s will be replaced with file name)"));
1863 hbox1 = gtk_hbox_new (FALSE, 8);
1864 gtk_widget_show (hbox1);
1865 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1866 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1868 printcmd_label = gtk_label_new (_("Command"));
1869 gtk_widget_show (printcmd_label);
1870 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1872 printcmd_entry = gtk_entry_new ();
1873 gtk_widget_show (printcmd_entry);
1874 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1876 PACK_FRAME(vbox1, exteditor_frame,
1877 _("External editor (%s will be replaced with file name)"));
1879 hbox1 = gtk_hbox_new (FALSE, 8);
1880 gtk_widget_show (hbox1);
1881 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1882 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1884 exteditor_label = gtk_label_new (_("Command"));
1885 gtk_widget_show (exteditor_label);
1886 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1888 exteditor_combo = gtk_combo_new ();
1889 gtk_widget_show (exteditor_combo);
1890 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1891 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1893 "mgedit --no-fork %s",
1899 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1901 other.uri_combo = uri_combo;
1902 other.uri_entry = uri_entry;
1903 other.printcmd_entry = printcmd_entry;
1905 other.exteditor_combo = exteditor_combo;
1906 other.exteditor_entry = exteditor_entry;
1909 void prefs_quote_colors_dialog(void)
1911 if (!quote_color_win)
1912 prefs_quote_colors_dialog_create();
1913 gtk_widget_show(quote_color_win);
1916 gtk_widget_hide(quote_color_win);
1918 textview_update_message_colors();
1919 main_window_reflect_prefs_all();
1922 static void prefs_quote_colors_dialog_create(void)
1927 GtkWidget *quotelevel1_label;
1928 GtkWidget *quotelevel2_label;
1929 GtkWidget *quotelevel3_label;
1930 GtkWidget *uri_label;
1933 //GtkWidget *cancel_btn;
1934 GtkWidget *recycle_colors_btn;
1935 GtkWidget *frame_colors;
1937 window = gtk_window_new(GTK_WINDOW_DIALOG);
1938 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1939 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1940 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1941 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1942 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1944 vbox = gtk_vbox_new (FALSE, VSPACING);
1945 gtk_container_add (GTK_CONTAINER (window), vbox);
1946 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1947 PACK_FRAME(vbox, frame_colors, _("Colors"));
1949 table = gtk_table_new (4, 2, FALSE);
1950 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1951 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1952 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1953 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1955 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1957 color_buttons.quote_level1_btn = gtk_button_new();
1958 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1959 (GtkAttachOptions) (0),
1960 (GtkAttachOptions) (0), 0, 0);
1961 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1962 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1964 color_buttons.quote_level2_btn = gtk_button_new();
1965 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1966 (GtkAttachOptions) (0),
1967 (GtkAttachOptions) (0), 0, 0);
1968 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1969 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1971 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1972 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1973 (GtkAttachOptions) (0),
1974 (GtkAttachOptions) (0), 0, 0);
1975 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1976 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1978 color_buttons.uri_btn = gtk_button_new_with_label ("");
1979 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1980 (GtkAttachOptions) (0),
1981 (GtkAttachOptions) (0), 0, 0);
1982 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1983 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1985 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1986 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1987 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1988 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1989 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1991 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1992 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1993 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1994 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1995 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1997 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1998 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1999 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2000 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2001 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2003 uri_label = gtk_label_new (_("URI link"));
2004 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2005 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2006 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2007 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2009 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2010 _("Recycle quote colors"));
2012 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2013 NULL, NULL, NULL, NULL);
2014 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2016 gtk_widget_grab_default(ok_btn);
2017 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2018 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2019 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2020 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2022 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2023 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2024 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2025 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2026 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2027 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2028 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2029 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2030 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2031 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2033 /* show message button colors and recycle options */
2034 set_button_bg_color(color_buttons.quote_level1_btn,
2035 prefs_common.quote_level1_col);
2036 set_button_bg_color(color_buttons.quote_level2_btn,
2037 prefs_common.quote_level2_col);
2038 set_button_bg_color(color_buttons.quote_level3_btn,
2039 prefs_common.quote_level3_col);
2040 set_button_bg_color(color_buttons.uri_btn,
2041 prefs_common.uri_col);
2042 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2043 prefs_common.recycle_quote_colors);
2045 gtk_widget_show_all(vbox);
2046 quote_color_win = window;
2049 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2051 gchar *type = (gchar *)data;
2052 gchar *title = NULL;
2053 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2055 GtkColorSelectionDialog *dialog;
2057 if(g_strcasecmp(type, "LEVEL1") == 0) {
2058 title = _("Pick color for quotation level 1");
2059 rgbvalue = prefs_common.quote_level1_col;
2060 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2061 title = _("Pick color for quotation level 2");
2062 rgbvalue = prefs_common.quote_level2_col;
2063 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2064 title = _("Pick color for quotation level 3");
2065 rgbvalue = prefs_common.quote_level3_col;
2066 } else if(g_strcasecmp(type, "URI") == 0) {
2067 title = _("Pick color for URI");
2068 rgbvalue = prefs_common.uri_col;
2069 } else { /* Should never be called */
2070 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2074 color_dialog = gtk_color_selection_dialog_new(title);
2075 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2076 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2077 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2079 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2080 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2081 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2082 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2084 /* preselect the previous color in the color selection dialog */
2085 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2086 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2087 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2088 dialog = (GtkColorSelectionDialog *)color_dialog;
2089 gtk_color_selection_set_color
2090 ((GtkColorSelection *)dialog->colorsel, color);
2092 gtk_widget_show(color_dialog);
2095 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2097 GtkColorSelection *colorsel = (GtkColorSelection *)
2098 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2100 gint red, green, blue, rgbvalue;
2101 gchar *type = (gchar *)data;
2103 gtk_color_selection_get_color(colorsel, color);
2105 red = (gint) (color[0] * 255.0);
2106 green = (gint) (color[1] * 255.0);
2107 blue = (gint) (color[2] * 255.0);
2108 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2111 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2112 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2113 fprintf(stderr, "Color is %x\n", rgbvalue);
2116 if (g_strcasecmp(type, "LEVEL1") == 0) {
2117 prefs_common.quote_level1_col = rgbvalue;
2118 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2119 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2120 prefs_common.quote_level2_col = rgbvalue;
2121 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2122 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2123 prefs_common.quote_level3_col = rgbvalue;
2124 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2125 } else if (g_strcasecmp(type, "URI") == 0) {
2126 prefs_common.uri_col = rgbvalue;
2127 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2129 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2131 gtk_widget_hide(color_dialog);
2134 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2136 gtk_widget_hide(color_dialog);
2139 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2144 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2145 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2146 newstyle->bg[GTK_STATE_NORMAL] = color;
2147 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2148 newstyle->bg[GTK_STATE_ACTIVE] = color;
2150 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2153 static void prefs_enable_message_color_toggled(void)
2157 is_active = gtk_toggle_button_get_active
2158 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2159 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2160 prefs_common.enable_color = is_active;
2163 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2167 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2168 prefs_common.recycle_quote_colors = is_active;
2171 static void prefs_quote_description(void)
2173 if (!quote_desc_win)
2174 prefs_quote_description_create();
2176 gtk_widget_show(quote_desc_win);
2178 gtk_widget_hide(quote_desc_win);
2181 static void prefs_quote_description_create(void)
2189 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2190 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2191 _("Description of symbols"));
2192 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2193 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2194 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2195 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2197 vbox = gtk_vbox_new(FALSE, 8);
2198 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2200 hbox = gtk_hbox_new(FALSE, 4);
2201 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2203 label = gtk_label_new
2214 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2215 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2217 label = gtk_label_new
2220 "Full Name of Sender\n"
2221 "First Name of Sender\n"
2222 "Initial of Sender\n"
2228 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2229 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2231 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2232 NULL, NULL, NULL, NULL);
2233 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2235 gtk_widget_grab_default(ok_btn);
2236 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2237 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2239 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2240 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2242 gtk_widget_show_all(vbox);
2245 /* functions for setting items of SummaryView */
2247 static struct _SummaryDisplayItem
2251 GtkWidget *chkbtn[N_SUMMARY_COLS];
2254 GtkWidget *cancel_btn;
2257 #define SET_ACTIVE(column, var) \
2258 gtk_toggle_button_set_active \
2259 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2261 #define GET_ACTIVE(column, var) \
2262 prefs_common.var = gtk_toggle_button_get_active \
2263 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2265 void prefs_summary_display_item_set(void)
2267 static gboolean cancelled;
2269 if (!summarydispitem.window)
2270 prefs_summary_display_item_dialog_create(&cancelled);
2271 gtk_widget_grab_focus(summarydispitem.ok_btn);
2272 gtk_widget_show(summarydispitem.window);
2273 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2275 SET_ACTIVE(S_COL_MARK, show_mark);
2276 SET_ACTIVE(S_COL_UNREAD, show_unread);
2277 SET_ACTIVE(S_COL_MIME, show_mime);
2278 SET_ACTIVE(S_COL_NUMBER, show_number);
2279 SET_ACTIVE(S_COL_SCORE, show_score);
2280 SET_ACTIVE(S_COL_SIZE, show_size);
2281 SET_ACTIVE(S_COL_DATE, show_date);
2282 SET_ACTIVE(S_COL_FROM, show_from);
2283 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2286 gtk_widget_hide(summarydispitem.window);
2288 if (cancelled != TRUE) {
2289 GET_ACTIVE(S_COL_MARK, show_mark);
2290 GET_ACTIVE(S_COL_UNREAD, show_unread);
2291 GET_ACTIVE(S_COL_MIME, show_mime);
2292 GET_ACTIVE(S_COL_NUMBER, show_number);
2293 GET_ACTIVE(S_COL_SCORE, show_score);
2294 GET_ACTIVE(S_COL_SIZE, show_size);
2295 GET_ACTIVE(S_COL_DATE, show_date);
2296 GET_ACTIVE(S_COL_FROM, show_from);
2297 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2299 main_window_reflect_prefs_all();
2303 #define SET_CHECK_BUTTON(column, label) \
2305 summarydispitem.chkbtn[column] = \
2306 gtk_check_button_new_with_label(label); \
2307 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2308 summarydispitem.chkbtn[column], \
2312 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2316 GtkWidget *chkbtn_vbox;
2319 GtkWidget *cancel_btn;
2321 window = gtk_window_new(GTK_WINDOW_DIALOG);
2322 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2323 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2324 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2325 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2326 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2327 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2328 GTK_SIGNAL_FUNC(display_item_delete_event),
2330 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2331 GTK_SIGNAL_FUNC(display_item_key_pressed),
2334 vbox = gtk_vbox_new(FALSE, 8);
2335 gtk_container_add(GTK_CONTAINER(window), vbox);
2337 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2338 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2340 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2341 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2342 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2343 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2344 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2345 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2346 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2347 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2348 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2350 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2351 &cancel_btn, _("Cancel"), NULL, NULL);
2352 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2353 gtk_widget_grab_default(ok_btn);
2355 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2356 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2357 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2358 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2360 gtk_widget_show_all(vbox);
2362 summarydispitem.window = window;
2363 summarydispitem.ok_btn = ok_btn;
2364 summarydispitem.cancel_btn = cancel_btn;
2367 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2373 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2379 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2380 gboolean *cancelled)
2388 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2389 gboolean *cancelled)
2391 if (event && event->keyval == GDK_Escape) {
2397 static void prefs_font_select(GtkButton *button)
2399 if (!font_sel_win) {
2400 font_sel_win = gtk_font_selection_dialog_new
2401 (_("Font selection"));
2402 gtk_window_position(GTK_WINDOW(font_sel_win),
2403 GTK_WIN_POS_CENTER);
2404 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2405 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2408 (GTK_OBJECT(font_sel_win), "key_press_event",
2409 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2412 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2414 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2416 gtk_signal_connect_object
2417 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2419 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2420 GTK_OBJECT(font_sel_win));
2423 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2424 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2425 gtk_widget_grab_focus
2426 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2427 gtk_widget_show(font_sel_win);
2430 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2434 if (event && event->keyval == GDK_Escape)
2435 gtk_widget_hide(font_sel_win);
2438 static void prefs_font_selection_ok(GtkButton *button)
2442 fontname = gtk_font_selection_dialog_get_font_name
2443 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2446 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2450 gtk_widget_hide(font_sel_win);
2453 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2456 GtkWidget *menuitem;
2459 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2460 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2461 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2462 g_free(*((gchar **)pparam->data));
2463 *((gchar **)pparam->data) = g_strdup(charset);
2466 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2469 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2471 GtkWidget *menuitem;
2475 g_return_if_fail(optmenu != NULL);
2476 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2478 menu = gtk_option_menu_get_menu(optmenu);
2479 for (cur = GTK_MENU_SHELL(menu)->children;
2480 cur != NULL; cur = cur->next) {
2481 menuitem = GTK_WIDGET(cur->data);
2482 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2483 if (!strcmp(charset, *((gchar **)pparam->data))) {
2484 gtk_option_menu_set_history(optmenu, n);
2490 gtk_option_menu_set_history(optmenu, 0);
2491 prefs_common_charset_set_data_from_optmenu(pparam);
2494 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2497 prefs_common_cancel();
2501 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2504 if (event && event->keyval == GDK_Escape)
2505 prefs_common_cancel();
2508 static void prefs_common_ok(void)
2510 prefs_common_apply();
2511 gtk_widget_hide(dialog.window);
2512 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2513 gtk_widget_hide(quote_desc_win);
2515 inc_autocheck_timer_set();
2518 static void prefs_common_apply(void)
2520 prefs_set_data_from_dialog(param);
2521 main_window_reflect_prefs_all();
2522 prefs_common_save_config();
2525 static void prefs_common_cancel(void)
2527 gtk_widget_hide(dialog.window);
2528 inc_autocheck_timer_set();