2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "mainwindow.h"
41 #include "summaryview.h"
42 #include "messageview.h"
43 #include "manage_window.h"
48 #include "alertpanel.h"
51 PrefsCommon prefs_common;
53 static PrefsDialog dialog;
55 static struct Receive {
56 GtkWidget *checkbtn_incext;
57 GtkWidget *entry_incext;
58 GtkWidget *button_incext;
60 GtkWidget *checkbtn_local;
61 GtkWidget *checkbtn_filter_on_inc;
62 GtkWidget *entry_spool;
64 GtkWidget *checkbtn_autochk;
65 GtkWidget *spinbtn_autochk;
66 GtkObject *spinbtn_autochk_adj;
68 GtkWidget *checkbtn_chkonstartup;
70 GtkWidget *spinbtn_maxarticle;
71 GtkObject *spinbtn_maxarticle_adj;
75 GtkWidget *checkbtn_sendext;
76 GtkWidget *entry_sendext;
77 GtkWidget *button_sendext;
79 GtkWidget *checkbtn_savemsg;
80 GtkWidget *checkbtn_queuemsg;
82 GtkWidget *optmenu_charset;
85 static struct Compose {
86 GtkWidget *checkbtn_quote;
87 GtkWidget *entry_quotemark;
88 GtkWidget *text_quotefmt;
89 GtkWidget *checkbtn_autosig;
90 GtkWidget *entry_sigsep;
92 GtkWidget *spinbtn_linewrap;
93 GtkObject *spinbtn_linewrap_adj;
94 GtkWidget *checkbtn_wrapquote;
95 GtkWidget *checkbtn_wrapatsend;
98 static struct Display {
99 GtkWidget *entry_textfont;
100 GtkWidget *button_textfont;
102 GtkWidget *chkbtn_folder_unread;
104 GtkWidget *chkbtn_transhdr;
106 GtkWidget *chkbtn_swapfrom;
107 GtkWidget *chkbtn_hscrollbar;
108 GtkWidget *entry_datefmt;
111 static struct Message {
112 GtkWidget *chkbtn_enablecol;
113 GtkWidget *button_edit_col;
114 GtkWidget *chkbtn_mbalnum;
115 GtkWidget *chkbtn_disphdrpane;
116 GtkWidget *chkbtn_disphdr;
117 GtkWidget *spinbtn_linespc;
118 GtkObject *spinbtn_linespc_adj;
119 GtkWidget *chkbtn_headspc;
121 GtkWidget *chkbtn_smoothscroll;
122 GtkWidget *spinbtn_scrollstep;
123 GtkObject *spinbtn_scrollstep_adj;
124 GtkWidget *chkbtn_halfpage;
128 static struct Privacy {
129 GtkWidget *checkbtn_default_encrypt;
130 GtkWidget *checkbtn_default_sign;
131 GtkWidget *checkbtn_auto_check_signatures;
132 GtkWidget *checkbtn_passphrase_grab;
133 GtkWidget *optmenu_default_signkey;
137 static struct Interface {
138 GtkWidget *checkbtn_emacs;
139 GtkWidget *checkbtn_openunread;
140 GtkWidget *checkbtn_openinbox;
141 GtkWidget *checkbtn_immedexec;
142 GtkWidget *checkbtn_confonexit;
143 GtkWidget *checkbtn_cleanonexit;
144 GtkWidget *checkbtn_askonclean;
145 GtkWidget *checkbtn_warnqueued;
146 GtkWidget *checkbtn_addaddrbyclick;
149 static struct Other {
150 GtkWidget *uri_combo;
151 GtkWidget *uri_entry;
152 GtkWidget *printcmd_entry;
153 GtkWidget *exteditor_combo;
154 GtkWidget *exteditor_entry;
157 static struct MessageColorButtons {
158 GtkWidget *quote_level1_btn;
159 GtkWidget *quote_level2_btn;
160 GtkWidget *quote_level3_btn;
164 static GtkWidget *quote_desc_win;
165 static GtkWidget *font_sel_win;
166 static GtkWidget *quote_color_win;
167 static GtkWidget *color_dialog;
169 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
170 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
172 static void prefs_common_default_signkey_set_data_from_optmenu
174 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
178 parameter name, default value, pointer to the prefs variable, data type,
179 pointer to the widget pointer,
180 pointer to the function for data setting,
181 pointer to the function for widget setting
184 static PrefParam param[] = {
186 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
187 &receive.checkbtn_incext,
188 prefs_set_data_from_toggle, prefs_set_toggle},
189 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
190 &receive.entry_incext,
191 prefs_set_data_from_entry, prefs_set_entry},
193 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
194 &receive.checkbtn_local,
195 prefs_set_data_from_toggle, prefs_set_toggle},
196 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
197 &receive.checkbtn_filter_on_inc,
198 prefs_set_data_from_toggle, prefs_set_toggle},
199 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
200 &receive.entry_spool,
201 prefs_set_data_from_entry, prefs_set_entry},
203 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
204 &receive.checkbtn_autochk,
205 prefs_set_data_from_toggle, prefs_set_toggle},
206 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
207 &receive.spinbtn_autochk,
208 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
209 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
210 &receive.checkbtn_chkonstartup,
211 prefs_set_data_from_toggle, prefs_set_toggle},
213 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
214 &receive.spinbtn_maxarticle,
215 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
218 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
219 &send.checkbtn_sendext,
220 prefs_set_data_from_toggle, prefs_set_toggle},
221 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
222 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
223 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
224 &send.checkbtn_savemsg,
225 prefs_set_data_from_toggle, prefs_set_toggle},
226 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
227 &send.checkbtn_queuemsg,
228 prefs_set_data_from_toggle, prefs_set_toggle},
230 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
231 &send.optmenu_charset,
232 prefs_common_charset_set_data_from_optmenu,
233 prefs_common_charset_set_optmenu},
236 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
237 &compose.checkbtn_quote,
238 prefs_set_data_from_toggle, prefs_set_toggle},
239 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
240 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
241 {"quote_format", "On %d\\n%f wrote:\\n\\n",
242 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
243 prefs_set_data_from_text, prefs_set_text},
245 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
246 &compose.checkbtn_autosig,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
249 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
251 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
252 &compose.spinbtn_linewrap,
253 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
254 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
255 &compose.checkbtn_wrapquote,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"linewrap_before_sending", "FALSE",
258 &prefs_common.linewrap_at_send, P_BOOL,
259 &compose.checkbtn_wrapatsend,
260 prefs_set_data_from_toggle, prefs_set_toggle},
262 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
266 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
268 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
269 &prefs_common.textfont, P_STRING,
270 &display.entry_textfont,
271 prefs_set_data_from_entry, prefs_set_entry},
273 {"display_folder_unread_num", "TRUE",
274 &prefs_common.display_folder_unread, P_BOOL,
275 &display.chkbtn_folder_unread,
276 prefs_set_data_from_toggle, prefs_set_toggle},
278 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
279 &display.chkbtn_transhdr,
280 prefs_set_data_from_toggle, prefs_set_toggle},
282 /* Display: Summary View */
283 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
284 &display.chkbtn_swapfrom,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
287 &display.chkbtn_hscrollbar,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
290 P_STRING, &display.entry_datefmt,
291 prefs_set_data_from_entry, prefs_set_entry},
293 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
295 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
297 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
300 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
302 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
304 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
306 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
308 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
310 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
312 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
314 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
318 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
320 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
322 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
324 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
326 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
328 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
330 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
332 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
334 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
336 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
338 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
340 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
342 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
344 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
346 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
348 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
349 P_INT, NULL, NULL, NULL},
350 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
352 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
354 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
356 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
358 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
360 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
362 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
364 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
366 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
368 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
370 {"compose_width", "600", &prefs_common.compose_width, P_INT,
372 {"compose_height", "560", &prefs_common.compose_height, P_INT,
376 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
377 &message.chkbtn_enablecol,
378 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
382 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
384 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
386 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
388 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
390 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
391 P_BOOL, NULL, NULL, NULL},
393 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
394 &message.chkbtn_mbalnum,
395 prefs_set_data_from_toggle, prefs_set_toggle},
396 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
397 P_BOOL, &message.chkbtn_disphdrpane,
398 prefs_set_data_from_toggle, prefs_set_toggle},
399 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
400 &message.chkbtn_disphdr,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"line_space", "2", &prefs_common.line_space, P_INT,
403 &message.spinbtn_linespc,
404 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
405 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
406 &message.chkbtn_headspc,
407 prefs_set_data_from_toggle, prefs_set_toggle},
409 {"enable_smooth_scroll", "FALSE",
410 &prefs_common.enable_smooth_scroll, P_BOOL,
411 &message.chkbtn_smoothscroll,
412 prefs_set_data_from_toggle, prefs_set_toggle},
413 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
414 &message.spinbtn_scrollstep,
415 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
416 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
417 &message.chkbtn_halfpage,
418 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"mime_image_viewer", "display '%s'",
422 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
423 {"mime_audio_player", "play '%s'",
424 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
428 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
429 &privacy.checkbtn_default_encrypt,
430 prefs_set_data_from_toggle, prefs_set_toggle},
431 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
432 &privacy.checkbtn_default_sign,
433 prefs_set_data_from_toggle, prefs_set_toggle},
434 {"auto_check_signatures", "TRUE",
435 &prefs_common.auto_check_signatures, P_BOOL,
436 &privacy.checkbtn_auto_check_signatures,
437 prefs_set_data_from_toggle, prefs_set_toggle},
439 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
440 &privacy.checkbtn_passphrase_grab,
441 prefs_set_data_from_toggle, prefs_set_toggle},
442 #endif /* __MINGW32__ */
443 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
444 &privacy.optmenu_default_signkey,
445 prefs_common_default_signkey_set_data_from_optmenu,
446 prefs_common_default_signkey_set_optmenu},
447 #endif /* USE_GPGME */
450 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
452 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
455 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
456 &interface.checkbtn_emacs,
457 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
459 P_BOOL, &interface.checkbtn_openunread,
460 prefs_set_data_from_toggle, prefs_set_toggle},
461 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
462 P_BOOL, &interface.checkbtn_openinbox,
463 prefs_set_data_from_toggle, prefs_set_toggle},
464 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
465 &interface.checkbtn_immedexec,
466 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
468 P_BOOL, &interface.checkbtn_addaddrbyclick,
469 prefs_set_data_from_toggle, prefs_set_toggle},
471 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
472 &interface.checkbtn_confonexit,
473 prefs_set_data_from_toggle, prefs_set_toggle},
474 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
475 &interface.checkbtn_cleanonexit,
476 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
478 &interface.checkbtn_askonclean,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
481 P_BOOL, &interface.checkbtn_warnqueued,
482 prefs_set_data_from_toggle, prefs_set_toggle},
485 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
486 &prefs_common.uri_cmd, P_STRING,
487 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
488 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
489 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
490 {"ext_editor_command", "gedit %s",
491 &prefs_common.ext_editor_cmd, P_STRING,
492 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
494 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
498 #define VSPACING_NARROW 4
499 #define VBOX_BORDER 16
500 #define DEFAULT_ENTRY_WIDTH 80
501 #define PREFSBUFSIZE 1024
503 /* widget creating functions */
504 static void prefs_common_create (void);
505 static void prefs_receive_create (void);
506 static void prefs_send_create (void);
507 static void prefs_compose_create (void);
508 static void prefs_display_create (void);
509 static void prefs_message_create (void);
511 static void prefs_privacy_create (void);
513 static void prefs_interface_create (void);
514 static void prefs_other_create (void);
516 static void prefs_quote_description (void);
517 static void prefs_quote_description_create (void);
518 static void prefs_quote_colors_dialog (void);
519 static void prefs_quote_colors_dialog_create (void);
520 static void quote_color_set_dialog (GtkWidget *widget,
522 static void quote_colors_set_dialog_ok (GtkWidget *widget,
524 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
526 static void set_button_bg_color (GtkWidget *widget,
528 static void prefs_enable_message_color_toggled (void);
529 static void prefs_recycle_colors_toggled (GtkWidget *widget);
531 /* functions for setting items of SummaryView */
532 static void prefs_summary_display_item_dialog_create
533 (gboolean *cancelled);
534 static void display_item_ok (GtkWidget *widget,
535 gboolean *cancelled);
536 static void display_item_cancel (GtkWidget *widget,
537 gboolean *cancelled);
538 static gint display_item_delete_event (GtkWidget *widget,
540 gboolean *cancelled);
541 static void display_item_key_pressed (GtkWidget *widget,
543 gboolean *cancelled);
545 static void prefs_font_select (GtkButton *button);
546 static void prefs_font_selection_key_pressed (GtkWidget *widget,
549 static void prefs_font_selection_ok (GtkButton *button);
551 static void prefs_common_key_pressed (GtkWidget *widget,
554 static void prefs_common_ok (GtkButton *button);
555 static void prefs_common_apply (GtkButton *button);
557 void prefs_common_read_config(void)
559 prefs_read_config(param, "Common", COMMON_RC);
562 void prefs_common_save_config(void)
564 prefs_save_config(param, "Common", COMMON_RC);
567 void prefs_common_open(void)
569 if (!dialog.window) {
570 prefs_common_create();
573 manage_window_set_transient(GTK_WINDOW(dialog.window));
574 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
575 gtk_widget_grab_focus(dialog.ok_btn);
577 prefs_set_dialog(param);
579 gtk_widget_show(dialog.window);
582 static void prefs_common_create(void)
586 debug_print(_("Creating common preferences window...\n"));
588 prefs_dialog_create(&dialog);
589 gtk_window_set_title (GTK_WINDOW(dialog.window),
590 _("Common Preferences"));
591 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
592 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
593 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
594 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
595 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
596 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
597 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
598 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
599 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
600 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
601 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
602 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
603 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
604 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
605 GTK_OBJECT(dialog.window));
607 /* create all widgets on notebook */
608 prefs_receive_create();
609 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
611 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
612 prefs_compose_create();
613 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
614 prefs_display_create();
615 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
616 prefs_message_create();
617 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
619 prefs_privacy_create();
620 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
622 prefs_interface_create();
623 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
624 prefs_other_create();
625 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
627 gtk_widget_show_all(dialog.window);
630 static void prefs_receive_create(void)
634 GtkWidget *frame_incext;
635 GtkWidget *checkbtn_incext;
637 GtkWidget *label_incext;
638 GtkWidget *entry_incext;
639 GtkWidget *button_incext;
641 GtkWidget *frame_spool;
642 GtkWidget *checkbtn_local;
643 GtkWidget *checkbtn_filter_on_inc;
644 GtkWidget *label_spool;
645 GtkWidget *entry_spool;
647 GtkWidget *hbox_autochk;
648 GtkWidget *checkbtn_autochk;
649 GtkWidget *label_autochk1;
650 GtkObject *spinbtn_autochk_adj;
651 GtkWidget *spinbtn_autochk;
652 GtkWidget *label_autochk2;
653 GtkWidget *checkbtn_chkonstartup;
655 GtkWidget *frame_news;
656 GtkWidget *label_maxarticle;
657 GtkWidget *spinbtn_maxarticle;
658 GtkObject *spinbtn_maxarticle_adj;
660 vbox1 = gtk_vbox_new (FALSE, VSPACING);
661 gtk_widget_show (vbox1);
662 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
663 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
665 PACK_FRAME(vbox1, frame_incext, _("External program"));
667 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
668 gtk_widget_show (vbox2);
669 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
670 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
672 /* Use of external incorporation program */
673 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
674 _("Use external program for incorporation"));
676 hbox = gtk_hbox_new (FALSE, 8);
677 gtk_widget_show (hbox);
678 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
679 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
681 label_incext = gtk_label_new (_("Program path"));
682 gtk_widget_show (label_incext);
683 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
685 entry_incext = gtk_entry_new ();
686 gtk_widget_show (entry_incext);
687 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
689 button_incext = gtk_button_new_with_label ("... ");
690 gtk_widget_show (button_incext);
691 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
693 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
695 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
696 gtk_widget_show (vbox2);
697 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
698 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
700 hbox = gtk_hbox_new (FALSE, 32);
701 gtk_widget_show (hbox);
702 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
704 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
705 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
706 _("Filter on incorporation"));
707 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
709 hbox = gtk_hbox_new (FALSE, 8);
710 gtk_widget_show (hbox);
711 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
712 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
714 label_spool = gtk_label_new (_("Spool directory"));
715 gtk_widget_show (label_spool);
716 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
718 entry_spool = gtk_entry_new ();
719 gtk_widget_show (entry_spool);
720 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
722 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
723 gtk_widget_show (vbox2);
724 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
727 hbox_autochk = gtk_hbox_new (FALSE, 8);
728 gtk_widget_show (hbox_autochk);
729 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
731 gtk_widget_set_sensitive(hbox_autochk, FALSE);
733 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
734 _("Auto-check new mail"));
736 label_autochk1 = gtk_label_new (_("each"));
737 gtk_widget_show (label_autochk1);
738 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
740 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
741 spinbtn_autochk = gtk_spin_button_new
742 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
743 gtk_widget_show (spinbtn_autochk);
744 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
745 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
746 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
748 label_autochk2 = gtk_label_new (_("minute(s)"));
749 gtk_widget_show (label_autochk2);
750 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
752 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
753 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
754 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
756 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
757 _("Check new mail on startup"));
759 PACK_FRAME(vbox1, frame_news, _("News"));
761 hbox = gtk_hbox_new (FALSE, 8);
762 gtk_widget_show (hbox);
763 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
764 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
766 label_maxarticle = gtk_label_new
767 (_("Maximum article number to download\n"
768 "(unlimited if 0 is specified)"));
769 gtk_widget_show (label_maxarticle);
770 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
771 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
773 spinbtn_maxarticle_adj =
774 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
775 spinbtn_maxarticle = gtk_spin_button_new
776 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
777 gtk_widget_show (spinbtn_maxarticle);
778 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
780 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
781 gtk_spin_button_set_numeric
782 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
784 receive.checkbtn_incext = checkbtn_incext;
785 receive.entry_incext = entry_incext;
786 receive.button_incext = button_incext;
788 receive.checkbtn_local = checkbtn_local;
789 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
790 receive.entry_spool = entry_spool;
792 receive.checkbtn_autochk = checkbtn_autochk;
793 receive.spinbtn_autochk = spinbtn_autochk;
794 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
796 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
798 receive.spinbtn_maxarticle = spinbtn_maxarticle;
799 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
802 static void prefs_send_create(void)
806 GtkWidget *frame_sendext;
807 GtkWidget *vbox_sendext;
808 GtkWidget *checkbtn_sendext;
810 GtkWidget *label_sendext;
811 GtkWidget *entry_sendext;
812 GtkWidget *button_sendext;
813 GtkWidget *checkbtn_savemsg;
814 GtkWidget *checkbtn_queuemsg;
815 GtkWidget *label_outcharset;
817 GtkWidget *optmenu_menu;
820 vbox1 = gtk_vbox_new (FALSE, VSPACING);
821 gtk_widget_show (vbox1);
822 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
823 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
825 PACK_FRAME(vbox1, frame_sendext, _("External program"));
827 gtk_widget_set_sensitive(frame_sendext, FALSE);
829 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
830 gtk_widget_show (vbox_sendext);
831 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
832 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
834 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
835 _("Use external program for sending"));
837 hbox1 = gtk_hbox_new (FALSE, 8);
838 gtk_widget_show (hbox1);
839 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
840 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
842 label_sendext = gtk_label_new (_("Program path"));
843 gtk_widget_show (label_sendext);
844 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
846 entry_sendext = gtk_entry_new ();
847 gtk_widget_show (entry_sendext);
848 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
850 button_sendext = gtk_button_new_with_label ("... ");
851 gtk_widget_show (button_sendext);
852 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
854 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
855 gtk_widget_show (vbox2);
856 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
858 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
859 _("Save sent message to outbox"));
860 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
861 _("Queue message that failed to send"));
863 hbox1 = gtk_hbox_new (FALSE, 8);
864 gtk_widget_show (hbox1);
865 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
867 label_outcharset = gtk_label_new (_("Outgoing codeset"));
868 gtk_widget_show (label_outcharset);
869 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
871 optmenu = gtk_option_menu_new ();
872 gtk_widget_show (optmenu);
873 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
875 optmenu_menu = gtk_menu_new ();
877 #define SET_MENUITEM(str, charset) \
879 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
882 SET_MENUITEM(_("Automatic"), CS_AUTO);
883 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
885 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
887 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
889 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
890 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
891 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
892 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
893 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
894 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
895 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
896 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
897 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
898 #endif /* HAVE_LIBJCONV */
899 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
901 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
902 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
905 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
906 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
908 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
909 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
911 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
912 #endif /* HAVE_LIBJCONV */
914 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
916 send.checkbtn_sendext = checkbtn_sendext;
917 send.entry_sendext = entry_sendext;
918 send.button_sendext = button_sendext;
920 send.checkbtn_savemsg = checkbtn_savemsg;
921 send.checkbtn_queuemsg = checkbtn_queuemsg;
923 send.optmenu_charset = optmenu;
926 static void prefs_compose_create(void)
929 GtkWidget *frame_quote;
930 GtkWidget *vbox_quote;
931 GtkWidget *checkbtn_quote;
933 GtkWidget *label_quotemark;
934 GtkWidget *entry_quotemark;
936 GtkWidget *label_quotefmt;
937 GtkWidget *btn_quotedesc;
938 GtkWidget *scrolledwin_quotefmt;
939 GtkWidget *text_quotefmt;
941 GtkWidget *frame_sig;
943 GtkWidget *checkbtn_autosig;
944 GtkWidget *label_sigsep;
945 GtkWidget *entry_sigsep;
947 GtkWidget *vbox_linewrap;
950 GtkWidget *label_linewrap;
951 GtkObject *spinbtn_linewrap_adj;
952 GtkWidget *spinbtn_linewrap;
953 GtkWidget *checkbtn_wrapquote;
954 GtkWidget *checkbtn_wrapatsend;
956 vbox1 = gtk_vbox_new (FALSE, VSPACING);
957 gtk_widget_show (vbox1);
958 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
959 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
961 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
963 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
964 gtk_widget_show (vbox_quote);
965 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
966 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
968 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
969 _("Quote message when replying"));
971 hbox1 = gtk_hbox_new (FALSE, 8);
972 gtk_widget_show (hbox1);
973 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
975 label_quotemark = gtk_label_new (_("Quotation mark"));
976 gtk_widget_show (label_quotemark);
977 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
979 entry_quotemark = gtk_entry_new ();
980 gtk_widget_show (entry_quotemark);
981 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
982 gtk_widget_set_usize (entry_quotemark, 64, -1);
984 hbox2 = gtk_hbox_new (FALSE, 0);
985 gtk_widget_show (hbox2);
986 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
988 label_quotefmt = gtk_label_new (_("Quotation format:"));
989 gtk_widget_show (label_quotefmt);
990 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
993 gtk_button_new_with_label (_(" Description of symbols "));
994 gtk_widget_show (btn_quotedesc);
995 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
996 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
997 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
999 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1000 gtk_widget_show (scrolledwin_quotefmt);
1001 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1002 gtk_scrolled_window_set_policy
1003 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1004 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1006 text_quotefmt = gtk_text_new (NULL, NULL);
1007 gtk_widget_show (text_quotefmt);
1008 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1009 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1010 gtk_widget_set_usize(text_quotefmt, -1, 60);
1012 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1014 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1015 gtk_widget_show (vbox_sig);
1016 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1017 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1019 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1020 _("Insert signature automatically"));
1022 hbox1 = gtk_hbox_new (FALSE, 8);
1023 gtk_widget_show (hbox1);
1024 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1026 label_sigsep = gtk_label_new (_("Signature separator"));
1027 gtk_widget_show (label_sigsep);
1028 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1030 entry_sigsep = gtk_entry_new ();
1031 gtk_widget_show (entry_sigsep);
1032 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1033 gtk_widget_set_usize (entry_sigsep, 64, -1);
1036 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1037 gtk_widget_show (vbox_linewrap);
1038 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1040 hbox3 = gtk_hbox_new (FALSE, 8);
1041 gtk_widget_show (hbox3);
1042 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1044 label_linewrap = gtk_label_new (_("Wrap messages at"));
1045 gtk_widget_show (label_linewrap);
1046 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1048 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1049 spinbtn_linewrap = gtk_spin_button_new
1050 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1051 gtk_widget_show (spinbtn_linewrap);
1052 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1053 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1054 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1056 label_linewrap = gtk_label_new (_("characters"));
1057 gtk_widget_show (label_linewrap);
1058 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1060 hbox4 = gtk_hbox_new (FALSE, 32);
1061 gtk_widget_show (hbox4);
1062 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1064 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1066 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1068 compose.checkbtn_quote = checkbtn_quote;
1069 compose.entry_quotemark = entry_quotemark;
1070 compose.text_quotefmt = text_quotefmt;
1071 compose.checkbtn_autosig = checkbtn_autosig;
1072 compose.entry_sigsep = entry_sigsep;
1074 compose.spinbtn_linewrap = spinbtn_linewrap;
1075 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1076 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1077 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1081 /* alfons - nice ui for darko */
1083 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1085 g_return_if_fail(widget != NULL);
1086 g_return_if_fail(*widget != NULL);
1087 gtk_widget_destroy(*widget);
1091 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1093 g_return_if_fail(widget != NULL);
1094 g_return_if_fail(*widget != NULL);
1099 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1102 struct tm *cal_time;
1105 cur_time = time(NULL);
1106 cal_time = localtime(&cur_time);
1108 text = gtk_editable_get_chars(editable, 0, -1);
1110 strftime(buffer, sizeof buffer, text, cal_time);
1112 gtk_label_set_text(example, buffer);
1115 static GtkWidget *create_date_format(GtkButton *button, void *data)
1117 static GtkWidget *date_format = NULL;
1119 GtkWidget *scrolledwindow1;
1120 GtkWidget *date_format_list;
1139 { "%a", _("the full abbreviated weekday name") },
1140 { "%A", _("the full weekday name") },
1141 { "%b", _("the abbreviated month name") },
1142 { "%B", _("the full month name") },
1143 { "%c", _("the preferred date and time for the current locale") },
1144 { "%C", _("the century number (year/100)") },
1145 { "%d", _("the day of the month as a decimal number") },
1146 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1147 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1148 { "%j", _("the day of the year as a decimal number") },
1149 { "%m", _("the month as a decimal number") },
1150 { "%M", _("the minute as a decimal number") },
1151 { "%p", _("either AM or PM") },
1152 { "%S", _("the second as a decimal number") },
1153 { "%w", _("the day of the week as a decimal number") },
1154 { "%x", _("the preferred date for the current locale") },
1155 { "%y", _("the last two digits of a year") },
1156 { "%Y", _("the year as a decimal number") },
1157 { "%Z", _("the time zone or name or abbreviation") }
1160 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1162 if (date_format) return date_format;
1164 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1165 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1166 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1167 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1169 vbox1 = gtk_vbox_new(FALSE, 10);
1170 gtk_widget_show(vbox1);
1171 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1173 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1174 gtk_widget_show(scrolledwindow1);
1175 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1177 date_format_list = gtk_clist_new(2);
1178 gtk_widget_show(date_format_list);
1179 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1180 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1181 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1182 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1184 label3 = gtk_label_new(_("Date Format"));
1185 gtk_widget_show(label3);
1186 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1188 label4 = gtk_label_new(_("Date Format Description"));
1189 gtk_widget_show(label4);
1190 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1192 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1194 /* phoney casting necessary because of gtk... */
1195 text[0] = (gchar *) time_format[tmp].fmt;
1196 text[1] = (gchar *) time_format[tmp].txt;
1198 gtk_clist_append(GTK_CLIST(date_format_list), text);
1201 table2 = gtk_table_new(1, 1, TRUE);
1202 gtk_widget_show(table2);
1203 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1205 vbox2 = gtk_vbox_new(FALSE, 0);
1206 gtk_widget_show(vbox2);
1207 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1208 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1209 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1211 vbox3 = gtk_vbox_new(TRUE, 4);
1212 gtk_widget_show(vbox3);
1213 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1215 hbox2 = gtk_hbox_new(FALSE, 0);
1216 gtk_widget_show(hbox2);
1217 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1219 label5 = gtk_label_new(_("Date format"));
1220 gtk_widget_show(label5);
1221 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1222 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1224 entry1 = gtk_entry_new_with_max_length(300);
1225 gtk_widget_show(entry1);
1226 gtk_box_pack_start(GTK_BOX(hbox2), entry1, TRUE, TRUE, 40);
1228 hbox1 = gtk_hbox_new(FALSE, 0);
1229 gtk_widget_show(hbox1);
1230 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1232 label6 = gtk_label_new(_("Example"));
1233 gtk_widget_show(label6);
1234 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1235 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1237 label7 = gtk_label_new(_("label7"));
1238 gtk_widget_show(label7);
1239 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1240 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1242 hbox3 = gtk_hbox_new(TRUE, 0);
1243 gtk_widget_show(hbox3);
1244 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1246 button1 = gtk_button_new_with_label(_("Close"));
1247 gtk_widget_show(button1);
1248 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1250 /* set the current format */
1251 gtk_entry_set_text(GTK_ENTRY(entry1), prefs_common.date_format);
1252 date_format_entry_on_change(GTK_EDITABLE(entry1), GTK_LABEL(label7));
1254 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1255 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1257 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1258 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1260 gtk_signal_connect(GTK_OBJECT(entry1), "changed",
1261 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1263 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1264 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1266 gtk_widget_show(date_format);
1270 static void prefs_display_create(void)
1273 GtkWidget *frame_font;
1275 GtkWidget *label_textfont;
1276 GtkWidget *entry_textfont;
1277 GtkWidget *button_textfont;
1278 GtkWidget *chkbtn_folder_unread;
1279 GtkWidget *chkbtn_transhdr;
1280 GtkWidget *frame_summary;
1282 GtkWidget *chkbtn_swapfrom;
1283 GtkWidget *chkbtn_hscrollbar;
1285 GtkWidget *label_datefmt;
1286 GtkWidget *entry_datefmt;
1287 GtkWidget *button_dispitem;
1289 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1290 gtk_widget_show (vbox1);
1291 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1292 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1294 PACK_FRAME(vbox1, frame_font, _("Font"));
1296 table1 = gtk_table_new (1, 3, FALSE);
1297 gtk_widget_show (table1);
1298 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1299 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1300 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1301 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1303 label_textfont = gtk_label_new (_("Text"));
1304 gtk_widget_show (label_textfont);
1305 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1306 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1308 entry_textfont = gtk_entry_new ();
1309 gtk_widget_show (entry_textfont);
1310 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1311 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1313 button_textfont = gtk_button_new_with_label ("... ");
1314 gtk_widget_show (button_textfont);
1315 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1317 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1318 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1320 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1321 gtk_widget_show (vbox2);
1322 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1325 (vbox2, chkbtn_transhdr,
1326 _("Translate header name (such as `From:', `Subject:')"));
1328 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1329 _("Display unread number next to folder name"));
1331 /* ---- Summary ---- */
1333 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1335 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1336 gtk_widget_show (vbox2);
1337 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1338 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1341 (vbox2, chkbtn_swapfrom,
1342 _("Display recipient on `From' column if sender is yourself"));
1344 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1346 hbox1 = gtk_hbox_new (FALSE, 8);
1347 gtk_widget_show (hbox1);
1348 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1350 label_datefmt = gtk_button_new_with_label (_("Date format"));
1351 gtk_widget_show (label_datefmt);
1352 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1353 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1354 GTK_SIGNAL_FUNC(create_date_format), NULL);
1356 entry_datefmt = gtk_entry_new ();
1357 gtk_widget_show (entry_datefmt);
1358 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1360 hbox1 = gtk_hbox_new (FALSE, 8);
1361 gtk_widget_show (hbox1);
1362 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1364 button_dispitem = gtk_button_new_with_label
1365 (_(" Set display item of summary... "));
1366 gtk_widget_show (button_dispitem);
1367 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1368 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1369 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1372 display.entry_textfont = entry_textfont;
1373 display.button_textfont = button_textfont;
1375 display.chkbtn_folder_unread = chkbtn_folder_unread;
1376 display.chkbtn_transhdr = chkbtn_transhdr;
1378 display.chkbtn_swapfrom = chkbtn_swapfrom;
1379 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1380 display.entry_datefmt = entry_datefmt;
1383 static void prefs_message_create(void)
1388 GtkWidget *chkbtn_enablecol;
1389 GtkWidget *button_edit_col;
1390 GtkWidget *chkbtn_mbalnum;
1391 GtkWidget *chkbtn_disphdrpane;
1392 GtkWidget *chkbtn_disphdr;
1393 GtkWidget *hbox_linespc;
1394 GtkWidget *label_linespc;
1395 GtkObject *spinbtn_linespc_adj;
1396 GtkWidget *spinbtn_linespc;
1397 GtkWidget *chkbtn_headspc;
1399 GtkWidget *frame_scr;
1400 GtkWidget *vbox_scr;
1401 GtkWidget *chkbtn_smoothscroll;
1402 GtkWidget *hbox_scr;
1403 GtkWidget *label_scr;
1404 GtkObject *spinbtn_scrollstep_adj;
1405 GtkWidget *spinbtn_scrollstep;
1406 GtkWidget *chkbtn_halfpage;
1408 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1409 gtk_widget_show (vbox1);
1410 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1411 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1413 hbox1 = gtk_hbox_new (FALSE, 8);
1414 gtk_widget_show (hbox1);
1415 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1417 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1418 _("Enable coloration of message"));
1419 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1420 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1423 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1424 gtk_widget_show (button_edit_col);
1425 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1426 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1427 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1429 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1431 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1432 gtk_widget_show (vbox2);
1433 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1436 (vbox2, chkbtn_mbalnum,
1437 _("Display 2-byte alphabet and numeric with 1-byte character"));
1438 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1439 _("Display header pane above message view"));
1440 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1441 _("Display short headers on message view"));
1443 hbox1 = gtk_hbox_new (FALSE, 32);
1444 gtk_widget_show (hbox1);
1445 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1447 hbox_linespc = gtk_hbox_new (FALSE, 8);
1448 gtk_widget_show (hbox1);
1449 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1451 label_linespc = gtk_label_new (_("Line space"));
1452 gtk_widget_show (label_linespc);
1453 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1456 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1457 spinbtn_linespc = gtk_spin_button_new
1458 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1459 gtk_widget_show (spinbtn_linespc);
1460 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1462 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1463 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1465 label_linespc = gtk_label_new (_("pixel(s)"));
1466 gtk_widget_show (label_linespc);
1467 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1470 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1472 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1474 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1475 gtk_widget_show (vbox_scr);
1476 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1477 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1479 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1481 hbox1 = gtk_hbox_new (FALSE, 32);
1482 gtk_widget_show (hbox1);
1483 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1485 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1487 hbox_scr = gtk_hbox_new (FALSE, 8);
1488 gtk_widget_show (hbox_scr);
1489 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1491 label_scr = gtk_label_new (_("Step"));
1492 gtk_widget_show (label_scr);
1493 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1495 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1496 spinbtn_scrollstep = gtk_spin_button_new
1497 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1498 gtk_widget_show (spinbtn_scrollstep);
1499 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1501 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1502 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1505 label_scr = gtk_label_new (_("pixel(s)"));
1506 gtk_widget_show (label_scr);
1507 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1509 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1511 message.chkbtn_enablecol = chkbtn_enablecol;
1512 message.button_edit_col = button_edit_col;
1513 message.chkbtn_mbalnum = chkbtn_mbalnum;
1514 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1515 message.chkbtn_disphdr = chkbtn_disphdr;
1516 message.spinbtn_linespc = spinbtn_linespc;
1517 message.chkbtn_headspc = chkbtn_headspc;
1519 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1520 message.spinbtn_scrollstep = spinbtn_scrollstep;
1521 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1522 message.chkbtn_halfpage = chkbtn_halfpage;
1526 static void prefs_privacy_create(void)
1531 GtkWidget *checkbtn_default_encrypt;
1532 GtkWidget *checkbtn_default_sign;
1533 GtkWidget *checkbtn_auto_check_signatures;
1534 GtkWidget *checkbtn_passphrase_grab;
1536 GtkWidget *menuitem;
1538 GtkWidget *optmenu_menu;
1540 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1541 gtk_widget_show (vbox1);
1542 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1543 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1545 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1546 gtk_widget_show (vbox2);
1547 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1549 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1550 _("Encrypt message by default"));
1552 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1553 _("Sign message by default"));
1555 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1556 _("Automatically check signatures"));
1559 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1560 _("Grab input while entering a passphrase"));
1563 hbox1 = gtk_hbox_new (FALSE, 8);
1564 gtk_widget_show (hbox1);
1565 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1567 /* create default signkey box */
1568 label = gtk_label_new (_("Default Sign Key"));
1569 gtk_widget_show (label);
1570 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1571 optmenu = gtk_option_menu_new ();
1572 gtk_widget_show (optmenu);
1573 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1574 optmenu_menu = gtk_menu_new ();
1576 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1577 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1578 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1579 /* FIXME: disabled because not implemented */
1580 gtk_widget_set_sensitive(optmenu, FALSE);
1582 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1583 privacy.checkbtn_default_sign = checkbtn_default_sign;
1584 privacy.checkbtn_auto_check_signatures
1585 = checkbtn_auto_check_signatures;
1586 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1587 privacy.optmenu_default_signkey = optmenu;
1591 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1595 GtkWidget *menuitem;
1598 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1599 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1600 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1601 g_free(*((gchar **)pparam->data));
1602 *((gchar **)pparam->data) = g_strdup(charset);
1606 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1610 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1612 GtkWidget *menuitem;
1616 g_return_if_fail(optmenu != NULL);
1617 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1619 menu = gtk_option_menu_get_menu(optmenu);
1620 for (cur = GTK_MENU_SHELL(menu)->children;
1621 cur != NULL; cur = cur->next) {
1622 menuitem = GTK_WIDGET(cur->data);
1623 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1624 if (!strcmp(charset, *((gchar **)pparam->data))) {
1625 gtk_option_menu_set_history(optmenu, n);
1631 gtk_option_menu_set_history(optmenu, 0);
1632 prefs_common_charset_set_data_from_optmenu(pparam);
1635 #endif /* USE_GPGME */
1637 static void prefs_interface_create(void)
1642 GtkWidget *checkbtn_emacs;
1643 GtkWidget *checkbtn_openunread;
1644 GtkWidget *checkbtn_openinbox;
1645 GtkWidget *checkbtn_immedexec;
1646 GtkWidget *checkbtn_addaddrbyclick;
1649 GtkWidget *frame_exit;
1650 GtkWidget *vbox_exit;
1652 GtkWidget *checkbtn_confonexit;
1653 GtkWidget *checkbtn_cleanonexit;
1654 GtkWidget *checkbtn_askonclean;
1655 GtkWidget *checkbtn_warnqueued;
1657 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1658 gtk_widget_show (vbox1);
1659 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1660 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1662 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1663 gtk_widget_show (vbox2);
1664 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1666 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1667 _("Emulate the behavior of mouse operation of\n"
1668 "Emacs-based mailer"));
1669 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1673 (vbox2, checkbtn_openunread,
1674 _("Open first unread message when entering a folder"));
1677 (vbox2, checkbtn_openinbox,
1678 _("Go to inbox after receiving new mail"));
1680 vbox3 = gtk_vbox_new (FALSE, 0);
1681 gtk_widget_show (vbox3);
1682 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1685 (vbox3, checkbtn_immedexec,
1686 _("Execute immediately when moving or deleting messages"));
1688 hbox1 = gtk_hbox_new (FALSE, 0);
1689 gtk_widget_show (hbox1);
1690 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1692 label = gtk_label_new
1693 (_("(Messages will be just marked till execution\n"
1694 " if this is turned off)"));
1695 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1696 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1699 (vbox2, checkbtn_addaddrbyclick,
1700 _("Add address to destination when double-clicked"));
1702 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1704 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1705 gtk_widget_show (vbox_exit);
1706 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1707 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1709 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1710 _("Confirm on exit"));
1712 hbox1 = gtk_hbox_new (FALSE, 32);
1713 gtk_widget_show (hbox1);
1714 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1716 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1717 _("Empty trash on exit"));
1718 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1719 _("Ask before emptying"));
1720 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1722 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1723 _("Warn if there are queued messages"));
1725 interface.checkbtn_emacs = checkbtn_emacs;
1726 interface.checkbtn_openunread = checkbtn_openunread;
1727 interface.checkbtn_openinbox = checkbtn_openinbox;
1728 interface.checkbtn_immedexec = checkbtn_immedexec;
1729 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1730 interface.checkbtn_confonexit = checkbtn_confonexit;
1731 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1732 interface.checkbtn_askonclean = checkbtn_askonclean;
1733 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1736 static void prefs_other_create(void)
1741 GtkWidget *uri_frame;
1742 GtkWidget *uri_label;
1743 GtkWidget *uri_combo;
1744 GtkWidget *uri_entry;
1746 GtkWidget *print_frame;
1747 GtkWidget *printcmd_label;
1748 GtkWidget *printcmd_entry;
1750 GtkWidget *exteditor_frame;
1751 GtkWidget *exteditor_label;
1752 GtkWidget *exteditor_combo;
1753 GtkWidget *exteditor_entry;
1755 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1756 gtk_widget_show (vbox1);
1757 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1758 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1760 PACK_FRAME(vbox1, uri_frame,
1761 _("External Web browser (%s will be replaced with URI)"));
1763 hbox1 = gtk_hbox_new (FALSE, 8);
1764 gtk_widget_show (hbox1);
1765 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1766 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1768 uri_label = gtk_label_new (_("Command"));
1769 gtk_widget_show(uri_label);
1770 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1772 uri_combo = gtk_combo_new ();
1773 gtk_widget_show (uri_combo);
1774 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1775 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1776 "netscape -remote 'openURL(%s,raise)'",
1777 "gnome-moz-remote --raise --newwin '%s'",
1778 "kterm -e w3m '%s'",
1779 "kterm -e lynx '%s'",
1782 uri_entry = GTK_COMBO (uri_combo)->entry;
1784 PACK_FRAME(vbox1, print_frame,
1785 _("Printing (%s will be replaced with file name)"));
1787 hbox1 = gtk_hbox_new (FALSE, 8);
1788 gtk_widget_show (hbox1);
1789 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1790 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1792 printcmd_label = gtk_label_new (_("Command"));
1793 gtk_widget_show (printcmd_label);
1794 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1796 printcmd_entry = gtk_entry_new ();
1797 gtk_widget_show (printcmd_entry);
1798 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1800 PACK_FRAME(vbox1, exteditor_frame,
1801 _("External editor (%s will be replaced with file name)"));
1803 hbox1 = gtk_hbox_new (FALSE, 8);
1804 gtk_widget_show (hbox1);
1805 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1806 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1808 exteditor_label = gtk_label_new (_("Command"));
1809 gtk_widget_show (exteditor_label);
1810 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1812 exteditor_combo = gtk_combo_new ();
1813 gtk_widget_show (exteditor_combo);
1814 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1815 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1817 "mgedit --no-fork %s",
1823 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1825 other.uri_combo = uri_combo;
1826 other.uri_entry = uri_entry;
1827 other.printcmd_entry = printcmd_entry;
1829 other.exteditor_combo = exteditor_combo;
1830 other.exteditor_entry = exteditor_entry;
1833 void prefs_quote_colors_dialog(void)
1835 if (!quote_color_win)
1836 prefs_quote_colors_dialog_create();
1837 gtk_widget_show(quote_color_win);
1840 gtk_widget_hide(quote_color_win);
1842 textview_update_message_colors();
1843 main_window_reflect_prefs_all();
1846 static void prefs_quote_colors_dialog_create(void)
1851 GtkWidget *quotelevel1_label;
1852 GtkWidget *quotelevel2_label;
1853 GtkWidget *quotelevel3_label;
1854 GtkWidget *uri_label;
1857 //GtkWidget *cancel_btn;
1858 GtkWidget *recycle_colors_btn;
1859 GtkWidget *frame_colors;
1861 window = gtk_window_new(GTK_WINDOW_DIALOG);
1862 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1863 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1864 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1865 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1866 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1868 vbox = gtk_vbox_new (FALSE, VSPACING);
1869 gtk_container_add (GTK_CONTAINER (window), vbox);
1870 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1871 PACK_FRAME(vbox, frame_colors, _("Colors"));
1873 table = gtk_table_new (4, 2, FALSE);
1874 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1875 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1876 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1877 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1879 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1881 color_buttons.quote_level1_btn = gtk_button_new();
1882 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1883 (GtkAttachOptions) (0),
1884 (GtkAttachOptions) (0), 0, 0);
1885 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1886 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1888 color_buttons.quote_level2_btn = gtk_button_new();
1889 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1890 (GtkAttachOptions) (0),
1891 (GtkAttachOptions) (0), 0, 0);
1892 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1893 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1895 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1896 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1897 (GtkAttachOptions) (0),
1898 (GtkAttachOptions) (0), 0, 0);
1899 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1900 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1902 color_buttons.uri_btn = gtk_button_new_with_label ("");
1903 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1904 (GtkAttachOptions) (0),
1905 (GtkAttachOptions) (0), 0, 0);
1906 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1907 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1909 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1910 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1911 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1912 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1913 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1915 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1916 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1917 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1918 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1919 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1921 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1922 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1923 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1924 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1925 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1927 uri_label = gtk_label_new (_("URI link"));
1928 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1929 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1930 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1931 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1933 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1934 _("Recycle quote colors"));
1936 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1937 NULL, NULL, NULL, NULL);
1938 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1940 gtk_widget_grab_default(ok_btn);
1941 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1942 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1943 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1944 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1946 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1947 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1948 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1949 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1950 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1951 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1952 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1953 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1954 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1955 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1957 /* show message button colors and recycle options */
1958 set_button_bg_color(color_buttons.quote_level1_btn,
1959 prefs_common.quote_level1_col);
1960 set_button_bg_color(color_buttons.quote_level2_btn,
1961 prefs_common.quote_level2_col);
1962 set_button_bg_color(color_buttons.quote_level3_btn,
1963 prefs_common.quote_level3_col);
1964 set_button_bg_color(color_buttons.uri_btn,
1965 prefs_common.uri_col);
1966 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1967 prefs_common.recycle_quote_colors);
1969 gtk_widget_show_all(vbox);
1970 quote_color_win = window;
1973 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1975 gchar *type = (gchar *)data;
1976 gchar *title = NULL;
1977 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1979 GtkColorSelectionDialog *dialog;
1981 if(g_strcasecmp(type, "LEVEL1") == 0) {
1982 title = _("Pick color for quotation level 1");
1983 rgbvalue = prefs_common.quote_level1_col;
1984 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
1985 title = _("Pick color for quotation level 2");
1986 rgbvalue = prefs_common.quote_level2_col;
1987 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
1988 title = _("Pick color for quotation level 3");
1989 rgbvalue = prefs_common.quote_level3_col;
1990 } else if(g_strcasecmp(type, "URI") == 0) {
1991 title = _("Pick color for URI");
1992 rgbvalue = prefs_common.uri_col;
1993 } else { /* Should never be called */
1994 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
1998 color_dialog = gtk_color_selection_dialog_new(title);
1999 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2000 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2001 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2003 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2004 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2005 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2006 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2008 /* preselect the previous color in the color selection dialog */
2009 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2010 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2011 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2012 dialog = (GtkColorSelectionDialog *)color_dialog;
2013 gtk_color_selection_set_color
2014 ((GtkColorSelection *)dialog->colorsel, color);
2016 gtk_widget_show(color_dialog);
2019 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2021 GtkColorSelection *colorsel = (GtkColorSelection *)
2022 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2024 gint red, green, blue, rgbvalue;
2025 gchar *type = (gchar *)data;
2027 gtk_color_selection_get_color(colorsel, color);
2029 red = (gint) (color[0] * 255.0);
2030 green = (gint) (color[1] * 255.0);
2031 blue = (gint) (color[2] * 255.0);
2032 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2035 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2036 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2037 fprintf(stderr, "Color is %x\n", rgbvalue);
2040 if (g_strcasecmp(type, "LEVEL1") == 0) {
2041 prefs_common.quote_level1_col = rgbvalue;
2042 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2043 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2044 prefs_common.quote_level2_col = rgbvalue;
2045 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2046 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2047 prefs_common.quote_level3_col = rgbvalue;
2048 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2049 } else if (g_strcasecmp(type, "URI") == 0) {
2050 prefs_common.uri_col = rgbvalue;
2051 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2053 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2055 gtk_widget_hide(color_dialog);
2058 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2060 gtk_widget_hide(color_dialog);
2063 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2068 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2069 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2070 newstyle->bg[GTK_STATE_NORMAL] = color;
2071 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2072 newstyle->bg[GTK_STATE_ACTIVE] = color;
2074 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2077 static void prefs_enable_message_color_toggled(void)
2081 is_active = gtk_toggle_button_get_active
2082 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2083 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2084 prefs_common.enable_color = is_active;
2087 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2091 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2092 prefs_common.recycle_quote_colors = is_active;
2095 static void prefs_quote_description(void)
2097 if (!quote_desc_win)
2098 prefs_quote_description_create();
2100 gtk_widget_show(quote_desc_win);
2102 gtk_widget_hide(quote_desc_win);
2105 static void prefs_quote_description_create(void)
2113 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2114 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2115 _("Description of symbols"));
2116 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2117 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2118 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2119 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2121 vbox = gtk_vbox_new(FALSE, 8);
2122 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2124 hbox = gtk_hbox_new(FALSE, 4);
2125 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2127 label = gtk_label_new
2138 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2139 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2141 label = gtk_label_new
2144 "Full Name of Sender\n"
2145 "First Name of Sender\n"
2146 "Initial of Sender\n"
2152 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2153 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2155 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2156 NULL, NULL, NULL, NULL);
2157 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2159 gtk_widget_grab_default(ok_btn);
2160 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2161 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2163 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2164 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2166 gtk_widget_show_all(vbox);
2169 /* functions for setting items of SummaryView */
2171 static struct _SummaryDisplayItem
2175 GtkWidget *chkbtn[N_SUMMARY_COLS];
2178 GtkWidget *cancel_btn;
2181 #define SET_ACTIVE(column, var) \
2182 gtk_toggle_button_set_active \
2183 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2185 #define GET_ACTIVE(column, var) \
2186 prefs_common.var = gtk_toggle_button_get_active \
2187 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2189 void prefs_summary_display_item_set(void)
2191 static gboolean cancelled;
2193 if (!summarydispitem.window)
2194 prefs_summary_display_item_dialog_create(&cancelled);
2195 gtk_widget_grab_focus(summarydispitem.ok_btn);
2196 gtk_widget_show(summarydispitem.window);
2197 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2199 SET_ACTIVE(S_COL_MARK, show_mark);
2200 SET_ACTIVE(S_COL_UNREAD, show_unread);
2201 SET_ACTIVE(S_COL_MIME, show_mime);
2202 SET_ACTIVE(S_COL_NUMBER, show_number);
2203 SET_ACTIVE(S_COL_SIZE, show_size);
2204 SET_ACTIVE(S_COL_DATE, show_date);
2205 SET_ACTIVE(S_COL_FROM, show_from);
2206 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2209 gtk_widget_hide(summarydispitem.window);
2211 if (cancelled != TRUE) {
2212 GET_ACTIVE(S_COL_MARK, show_mark);
2213 GET_ACTIVE(S_COL_UNREAD, show_unread);
2214 GET_ACTIVE(S_COL_MIME, show_mime);
2215 GET_ACTIVE(S_COL_NUMBER, show_number);
2216 GET_ACTIVE(S_COL_SIZE, show_size);
2217 GET_ACTIVE(S_COL_DATE, show_date);
2218 GET_ACTIVE(S_COL_FROM, show_from);
2219 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2221 main_window_reflect_prefs_all();
2225 #define SET_CHECK_BUTTON(column, label) \
2227 summarydispitem.chkbtn[column] = \
2228 gtk_check_button_new_with_label(label); \
2229 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2230 summarydispitem.chkbtn[column], \
2234 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2238 GtkWidget *chkbtn_vbox;
2241 GtkWidget *cancel_btn;
2243 window = gtk_window_new(GTK_WINDOW_DIALOG);
2244 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2245 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2246 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2247 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2248 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2249 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2250 GTK_SIGNAL_FUNC(display_item_delete_event),
2252 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2253 GTK_SIGNAL_FUNC(display_item_key_pressed),
2256 vbox = gtk_vbox_new(FALSE, 8);
2257 gtk_container_add(GTK_CONTAINER(window), vbox);
2259 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2260 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2262 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2263 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2264 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2265 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2266 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2267 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2268 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2269 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2271 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2272 &cancel_btn, _("Cancel"), NULL, NULL);
2273 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2274 gtk_widget_grab_default(ok_btn);
2276 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2277 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2278 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2279 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2281 gtk_widget_show_all(vbox);
2283 summarydispitem.window = window;
2284 summarydispitem.ok_btn = ok_btn;
2285 summarydispitem.cancel_btn = cancel_btn;
2288 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2294 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2300 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2301 gboolean *cancelled)
2309 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2310 gboolean *cancelled)
2312 if (event && event->keyval == GDK_Escape) {
2318 static void prefs_font_select(GtkButton *button)
2320 if (!font_sel_win) {
2321 font_sel_win = gtk_font_selection_dialog_new
2322 (_("Font selection"));
2323 gtk_window_position(GTK_WINDOW(font_sel_win),
2324 GTK_WIN_POS_CENTER);
2325 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2326 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2329 (GTK_OBJECT(font_sel_win), "key_press_event",
2330 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2333 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2335 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2337 gtk_signal_connect_object
2338 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2340 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2341 GTK_OBJECT(font_sel_win));
2344 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2345 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2346 gtk_widget_grab_focus
2347 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2348 gtk_widget_show(font_sel_win);
2351 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2355 if (event && event->keyval == GDK_Escape)
2356 gtk_widget_hide(font_sel_win);
2359 static void prefs_font_selection_ok(GtkButton *button)
2363 fontname = gtk_font_selection_dialog_get_font_name
2364 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2367 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2371 gtk_widget_hide(font_sel_win);
2374 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2377 GtkWidget *menuitem;
2380 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2381 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2382 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2383 g_free(*((gchar **)pparam->data));
2384 *((gchar **)pparam->data) = g_strdup(charset);
2387 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2390 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2392 GtkWidget *menuitem;
2396 g_return_if_fail(optmenu != NULL);
2397 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2399 menu = gtk_option_menu_get_menu(optmenu);
2400 for (cur = GTK_MENU_SHELL(menu)->children;
2401 cur != NULL; cur = cur->next) {
2402 menuitem = GTK_WIDGET(cur->data);
2403 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2404 if (!strcmp(charset, *((gchar **)pparam->data))) {
2405 gtk_option_menu_set_history(optmenu, n);
2411 gtk_option_menu_set_history(optmenu, 0);
2412 prefs_common_charset_set_data_from_optmenu(pparam);
2415 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2418 if (event && event->keyval == GDK_Escape)
2419 gtk_widget_hide(dialog.window);
2422 static void prefs_common_ok(GtkButton *button)
2424 prefs_common_apply(button);
2425 gtk_widget_hide(dialog.window);
2426 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2427 gtk_widget_hide(quote_desc_win);
2430 static void prefs_common_apply(GtkButton *button)
2432 prefs_set_data_from_dialog(param);
2433 main_window_reflect_prefs_all();
2434 prefs_common_save_config();