2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "mainwindow.h"
41 #include "summaryview.h"
42 #include "messageview.h"
43 #include "manage_window.h"
48 #include "alertpanel.h"
50 #include "prefs_display_headers.h"
52 PrefsCommon prefs_common;
54 static PrefsDialog dialog;
56 static struct Receive {
57 GtkWidget *checkbtn_incext;
58 GtkWidget *entry_incext;
59 GtkWidget *button_incext;
61 GtkWidget *checkbtn_local;
62 GtkWidget *checkbtn_filter_on_inc;
63 GtkWidget *entry_spool;
65 GtkWidget *checkbtn_autochk;
66 GtkWidget *spinbtn_autochk;
67 GtkObject *spinbtn_autochk_adj;
69 GtkWidget *checkbtn_chkonstartup;
71 GtkWidget *spinbtn_maxarticle;
72 GtkObject *spinbtn_maxarticle_adj;
76 GtkWidget *checkbtn_sendext;
77 GtkWidget *entry_sendext;
78 GtkWidget *button_sendext;
80 GtkWidget *checkbtn_savemsg;
81 GtkWidget *checkbtn_queuemsg;
83 GtkWidget *optmenu_charset;
86 static struct Compose {
87 GtkWidget *checkbtn_quote;
88 GtkWidget *entry_quotemark;
89 GtkWidget *text_quotefmt;
90 GtkWidget *checkbtn_autosig;
91 GtkWidget *entry_sigsep;
93 GtkWidget *spinbtn_linewrap;
94 GtkObject *spinbtn_linewrap_adj;
95 GtkWidget *checkbtn_wrapquote;
96 GtkWidget *checkbtn_wrapatsend;
99 static struct Display {
100 GtkWidget *entry_textfont;
101 GtkWidget *button_textfont;
103 GtkWidget *chkbtn_folder_unread;
105 GtkWidget *chkbtn_transhdr;
107 GtkWidget *chkbtn_swapfrom;
108 GtkWidget *chkbtn_hscrollbar;
109 GtkWidget *entry_datefmt;
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_addaddrbyclick;
151 static struct Other {
152 GtkWidget *uri_combo;
153 GtkWidget *uri_entry;
154 GtkWidget *printcmd_entry;
155 GtkWidget *exteditor_combo;
156 GtkWidget *exteditor_entry;
159 static struct MessageColorButtons {
160 GtkWidget *quote_level1_btn;
161 GtkWidget *quote_level2_btn;
162 GtkWidget *quote_level3_btn;
166 static GtkWidget *quote_desc_win;
167 static GtkWidget *font_sel_win;
168 static GtkWidget *quote_color_win;
169 static GtkWidget *color_dialog;
171 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
172 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
174 static void prefs_common_default_signkey_set_data_from_optmenu
176 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
180 parameter name, default value, pointer to the prefs variable, data type,
181 pointer to the widget pointer,
182 pointer to the function for data setting,
183 pointer to the function for widget setting
186 static PrefParam param[] = {
188 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
189 &receive.checkbtn_incext,
190 prefs_set_data_from_toggle, prefs_set_toggle},
191 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
192 &receive.entry_incext,
193 prefs_set_data_from_entry, prefs_set_entry},
195 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
196 &receive.checkbtn_local,
197 prefs_set_data_from_toggle, prefs_set_toggle},
198 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
199 &receive.checkbtn_filter_on_inc,
200 prefs_set_data_from_toggle, prefs_set_toggle},
201 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
202 &receive.entry_spool,
203 prefs_set_data_from_entry, prefs_set_entry},
205 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
206 &receive.checkbtn_autochk,
207 prefs_set_data_from_toggle, prefs_set_toggle},
208 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
209 &receive.spinbtn_autochk,
210 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
211 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
212 &receive.checkbtn_chkonstartup,
213 prefs_set_data_from_toggle, prefs_set_toggle},
215 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
216 &receive.spinbtn_maxarticle,
217 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
220 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
221 &send.checkbtn_sendext,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
224 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
225 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
226 &send.checkbtn_savemsg,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
229 &send.checkbtn_queuemsg,
230 prefs_set_data_from_toggle, prefs_set_toggle},
232 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
233 &send.optmenu_charset,
234 prefs_common_charset_set_data_from_optmenu,
235 prefs_common_charset_set_optmenu},
238 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
239 &compose.checkbtn_quote,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
242 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
243 {"quote_format", "On %d\\n%f wrote:\\n\\n",
244 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
245 prefs_set_data_from_text, prefs_set_text},
247 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
248 &compose.checkbtn_autosig,
249 prefs_set_data_from_toggle, prefs_set_toggle},
250 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
251 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
253 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
254 &compose.spinbtn_linewrap,
255 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
256 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
257 &compose.checkbtn_wrapquote,
258 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"linewrap_before_sending", "FALSE",
260 &prefs_common.linewrap_at_send, P_BOOL,
261 &compose.checkbtn_wrapatsend,
262 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
268 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
270 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
271 &prefs_common.textfont, P_STRING,
272 &display.entry_textfont,
273 prefs_set_data_from_entry, prefs_set_entry},
275 {"display_folder_unread_num", "TRUE",
276 &prefs_common.display_folder_unread, P_BOOL,
277 &display.chkbtn_folder_unread,
278 prefs_set_data_from_toggle, prefs_set_toggle},
280 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
281 &display.chkbtn_transhdr,
282 prefs_set_data_from_toggle, prefs_set_toggle},
284 /* Display: Summary View */
285 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
286 &display.chkbtn_swapfrom,
287 prefs_set_data_from_toggle, prefs_set_toggle},
288 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
289 &display.chkbtn_hscrollbar,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
292 P_STRING, &display.entry_datefmt,
293 prefs_set_data_from_entry, prefs_set_entry},
295 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
297 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
299 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
302 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
304 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
306 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
308 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
310 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
312 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
314 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
316 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
320 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
322 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
324 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
326 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
328 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
330 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
332 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
334 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
336 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
338 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
340 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
342 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
344 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
346 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
348 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
350 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
351 P_INT, NULL, NULL, NULL},
352 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
354 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
356 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
358 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
360 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
362 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
364 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
366 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
368 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
370 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
372 {"compose_width", "600", &prefs_common.compose_width, P_INT,
374 {"compose_height", "560", &prefs_common.compose_height, P_INT,
378 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
379 &message.chkbtn_enablecol,
380 prefs_set_data_from_toggle, prefs_set_toggle},
382 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
384 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
386 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
388 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
390 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
392 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
393 P_BOOL, NULL, NULL, NULL},
395 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
396 &message.chkbtn_mbalnum,
397 prefs_set_data_from_toggle, prefs_set_toggle},
398 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
399 P_BOOL, &message.chkbtn_disphdrpane,
400 prefs_set_data_from_toggle, prefs_set_toggle},
401 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
402 &message.chkbtn_disphdr,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"line_space", "2", &prefs_common.line_space, P_INT,
405 &message.spinbtn_linespc,
406 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
407 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
408 &message.chkbtn_headspc,
409 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"enable_smooth_scroll", "FALSE",
412 &prefs_common.enable_smooth_scroll, P_BOOL,
413 &message.chkbtn_smoothscroll,
414 prefs_set_data_from_toggle, prefs_set_toggle},
415 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
416 &message.spinbtn_scrollstep,
417 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
418 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
419 &message.chkbtn_halfpage,
420 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"mime_image_viewer", "display '%s'",
424 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
425 {"mime_audio_player", "play '%s'",
426 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
430 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
431 &privacy.checkbtn_gpgme_warning,
432 prefs_set_data_from_toggle, prefs_set_toggle},
433 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
434 &privacy.checkbtn_default_encrypt,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
437 &privacy.checkbtn_default_sign,
438 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"auto_check_signatures", "TRUE",
440 &prefs_common.auto_check_signatures, P_BOOL,
441 &privacy.checkbtn_auto_check_signatures,
442 prefs_set_data_from_toggle, prefs_set_toggle},
444 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
445 &privacy.checkbtn_passphrase_grab,
446 prefs_set_data_from_toggle, prefs_set_toggle},
447 #endif /* __MINGW32__ */
448 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
449 &privacy.optmenu_default_signkey,
450 prefs_common_default_signkey_set_data_from_optmenu,
451 prefs_common_default_signkey_set_optmenu},
452 #endif /* USE_GPGME */
455 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
457 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
460 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
461 &interface.checkbtn_emacs,
462 prefs_set_data_from_toggle, prefs_set_toggle},
463 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
464 P_BOOL, &interface.checkbtn_openunread,
465 prefs_set_data_from_toggle, prefs_set_toggle},
466 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
467 P_BOOL, &interface.checkbtn_openinbox,
468 prefs_set_data_from_toggle, prefs_set_toggle},
469 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
470 &interface.checkbtn_immedexec,
471 prefs_set_data_from_toggle, prefs_set_toggle},
472 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
473 P_BOOL, &interface.checkbtn_addaddrbyclick,
474 prefs_set_data_from_toggle, prefs_set_toggle},
476 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
477 &interface.checkbtn_confonexit,
478 prefs_set_data_from_toggle, prefs_set_toggle},
479 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
480 &interface.checkbtn_cleanonexit,
481 prefs_set_data_from_toggle, prefs_set_toggle},
482 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
483 &interface.checkbtn_askonclean,
484 prefs_set_data_from_toggle, prefs_set_toggle},
485 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
486 P_BOOL, &interface.checkbtn_warnqueued,
487 prefs_set_data_from_toggle, prefs_set_toggle},
490 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
491 &prefs_common.uri_cmd, P_STRING,
492 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
493 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
494 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
495 {"ext_editor_command", "gedit %s",
496 &prefs_common.ext_editor_cmd, P_STRING,
497 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
499 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
503 #define VSPACING_NARROW 4
504 #define VBOX_BORDER 16
505 #define DEFAULT_ENTRY_WIDTH 80
506 #define PREFSBUFSIZE 1024
508 /* widget creating functions */
509 static void prefs_common_create (void);
510 static void prefs_receive_create (void);
511 static void prefs_send_create (void);
512 static void prefs_compose_create (void);
513 static void prefs_display_create (void);
514 static void prefs_message_create (void);
516 static void prefs_privacy_create (void);
518 static void prefs_interface_create (void);
519 static void prefs_other_create (void);
521 static void prefs_quote_description (void);
522 static void prefs_quote_description_create (void);
523 static void prefs_quote_colors_dialog (void);
524 static void prefs_quote_colors_dialog_create (void);
525 static void quote_color_set_dialog (GtkWidget *widget,
527 static void quote_colors_set_dialog_ok (GtkWidget *widget,
529 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
531 static void set_button_bg_color (GtkWidget *widget,
533 static void prefs_enable_message_color_toggled (void);
534 static void prefs_recycle_colors_toggled (GtkWidget *widget);
536 /* functions for setting items of SummaryView */
537 static void prefs_summary_display_item_dialog_create
538 (gboolean *cancelled);
539 static void display_item_ok (GtkWidget *widget,
540 gboolean *cancelled);
541 static void display_item_cancel (GtkWidget *widget,
542 gboolean *cancelled);
543 static gint display_item_delete_event (GtkWidget *widget,
545 gboolean *cancelled);
546 static void display_item_key_pressed (GtkWidget *widget,
548 gboolean *cancelled);
550 static void prefs_font_select (GtkButton *button);
551 static void prefs_font_selection_key_pressed (GtkWidget *widget,
554 static void prefs_font_selection_ok (GtkButton *button);
556 static void prefs_common_key_pressed (GtkWidget *widget,
559 static void prefs_common_ok (GtkButton *button);
560 static void prefs_common_apply (GtkButton *button);
562 void prefs_common_read_config(void)
564 prefs_read_config(param, "Common", COMMON_RC);
567 void prefs_common_save_config(void)
569 prefs_save_config(param, "Common", COMMON_RC);
572 void prefs_common_open(void)
574 if (!dialog.window) {
575 prefs_common_create();
578 manage_window_set_transient(GTK_WINDOW(dialog.window));
579 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
580 gtk_widget_grab_focus(dialog.ok_btn);
582 prefs_set_dialog(param);
584 gtk_widget_show(dialog.window);
587 static void prefs_common_create(void)
591 debug_print(_("Creating common preferences window...\n"));
593 prefs_dialog_create(&dialog);
594 gtk_window_set_title (GTK_WINDOW(dialog.window),
595 _("Common Preferences"));
596 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
597 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
598 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
599 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
600 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
601 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
602 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
603 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
604 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
605 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
606 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
607 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
608 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
609 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
610 GTK_OBJECT(dialog.window));
612 /* create all widgets on notebook */
613 prefs_receive_create();
614 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
616 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
617 prefs_compose_create();
618 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
619 prefs_display_create();
620 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
621 prefs_message_create();
622 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
624 prefs_privacy_create();
625 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
627 prefs_interface_create();
628 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
629 prefs_other_create();
630 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
632 gtk_widget_show_all(dialog.window);
635 static void prefs_receive_create(void)
639 GtkWidget *frame_incext;
640 GtkWidget *checkbtn_incext;
642 GtkWidget *label_incext;
643 GtkWidget *entry_incext;
644 GtkWidget *button_incext;
646 GtkWidget *frame_spool;
647 GtkWidget *checkbtn_local;
648 GtkWidget *checkbtn_filter_on_inc;
649 GtkWidget *label_spool;
650 GtkWidget *entry_spool;
652 GtkWidget *hbox_autochk;
653 GtkWidget *checkbtn_autochk;
654 GtkWidget *label_autochk1;
655 GtkObject *spinbtn_autochk_adj;
656 GtkWidget *spinbtn_autochk;
657 GtkWidget *label_autochk2;
658 GtkWidget *checkbtn_chkonstartup;
660 GtkWidget *frame_news;
661 GtkWidget *label_maxarticle;
662 GtkWidget *spinbtn_maxarticle;
663 GtkObject *spinbtn_maxarticle_adj;
665 vbox1 = gtk_vbox_new (FALSE, VSPACING);
666 gtk_widget_show (vbox1);
667 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
668 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
670 PACK_FRAME(vbox1, frame_incext, _("External program"));
672 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
673 gtk_widget_show (vbox2);
674 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
675 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
677 /* Use of external incorporation program */
678 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
679 _("Use external program for incorporation"));
681 hbox = gtk_hbox_new (FALSE, 8);
682 gtk_widget_show (hbox);
683 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
684 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
686 label_incext = gtk_label_new (_("Program path"));
687 gtk_widget_show (label_incext);
688 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
690 entry_incext = gtk_entry_new ();
691 gtk_widget_show (entry_incext);
692 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
694 button_incext = gtk_button_new_with_label ("... ");
695 gtk_widget_show (button_incext);
696 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
698 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
700 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
701 gtk_widget_show (vbox2);
702 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
703 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
705 hbox = gtk_hbox_new (FALSE, 32);
706 gtk_widget_show (hbox);
707 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
709 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
710 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
711 _("Filter on incorporation"));
712 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
714 hbox = gtk_hbox_new (FALSE, 8);
715 gtk_widget_show (hbox);
716 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
717 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
719 label_spool = gtk_label_new (_("Spool directory"));
720 gtk_widget_show (label_spool);
721 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
723 entry_spool = gtk_entry_new ();
724 gtk_widget_show (entry_spool);
725 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
727 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
728 gtk_widget_show (vbox2);
729 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
732 hbox_autochk = gtk_hbox_new (FALSE, 8);
733 gtk_widget_show (hbox_autochk);
734 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
736 gtk_widget_set_sensitive(hbox_autochk, FALSE);
738 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
739 _("Auto-check new mail"));
741 label_autochk1 = gtk_label_new (_("each"));
742 gtk_widget_show (label_autochk1);
743 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
745 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
746 spinbtn_autochk = gtk_spin_button_new
747 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
748 gtk_widget_show (spinbtn_autochk);
749 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
750 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
751 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
753 label_autochk2 = gtk_label_new (_("minute(s)"));
754 gtk_widget_show (label_autochk2);
755 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
757 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
758 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
759 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
761 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
762 _("Check new mail on startup"));
764 PACK_FRAME(vbox1, frame_news, _("News"));
766 hbox = gtk_hbox_new (FALSE, 8);
767 gtk_widget_show (hbox);
768 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
769 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
771 label_maxarticle = gtk_label_new
772 (_("Maximum article number to download\n"
773 "(unlimited if 0 is specified)"));
774 gtk_widget_show (label_maxarticle);
775 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
776 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
778 spinbtn_maxarticle_adj =
779 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
780 spinbtn_maxarticle = gtk_spin_button_new
781 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
782 gtk_widget_show (spinbtn_maxarticle);
783 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
785 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
786 gtk_spin_button_set_numeric
787 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
789 receive.checkbtn_incext = checkbtn_incext;
790 receive.entry_incext = entry_incext;
791 receive.button_incext = button_incext;
793 receive.checkbtn_local = checkbtn_local;
794 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
795 receive.entry_spool = entry_spool;
797 receive.checkbtn_autochk = checkbtn_autochk;
798 receive.spinbtn_autochk = spinbtn_autochk;
799 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
801 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
803 receive.spinbtn_maxarticle = spinbtn_maxarticle;
804 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
807 static void prefs_send_create(void)
811 GtkWidget *frame_sendext;
812 GtkWidget *vbox_sendext;
813 GtkWidget *checkbtn_sendext;
815 GtkWidget *label_sendext;
816 GtkWidget *entry_sendext;
817 GtkWidget *button_sendext;
818 GtkWidget *checkbtn_savemsg;
819 GtkWidget *checkbtn_queuemsg;
820 GtkWidget *label_outcharset;
822 GtkWidget *optmenu_menu;
825 vbox1 = gtk_vbox_new (FALSE, VSPACING);
826 gtk_widget_show (vbox1);
827 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
828 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
830 PACK_FRAME(vbox1, frame_sendext, _("External program"));
832 gtk_widget_set_sensitive(frame_sendext, FALSE);
834 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
835 gtk_widget_show (vbox_sendext);
836 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
837 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
839 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
840 _("Use external program for sending"));
842 hbox1 = gtk_hbox_new (FALSE, 8);
843 gtk_widget_show (hbox1);
844 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
845 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
847 label_sendext = gtk_label_new (_("Program path"));
848 gtk_widget_show (label_sendext);
849 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
851 entry_sendext = gtk_entry_new ();
852 gtk_widget_show (entry_sendext);
853 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
855 button_sendext = gtk_button_new_with_label ("... ");
856 gtk_widget_show (button_sendext);
857 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
859 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
860 gtk_widget_show (vbox2);
861 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
863 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
864 _("Save sent message to outbox"));
865 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
866 _("Queue message that failed to send"));
868 hbox1 = gtk_hbox_new (FALSE, 8);
869 gtk_widget_show (hbox1);
870 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
872 label_outcharset = gtk_label_new (_("Outgoing codeset"));
873 gtk_widget_show (label_outcharset);
874 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
876 optmenu = gtk_option_menu_new ();
877 gtk_widget_show (optmenu);
878 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
880 optmenu_menu = gtk_menu_new ();
882 #define SET_MENUITEM(str, charset) \
884 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
887 SET_MENUITEM(_("Automatic"), CS_AUTO);
888 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
890 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
892 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
894 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
895 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
896 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
897 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
898 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
899 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
900 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
901 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
902 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
903 #endif /* HAVE_LIBJCONV */
904 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
906 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
907 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
910 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
911 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
913 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
914 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
916 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
917 #endif /* HAVE_LIBJCONV */
919 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
921 send.checkbtn_sendext = checkbtn_sendext;
922 send.entry_sendext = entry_sendext;
923 send.button_sendext = button_sendext;
925 send.checkbtn_savemsg = checkbtn_savemsg;
926 send.checkbtn_queuemsg = checkbtn_queuemsg;
928 send.optmenu_charset = optmenu;
931 static void prefs_compose_create(void)
934 GtkWidget *frame_quote;
935 GtkWidget *vbox_quote;
936 GtkWidget *checkbtn_quote;
938 GtkWidget *label_quotemark;
939 GtkWidget *entry_quotemark;
941 GtkWidget *label_quotefmt;
942 GtkWidget *btn_quotedesc;
943 GtkWidget *scrolledwin_quotefmt;
944 GtkWidget *text_quotefmt;
946 GtkWidget *frame_sig;
948 GtkWidget *checkbtn_autosig;
949 GtkWidget *label_sigsep;
950 GtkWidget *entry_sigsep;
952 GtkWidget *vbox_linewrap;
955 GtkWidget *label_linewrap;
956 GtkObject *spinbtn_linewrap_adj;
957 GtkWidget *spinbtn_linewrap;
958 GtkWidget *checkbtn_wrapquote;
959 GtkWidget *checkbtn_wrapatsend;
961 vbox1 = gtk_vbox_new (FALSE, VSPACING);
962 gtk_widget_show (vbox1);
963 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
964 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
966 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
968 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
969 gtk_widget_show (vbox_quote);
970 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
971 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
973 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
974 _("Quote message when replying"));
976 hbox1 = gtk_hbox_new (FALSE, 8);
977 gtk_widget_show (hbox1);
978 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
980 label_quotemark = gtk_label_new (_("Quotation mark"));
981 gtk_widget_show (label_quotemark);
982 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
984 entry_quotemark = gtk_entry_new ();
985 gtk_widget_show (entry_quotemark);
986 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
987 gtk_widget_set_usize (entry_quotemark, 64, -1);
989 hbox2 = gtk_hbox_new (FALSE, 0);
990 gtk_widget_show (hbox2);
991 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
993 label_quotefmt = gtk_label_new (_("Quotation format:"));
994 gtk_widget_show (label_quotefmt);
995 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
998 gtk_button_new_with_label (_(" Description of symbols "));
999 gtk_widget_show (btn_quotedesc);
1000 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1001 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1002 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1004 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1005 gtk_widget_show (scrolledwin_quotefmt);
1006 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1007 gtk_scrolled_window_set_policy
1008 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1009 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1011 text_quotefmt = gtk_text_new (NULL, NULL);
1012 gtk_widget_show (text_quotefmt);
1013 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1014 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1015 gtk_widget_set_usize(text_quotefmt, -1, 60);
1017 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1019 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1020 gtk_widget_show (vbox_sig);
1021 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1022 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1024 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1025 _("Insert signature automatically"));
1027 hbox1 = gtk_hbox_new (FALSE, 8);
1028 gtk_widget_show (hbox1);
1029 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1031 label_sigsep = gtk_label_new (_("Signature separator"));
1032 gtk_widget_show (label_sigsep);
1033 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1035 entry_sigsep = gtk_entry_new ();
1036 gtk_widget_show (entry_sigsep);
1037 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1038 gtk_widget_set_usize (entry_sigsep, 64, -1);
1041 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1042 gtk_widget_show (vbox_linewrap);
1043 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1045 hbox3 = gtk_hbox_new (FALSE, 8);
1046 gtk_widget_show (hbox3);
1047 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1049 label_linewrap = gtk_label_new (_("Wrap messages at"));
1050 gtk_widget_show (label_linewrap);
1051 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1053 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1054 spinbtn_linewrap = gtk_spin_button_new
1055 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1056 gtk_widget_show (spinbtn_linewrap);
1057 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1058 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1059 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1061 label_linewrap = gtk_label_new (_("characters"));
1062 gtk_widget_show (label_linewrap);
1063 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1065 hbox4 = gtk_hbox_new (FALSE, 32);
1066 gtk_widget_show (hbox4);
1067 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1069 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1071 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1073 compose.checkbtn_quote = checkbtn_quote;
1074 compose.entry_quotemark = entry_quotemark;
1075 compose.text_quotefmt = text_quotefmt;
1076 compose.checkbtn_autosig = checkbtn_autosig;
1077 compose.entry_sigsep = entry_sigsep;
1079 compose.spinbtn_linewrap = spinbtn_linewrap;
1080 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1081 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1082 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1086 /* alfons - nice ui for darko */
1088 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1090 g_return_if_fail(widget != NULL);
1091 g_return_if_fail(*widget != NULL);
1092 gtk_widget_destroy(*widget);
1096 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1098 g_return_if_fail(widget != NULL);
1099 g_return_if_fail(*widget != NULL);
1104 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1107 struct tm *cal_time;
1110 cur_time = time(NULL);
1111 cal_time = localtime(&cur_time);
1113 text = gtk_editable_get_chars(editable, 0, -1);
1115 strftime(buffer, sizeof buffer, text, cal_time);
1117 gtk_label_set_text(example, buffer);
1120 static GtkWidget *create_date_format(GtkButton *button, void *data)
1122 static GtkWidget *date_format = NULL;
1124 GtkWidget *scrolledwindow1;
1125 GtkWidget *date_format_list;
1144 { "%a", _("the full abbreviated weekday name") },
1145 { "%A", _("the full weekday name") },
1146 { "%b", _("the abbreviated month name") },
1147 { "%B", _("the full month name") },
1148 { "%c", _("the preferred date and time for the current locale") },
1149 { "%C", _("the century number (year/100)") },
1150 { "%d", _("the day of the month as a decimal number") },
1151 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1152 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1153 { "%j", _("the day of the year as a decimal number") },
1154 { "%m", _("the month as a decimal number") },
1155 { "%M", _("the minute as a decimal number") },
1156 { "%p", _("either AM or PM") },
1157 { "%S", _("the second as a decimal number") },
1158 { "%w", _("the day of the week as a decimal number") },
1159 { "%x", _("the preferred date for the current locale") },
1160 { "%y", _("the last two digits of a year") },
1161 { "%Y", _("the year as a decimal number") },
1162 { "%Z", _("the time zone or name or abbreviation") }
1165 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1167 if (date_format) return date_format;
1169 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1170 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1171 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1172 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1174 vbox1 = gtk_vbox_new(FALSE, 10);
1175 gtk_widget_show(vbox1);
1176 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1178 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1179 gtk_widget_show(scrolledwindow1);
1180 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1182 date_format_list = gtk_clist_new(2);
1183 gtk_widget_show(date_format_list);
1184 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1185 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1186 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1187 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1189 label3 = gtk_label_new(_("Date Format"));
1190 gtk_widget_show(label3);
1191 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1193 label4 = gtk_label_new(_("Date Format Description"));
1194 gtk_widget_show(label4);
1195 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1197 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1199 /* phoney casting necessary because of gtk... */
1200 text[0] = (gchar *) time_format[tmp].fmt;
1201 text[1] = (gchar *) time_format[tmp].txt;
1203 gtk_clist_append(GTK_CLIST(date_format_list), text);
1206 table2 = gtk_table_new(1, 1, TRUE);
1207 gtk_widget_show(table2);
1208 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1210 vbox2 = gtk_vbox_new(FALSE, 0);
1211 gtk_widget_show(vbox2);
1212 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1213 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1214 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1216 vbox3 = gtk_vbox_new(TRUE, 4);
1217 gtk_widget_show(vbox3);
1218 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1220 hbox2 = gtk_hbox_new(FALSE, 0);
1221 gtk_widget_show(hbox2);
1222 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1224 label5 = gtk_label_new(_("Date format"));
1225 gtk_widget_show(label5);
1226 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1227 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1229 entry1 = gtk_entry_new_with_max_length(300);
1230 gtk_widget_show(entry1);
1231 gtk_box_pack_start(GTK_BOX(hbox2), entry1, TRUE, TRUE, 40);
1233 hbox1 = gtk_hbox_new(FALSE, 0);
1234 gtk_widget_show(hbox1);
1235 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1237 label6 = gtk_label_new(_("Example"));
1238 gtk_widget_show(label6);
1239 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1240 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1242 label7 = gtk_label_new(_("label7"));
1243 gtk_widget_show(label7);
1244 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1245 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1247 hbox3 = gtk_hbox_new(TRUE, 0);
1248 gtk_widget_show(hbox3);
1249 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1251 button1 = gtk_button_new_with_label(_("Close"));
1252 gtk_widget_show(button1);
1253 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1255 /* set the current format */
1256 gtk_entry_set_text(GTK_ENTRY(entry1), prefs_common.date_format);
1257 date_format_entry_on_change(GTK_EDITABLE(entry1), GTK_LABEL(label7));
1259 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1260 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1262 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1263 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1265 gtk_signal_connect(GTK_OBJECT(entry1), "changed",
1266 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1268 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1269 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1271 gtk_widget_show(date_format);
1275 static void prefs_display_create(void)
1278 GtkWidget *frame_font;
1280 GtkWidget *label_textfont;
1281 GtkWidget *entry_textfont;
1282 GtkWidget *button_textfont;
1283 GtkWidget *chkbtn_folder_unread;
1284 GtkWidget *chkbtn_transhdr;
1285 GtkWidget *frame_summary;
1287 GtkWidget *chkbtn_swapfrom;
1288 GtkWidget *chkbtn_hscrollbar;
1290 GtkWidget *label_datefmt;
1291 GtkWidget *entry_datefmt;
1292 GtkWidget *button_dispitem;
1293 GtkWidget *button_headers_display;
1295 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1296 gtk_widget_show (vbox1);
1297 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1298 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1300 PACK_FRAME(vbox1, frame_font, _("Font"));
1302 table1 = gtk_table_new (1, 3, FALSE);
1303 gtk_widget_show (table1);
1304 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1305 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1306 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1307 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1309 label_textfont = gtk_label_new (_("Text"));
1310 gtk_widget_show (label_textfont);
1311 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1312 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1314 entry_textfont = gtk_entry_new ();
1315 gtk_widget_show (entry_textfont);
1316 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1317 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1319 button_textfont = gtk_button_new_with_label ("... ");
1320 gtk_widget_show (button_textfont);
1321 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1323 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1324 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1326 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1327 gtk_widget_show (vbox2);
1328 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1331 (vbox2, chkbtn_transhdr,
1332 _("Translate header name (such as `From:', `Subject:')"));
1334 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1335 _("Display unread number next to folder name"));
1337 /* ---- Summary ---- */
1339 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1341 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1342 gtk_widget_show (vbox2);
1343 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1344 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1347 (vbox2, chkbtn_swapfrom,
1348 _("Display recipient on `From' column if sender is yourself"));
1350 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1352 hbox1 = gtk_hbox_new (FALSE, 8);
1353 gtk_widget_show (hbox1);
1354 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1356 label_datefmt = gtk_button_new_with_label (_("Date format"));
1357 gtk_widget_show (label_datefmt);
1358 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1359 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1360 GTK_SIGNAL_FUNC(create_date_format), NULL);
1362 entry_datefmt = gtk_entry_new ();
1363 gtk_widget_show (entry_datefmt);
1364 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1366 hbox1 = gtk_hbox_new (FALSE, 8);
1367 gtk_widget_show (hbox1);
1368 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1370 button_dispitem = gtk_button_new_with_label
1371 (_(" Set display item of summary... "));
1372 gtk_widget_show (button_dispitem);
1373 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1374 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1375 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1378 hbox1 = gtk_hbox_new (FALSE, 8);
1379 gtk_widget_show (hbox1);
1380 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1382 button_headers_display = gtk_button_new_with_label
1383 (_(" Set displaying of headers... "));
1384 gtk_widget_show (button_headers_display);
1385 gtk_box_pack_start (GTK_BOX (hbox1), button_headers_display, FALSE,
1387 gtk_signal_connect (GTK_OBJECT (button_headers_display), "clicked",
1388 GTK_SIGNAL_FUNC (prefs_display_headers_open),
1391 display.entry_textfont = entry_textfont;
1392 display.button_textfont = button_textfont;
1394 display.chkbtn_folder_unread = chkbtn_folder_unread;
1395 display.chkbtn_transhdr = chkbtn_transhdr;
1397 display.chkbtn_swapfrom = chkbtn_swapfrom;
1398 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1399 display.entry_datefmt = entry_datefmt;
1402 static void prefs_message_create(void)
1407 GtkWidget *chkbtn_enablecol;
1408 GtkWidget *button_edit_col;
1409 GtkWidget *chkbtn_mbalnum;
1410 GtkWidget *chkbtn_disphdrpane;
1411 GtkWidget *chkbtn_disphdr;
1412 GtkWidget *hbox_linespc;
1413 GtkWidget *label_linespc;
1414 GtkObject *spinbtn_linespc_adj;
1415 GtkWidget *spinbtn_linespc;
1416 GtkWidget *chkbtn_headspc;
1418 GtkWidget *frame_scr;
1419 GtkWidget *vbox_scr;
1420 GtkWidget *chkbtn_smoothscroll;
1421 GtkWidget *hbox_scr;
1422 GtkWidget *label_scr;
1423 GtkObject *spinbtn_scrollstep_adj;
1424 GtkWidget *spinbtn_scrollstep;
1425 GtkWidget *chkbtn_halfpage;
1427 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1428 gtk_widget_show (vbox1);
1429 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1430 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1432 hbox1 = gtk_hbox_new (FALSE, 8);
1433 gtk_widget_show (hbox1);
1434 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1436 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1437 _("Enable coloration of message"));
1438 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1439 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1442 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1443 gtk_widget_show (button_edit_col);
1444 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1445 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1446 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1448 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1450 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1451 gtk_widget_show (vbox2);
1452 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1455 (vbox2, chkbtn_mbalnum,
1456 _("Display 2-byte alphabet and numeric with 1-byte character"));
1457 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1458 _("Display header pane above message view"));
1459 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1460 _("Display short headers on message view"));
1462 hbox1 = gtk_hbox_new (FALSE, 32);
1463 gtk_widget_show (hbox1);
1464 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1466 hbox_linespc = gtk_hbox_new (FALSE, 8);
1467 gtk_widget_show (hbox1);
1468 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1470 label_linespc = gtk_label_new (_("Line space"));
1471 gtk_widget_show (label_linespc);
1472 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1475 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1476 spinbtn_linespc = gtk_spin_button_new
1477 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1478 gtk_widget_show (spinbtn_linespc);
1479 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1481 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1482 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1484 label_linespc = gtk_label_new (_("pixel(s)"));
1485 gtk_widget_show (label_linespc);
1486 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1489 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1491 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1493 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1494 gtk_widget_show (vbox_scr);
1495 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1496 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1498 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1500 hbox1 = gtk_hbox_new (FALSE, 32);
1501 gtk_widget_show (hbox1);
1502 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1504 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1506 hbox_scr = gtk_hbox_new (FALSE, 8);
1507 gtk_widget_show (hbox_scr);
1508 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1510 label_scr = gtk_label_new (_("Step"));
1511 gtk_widget_show (label_scr);
1512 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1514 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1515 spinbtn_scrollstep = gtk_spin_button_new
1516 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1517 gtk_widget_show (spinbtn_scrollstep);
1518 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1520 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1521 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1524 label_scr = gtk_label_new (_("pixel(s)"));
1525 gtk_widget_show (label_scr);
1526 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1528 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1530 message.chkbtn_enablecol = chkbtn_enablecol;
1531 message.button_edit_col = button_edit_col;
1532 message.chkbtn_mbalnum = chkbtn_mbalnum;
1533 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1534 message.chkbtn_disphdr = chkbtn_disphdr;
1535 message.spinbtn_linespc = spinbtn_linespc;
1536 message.chkbtn_headspc = chkbtn_headspc;
1538 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1539 message.spinbtn_scrollstep = spinbtn_scrollstep;
1540 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1541 message.chkbtn_halfpage = chkbtn_halfpage;
1545 static void prefs_privacy_create(void)
1550 GtkWidget *checkbtn_gpgme_warning;
1551 GtkWidget *checkbtn_default_encrypt;
1552 GtkWidget *checkbtn_default_sign;
1553 GtkWidget *checkbtn_auto_check_signatures;
1554 GtkWidget *checkbtn_passphrase_grab;
1556 GtkWidget *menuitem;
1558 GtkWidget *optmenu_menu;
1560 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1561 gtk_widget_show (vbox1);
1562 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1563 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1565 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1566 gtk_widget_show (vbox2);
1567 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1570 (vbox2, checkbtn_gpgme_warning,
1571 _("Display warning on startup if GnuPG does not work"));
1573 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1574 _("Encrypt message by default"));
1576 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1577 _("Sign message by default"));
1579 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1580 _("Automatically check signatures"));
1583 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1584 _("Grab input while entering a passphrase"));
1587 hbox1 = gtk_hbox_new (FALSE, 8);
1588 gtk_widget_show (hbox1);
1589 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1591 /* create default signkey box */
1592 label = gtk_label_new (_("Default Sign Key"));
1593 gtk_widget_show (label);
1594 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1595 optmenu = gtk_option_menu_new ();
1596 gtk_widget_show (optmenu);
1597 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1598 optmenu_menu = gtk_menu_new ();
1600 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1601 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1602 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1603 /* FIXME: disabled because not implemented */
1604 gtk_widget_set_sensitive(optmenu, FALSE);
1606 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1607 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1608 privacy.checkbtn_default_sign = checkbtn_default_sign;
1609 privacy.checkbtn_auto_check_signatures
1610 = checkbtn_auto_check_signatures;
1611 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1612 privacy.optmenu_default_signkey = optmenu;
1616 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1620 GtkWidget *menuitem;
1623 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1624 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1625 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1626 g_free(*((gchar **)pparam->data));
1627 *((gchar **)pparam->data) = g_strdup(charset);
1631 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1635 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1637 GtkWidget *menuitem;
1641 g_return_if_fail(optmenu != NULL);
1642 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1644 menu = gtk_option_menu_get_menu(optmenu);
1645 for (cur = GTK_MENU_SHELL(menu)->children;
1646 cur != NULL; cur = cur->next) {
1647 menuitem = GTK_WIDGET(cur->data);
1648 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1649 if (!strcmp(charset, *((gchar **)pparam->data))) {
1650 gtk_option_menu_set_history(optmenu, n);
1656 gtk_option_menu_set_history(optmenu, 0);
1657 prefs_common_charset_set_data_from_optmenu(pparam);
1660 #endif /* USE_GPGME */
1662 static void prefs_interface_create(void)
1667 GtkWidget *checkbtn_emacs;
1668 GtkWidget *checkbtn_openunread;
1669 GtkWidget *checkbtn_openinbox;
1670 GtkWidget *checkbtn_immedexec;
1671 GtkWidget *checkbtn_addaddrbyclick;
1674 GtkWidget *frame_exit;
1675 GtkWidget *vbox_exit;
1677 GtkWidget *checkbtn_confonexit;
1678 GtkWidget *checkbtn_cleanonexit;
1679 GtkWidget *checkbtn_askonclean;
1680 GtkWidget *checkbtn_warnqueued;
1682 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1683 gtk_widget_show (vbox1);
1684 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1685 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1687 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1688 gtk_widget_show (vbox2);
1689 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1691 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1692 _("Emulate the behavior of mouse operation of\n"
1693 "Emacs-based mailer"));
1694 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1698 (vbox2, checkbtn_openunread,
1699 _("Open first unread message when entering a folder"));
1702 (vbox2, checkbtn_openinbox,
1703 _("Go to inbox after receiving new mail"));
1705 vbox3 = gtk_vbox_new (FALSE, 0);
1706 gtk_widget_show (vbox3);
1707 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1710 (vbox3, checkbtn_immedexec,
1711 _("Execute immediately when moving or deleting messages"));
1713 hbox1 = gtk_hbox_new (FALSE, 0);
1714 gtk_widget_show (hbox1);
1715 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1717 label = gtk_label_new
1718 (_("(Messages will be just marked till execution\n"
1719 " if this is turned off)"));
1720 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1721 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1724 (vbox2, checkbtn_addaddrbyclick,
1725 _("Add address to destination when double-clicked"));
1727 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1729 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1730 gtk_widget_show (vbox_exit);
1731 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1732 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1734 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1735 _("Confirm on exit"));
1737 hbox1 = gtk_hbox_new (FALSE, 32);
1738 gtk_widget_show (hbox1);
1739 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1741 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1742 _("Empty trash on exit"));
1743 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1744 _("Ask before emptying"));
1745 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1747 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1748 _("Warn if there are queued messages"));
1750 interface.checkbtn_emacs = checkbtn_emacs;
1751 interface.checkbtn_openunread = checkbtn_openunread;
1752 interface.checkbtn_openinbox = checkbtn_openinbox;
1753 interface.checkbtn_immedexec = checkbtn_immedexec;
1754 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1755 interface.checkbtn_confonexit = checkbtn_confonexit;
1756 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1757 interface.checkbtn_askonclean = checkbtn_askonclean;
1758 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1761 static void prefs_other_create(void)
1766 GtkWidget *uri_frame;
1767 GtkWidget *uri_label;
1768 GtkWidget *uri_combo;
1769 GtkWidget *uri_entry;
1771 GtkWidget *print_frame;
1772 GtkWidget *printcmd_label;
1773 GtkWidget *printcmd_entry;
1775 GtkWidget *exteditor_frame;
1776 GtkWidget *exteditor_label;
1777 GtkWidget *exteditor_combo;
1778 GtkWidget *exteditor_entry;
1780 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1781 gtk_widget_show (vbox1);
1782 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1783 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1785 PACK_FRAME(vbox1, uri_frame,
1786 _("External Web browser (%s will be replaced with URI)"));
1788 hbox1 = gtk_hbox_new (FALSE, 8);
1789 gtk_widget_show (hbox1);
1790 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1791 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1793 uri_label = gtk_label_new (_("Command"));
1794 gtk_widget_show(uri_label);
1795 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1797 uri_combo = gtk_combo_new ();
1798 gtk_widget_show (uri_combo);
1799 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1800 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1801 "netscape -remote 'openURL(%s,raise)'",
1802 "gnome-moz-remote --raise --newwin '%s'",
1803 "kterm -e w3m '%s'",
1804 "kterm -e lynx '%s'",
1807 uri_entry = GTK_COMBO (uri_combo)->entry;
1809 PACK_FRAME(vbox1, print_frame,
1810 _("Printing (%s will be replaced with file name)"));
1812 hbox1 = gtk_hbox_new (FALSE, 8);
1813 gtk_widget_show (hbox1);
1814 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1815 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1817 printcmd_label = gtk_label_new (_("Command"));
1818 gtk_widget_show (printcmd_label);
1819 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1821 printcmd_entry = gtk_entry_new ();
1822 gtk_widget_show (printcmd_entry);
1823 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1825 PACK_FRAME(vbox1, exteditor_frame,
1826 _("External editor (%s will be replaced with file name)"));
1828 hbox1 = gtk_hbox_new (FALSE, 8);
1829 gtk_widget_show (hbox1);
1830 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1831 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1833 exteditor_label = gtk_label_new (_("Command"));
1834 gtk_widget_show (exteditor_label);
1835 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1837 exteditor_combo = gtk_combo_new ();
1838 gtk_widget_show (exteditor_combo);
1839 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1840 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1842 "mgedit --no-fork %s",
1848 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1850 other.uri_combo = uri_combo;
1851 other.uri_entry = uri_entry;
1852 other.printcmd_entry = printcmd_entry;
1854 other.exteditor_combo = exteditor_combo;
1855 other.exteditor_entry = exteditor_entry;
1858 void prefs_quote_colors_dialog(void)
1860 if (!quote_color_win)
1861 prefs_quote_colors_dialog_create();
1862 gtk_widget_show(quote_color_win);
1865 gtk_widget_hide(quote_color_win);
1867 textview_update_message_colors();
1868 main_window_reflect_prefs_all();
1871 static void prefs_quote_colors_dialog_create(void)
1876 GtkWidget *quotelevel1_label;
1877 GtkWidget *quotelevel2_label;
1878 GtkWidget *quotelevel3_label;
1879 GtkWidget *uri_label;
1882 //GtkWidget *cancel_btn;
1883 GtkWidget *recycle_colors_btn;
1884 GtkWidget *frame_colors;
1886 window = gtk_window_new(GTK_WINDOW_DIALOG);
1887 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1888 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1889 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1890 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1891 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1893 vbox = gtk_vbox_new (FALSE, VSPACING);
1894 gtk_container_add (GTK_CONTAINER (window), vbox);
1895 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1896 PACK_FRAME(vbox, frame_colors, _("Colors"));
1898 table = gtk_table_new (4, 2, FALSE);
1899 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1900 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1901 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1902 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1904 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1906 color_buttons.quote_level1_btn = gtk_button_new();
1907 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1908 (GtkAttachOptions) (0),
1909 (GtkAttachOptions) (0), 0, 0);
1910 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1911 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1913 color_buttons.quote_level2_btn = gtk_button_new();
1914 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1915 (GtkAttachOptions) (0),
1916 (GtkAttachOptions) (0), 0, 0);
1917 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1918 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1920 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1921 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1922 (GtkAttachOptions) (0),
1923 (GtkAttachOptions) (0), 0, 0);
1924 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1925 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1927 color_buttons.uri_btn = gtk_button_new_with_label ("");
1928 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1929 (GtkAttachOptions) (0),
1930 (GtkAttachOptions) (0), 0, 0);
1931 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1932 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1934 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1935 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1936 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1937 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1938 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1940 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1941 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1942 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1943 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1944 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1946 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1947 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1948 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1949 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1950 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1952 uri_label = gtk_label_new (_("URI link"));
1953 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1954 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1955 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1956 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1958 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1959 _("Recycle quote colors"));
1961 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1962 NULL, NULL, NULL, NULL);
1963 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1965 gtk_widget_grab_default(ok_btn);
1966 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1967 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1968 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1969 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1971 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1972 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1973 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1974 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1975 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1976 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1977 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1978 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1979 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1980 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1982 /* show message button colors and recycle options */
1983 set_button_bg_color(color_buttons.quote_level1_btn,
1984 prefs_common.quote_level1_col);
1985 set_button_bg_color(color_buttons.quote_level2_btn,
1986 prefs_common.quote_level2_col);
1987 set_button_bg_color(color_buttons.quote_level3_btn,
1988 prefs_common.quote_level3_col);
1989 set_button_bg_color(color_buttons.uri_btn,
1990 prefs_common.uri_col);
1991 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1992 prefs_common.recycle_quote_colors);
1994 gtk_widget_show_all(vbox);
1995 quote_color_win = window;
1998 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2000 gchar *type = (gchar *)data;
2001 gchar *title = NULL;
2002 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2004 GtkColorSelectionDialog *dialog;
2006 if(g_strcasecmp(type, "LEVEL1") == 0) {
2007 title = _("Pick color for quotation level 1");
2008 rgbvalue = prefs_common.quote_level1_col;
2009 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2010 title = _("Pick color for quotation level 2");
2011 rgbvalue = prefs_common.quote_level2_col;
2012 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2013 title = _("Pick color for quotation level 3");
2014 rgbvalue = prefs_common.quote_level3_col;
2015 } else if(g_strcasecmp(type, "URI") == 0) {
2016 title = _("Pick color for URI");
2017 rgbvalue = prefs_common.uri_col;
2018 } else { /* Should never be called */
2019 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2023 color_dialog = gtk_color_selection_dialog_new(title);
2024 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2025 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2026 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2028 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2029 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2030 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2031 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2033 /* preselect the previous color in the color selection dialog */
2034 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2035 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2036 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2037 dialog = (GtkColorSelectionDialog *)color_dialog;
2038 gtk_color_selection_set_color
2039 ((GtkColorSelection *)dialog->colorsel, color);
2041 gtk_widget_show(color_dialog);
2044 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2046 GtkColorSelection *colorsel = (GtkColorSelection *)
2047 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2049 gint red, green, blue, rgbvalue;
2050 gchar *type = (gchar *)data;
2052 gtk_color_selection_get_color(colorsel, color);
2054 red = (gint) (color[0] * 255.0);
2055 green = (gint) (color[1] * 255.0);
2056 blue = (gint) (color[2] * 255.0);
2057 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2060 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2061 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2062 fprintf(stderr, "Color is %x\n", rgbvalue);
2065 if (g_strcasecmp(type, "LEVEL1") == 0) {
2066 prefs_common.quote_level1_col = rgbvalue;
2067 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2068 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2069 prefs_common.quote_level2_col = rgbvalue;
2070 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2071 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2072 prefs_common.quote_level3_col = rgbvalue;
2073 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2074 } else if (g_strcasecmp(type, "URI") == 0) {
2075 prefs_common.uri_col = rgbvalue;
2076 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2078 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2080 gtk_widget_hide(color_dialog);
2083 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2085 gtk_widget_hide(color_dialog);
2088 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2093 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2094 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2095 newstyle->bg[GTK_STATE_NORMAL] = color;
2096 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2097 newstyle->bg[GTK_STATE_ACTIVE] = color;
2099 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2102 static void prefs_enable_message_color_toggled(void)
2106 is_active = gtk_toggle_button_get_active
2107 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2108 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2109 prefs_common.enable_color = is_active;
2112 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2116 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2117 prefs_common.recycle_quote_colors = is_active;
2120 static void prefs_quote_description(void)
2122 if (!quote_desc_win)
2123 prefs_quote_description_create();
2125 gtk_widget_show(quote_desc_win);
2127 gtk_widget_hide(quote_desc_win);
2130 static void prefs_quote_description_create(void)
2138 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2139 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2140 _("Description of symbols"));
2141 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2142 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2143 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2144 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2146 vbox = gtk_vbox_new(FALSE, 8);
2147 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2149 hbox = gtk_hbox_new(FALSE, 4);
2150 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2152 label = gtk_label_new
2163 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2164 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2166 label = gtk_label_new
2169 "Full Name of Sender\n"
2170 "First Name of Sender\n"
2171 "Initial of Sender\n"
2177 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2178 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2180 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2181 NULL, NULL, NULL, NULL);
2182 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2184 gtk_widget_grab_default(ok_btn);
2185 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2186 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2188 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2189 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2191 gtk_widget_show_all(vbox);
2194 /* functions for setting items of SummaryView */
2196 static struct _SummaryDisplayItem
2200 GtkWidget *chkbtn[N_SUMMARY_COLS];
2203 GtkWidget *cancel_btn;
2206 #define SET_ACTIVE(column, var) \
2207 gtk_toggle_button_set_active \
2208 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2210 #define GET_ACTIVE(column, var) \
2211 prefs_common.var = gtk_toggle_button_get_active \
2212 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2214 void prefs_summary_display_item_set(void)
2216 static gboolean cancelled;
2218 if (!summarydispitem.window)
2219 prefs_summary_display_item_dialog_create(&cancelled);
2220 gtk_widget_grab_focus(summarydispitem.ok_btn);
2221 gtk_widget_show(summarydispitem.window);
2222 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2224 SET_ACTIVE(S_COL_MARK, show_mark);
2225 SET_ACTIVE(S_COL_UNREAD, show_unread);
2226 SET_ACTIVE(S_COL_MIME, show_mime);
2227 SET_ACTIVE(S_COL_NUMBER, show_number);
2228 SET_ACTIVE(S_COL_SIZE, show_size);
2229 SET_ACTIVE(S_COL_DATE, show_date);
2230 SET_ACTIVE(S_COL_FROM, show_from);
2231 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2234 gtk_widget_hide(summarydispitem.window);
2236 if (cancelled != TRUE) {
2237 GET_ACTIVE(S_COL_MARK, show_mark);
2238 GET_ACTIVE(S_COL_UNREAD, show_unread);
2239 GET_ACTIVE(S_COL_MIME, show_mime);
2240 GET_ACTIVE(S_COL_NUMBER, show_number);
2241 GET_ACTIVE(S_COL_SIZE, show_size);
2242 GET_ACTIVE(S_COL_DATE, show_date);
2243 GET_ACTIVE(S_COL_FROM, show_from);
2244 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2246 main_window_reflect_prefs_all();
2250 #define SET_CHECK_BUTTON(column, label) \
2252 summarydispitem.chkbtn[column] = \
2253 gtk_check_button_new_with_label(label); \
2254 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2255 summarydispitem.chkbtn[column], \
2259 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2263 GtkWidget *chkbtn_vbox;
2266 GtkWidget *cancel_btn;
2268 window = gtk_window_new(GTK_WINDOW_DIALOG);
2269 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2270 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2271 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2272 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2273 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2274 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2275 GTK_SIGNAL_FUNC(display_item_delete_event),
2277 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2278 GTK_SIGNAL_FUNC(display_item_key_pressed),
2281 vbox = gtk_vbox_new(FALSE, 8);
2282 gtk_container_add(GTK_CONTAINER(window), vbox);
2284 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2285 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2287 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2288 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2289 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2290 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2291 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2292 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2293 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2294 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2296 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2297 &cancel_btn, _("Cancel"), NULL, NULL);
2298 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2299 gtk_widget_grab_default(ok_btn);
2301 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2302 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2303 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2304 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2306 gtk_widget_show_all(vbox);
2308 summarydispitem.window = window;
2309 summarydispitem.ok_btn = ok_btn;
2310 summarydispitem.cancel_btn = cancel_btn;
2313 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2319 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2325 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2326 gboolean *cancelled)
2334 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2335 gboolean *cancelled)
2337 if (event && event->keyval == GDK_Escape) {
2343 static void prefs_font_select(GtkButton *button)
2345 if (!font_sel_win) {
2346 font_sel_win = gtk_font_selection_dialog_new
2347 (_("Font selection"));
2348 gtk_window_position(GTK_WINDOW(font_sel_win),
2349 GTK_WIN_POS_CENTER);
2350 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2351 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2354 (GTK_OBJECT(font_sel_win), "key_press_event",
2355 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2358 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2360 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2362 gtk_signal_connect_object
2363 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2365 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2366 GTK_OBJECT(font_sel_win));
2369 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2370 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2371 gtk_widget_grab_focus
2372 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2373 gtk_widget_show(font_sel_win);
2376 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2380 if (event && event->keyval == GDK_Escape)
2381 gtk_widget_hide(font_sel_win);
2384 static void prefs_font_selection_ok(GtkButton *button)
2388 fontname = gtk_font_selection_dialog_get_font_name
2389 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2392 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2396 gtk_widget_hide(font_sel_win);
2399 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2402 GtkWidget *menuitem;
2405 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2406 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2407 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2408 g_free(*((gchar **)pparam->data));
2409 *((gchar **)pparam->data) = g_strdup(charset);
2412 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2415 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2417 GtkWidget *menuitem;
2421 g_return_if_fail(optmenu != NULL);
2422 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2424 menu = gtk_option_menu_get_menu(optmenu);
2425 for (cur = GTK_MENU_SHELL(menu)->children;
2426 cur != NULL; cur = cur->next) {
2427 menuitem = GTK_WIDGET(cur->data);
2428 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2429 if (!strcmp(charset, *((gchar **)pparam->data))) {
2430 gtk_option_menu_set_history(optmenu, n);
2436 gtk_option_menu_set_history(optmenu, 0);
2437 prefs_common_charset_set_data_from_optmenu(pparam);
2440 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2443 if (event && event->keyval == GDK_Escape)
2444 gtk_widget_hide(dialog.window);
2447 static void prefs_common_ok(GtkButton *button)
2449 prefs_common_apply(button);
2450 gtk_widget_hide(dialog.window);
2451 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2452 gtk_widget_hide(quote_desc_win);
2455 static void prefs_common_apply(GtkButton *button)
2457 prefs_set_data_from_dialog(param);
2458 main_window_reflect_prefs_all();
2459 prefs_common_save_config();