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_default_encrypt;
131 GtkWidget *checkbtn_default_sign;
132 GtkWidget *checkbtn_auto_check_signatures;
133 GtkWidget *checkbtn_passphrase_grab;
134 GtkWidget *optmenu_default_signkey;
138 static struct Interface {
139 GtkWidget *checkbtn_emacs;
140 GtkWidget *checkbtn_openunread;
141 GtkWidget *checkbtn_openinbox;
142 GtkWidget *checkbtn_immedexec;
143 GtkWidget *checkbtn_confonexit;
144 GtkWidget *checkbtn_cleanonexit;
145 GtkWidget *checkbtn_askonclean;
146 GtkWidget *checkbtn_warnqueued;
147 GtkWidget *checkbtn_addaddrbyclick;
150 static struct Other {
151 GtkWidget *uri_combo;
152 GtkWidget *uri_entry;
153 GtkWidget *printcmd_entry;
154 GtkWidget *exteditor_combo;
155 GtkWidget *exteditor_entry;
158 static struct MessageColorButtons {
159 GtkWidget *quote_level1_btn;
160 GtkWidget *quote_level2_btn;
161 GtkWidget *quote_level3_btn;
165 static GtkWidget *quote_desc_win;
166 static GtkWidget *font_sel_win;
167 static GtkWidget *quote_color_win;
168 static GtkWidget *color_dialog;
170 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
171 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
173 static void prefs_common_default_signkey_set_data_from_optmenu
175 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
179 parameter name, default value, pointer to the prefs variable, data type,
180 pointer to the widget pointer,
181 pointer to the function for data setting,
182 pointer to the function for widget setting
185 static PrefParam param[] = {
187 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
188 &receive.checkbtn_incext,
189 prefs_set_data_from_toggle, prefs_set_toggle},
190 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
191 &receive.entry_incext,
192 prefs_set_data_from_entry, prefs_set_entry},
194 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
195 &receive.checkbtn_local,
196 prefs_set_data_from_toggle, prefs_set_toggle},
197 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
198 &receive.checkbtn_filter_on_inc,
199 prefs_set_data_from_toggle, prefs_set_toggle},
200 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
201 &receive.entry_spool,
202 prefs_set_data_from_entry, prefs_set_entry},
204 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
205 &receive.checkbtn_autochk,
206 prefs_set_data_from_toggle, prefs_set_toggle},
207 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
208 &receive.spinbtn_autochk,
209 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
210 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
211 &receive.checkbtn_chkonstartup,
212 prefs_set_data_from_toggle, prefs_set_toggle},
214 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
215 &receive.spinbtn_maxarticle,
216 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
219 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
220 &send.checkbtn_sendext,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
223 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
224 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
225 &send.checkbtn_savemsg,
226 prefs_set_data_from_toggle, prefs_set_toggle},
227 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
228 &send.checkbtn_queuemsg,
229 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
232 &send.optmenu_charset,
233 prefs_common_charset_set_data_from_optmenu,
234 prefs_common_charset_set_optmenu},
237 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
238 &compose.checkbtn_quote,
239 prefs_set_data_from_toggle, prefs_set_toggle},
240 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
241 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
242 {"quote_format", "On %d\\n%f wrote:\\n\\n",
243 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
244 prefs_set_data_from_text, prefs_set_text},
246 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
247 &compose.checkbtn_autosig,
248 prefs_set_data_from_toggle, prefs_set_toggle},
249 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
250 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
252 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
253 &compose.spinbtn_linewrap,
254 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
255 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
256 &compose.checkbtn_wrapquote,
257 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"linewrap_before_sending", "FALSE",
259 &prefs_common.linewrap_at_send, P_BOOL,
260 &compose.checkbtn_wrapatsend,
261 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
267 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
269 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
270 &prefs_common.textfont, P_STRING,
271 &display.entry_textfont,
272 prefs_set_data_from_entry, prefs_set_entry},
274 {"display_folder_unread_num", "TRUE",
275 &prefs_common.display_folder_unread, P_BOOL,
276 &display.chkbtn_folder_unread,
277 prefs_set_data_from_toggle, prefs_set_toggle},
279 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
280 &display.chkbtn_transhdr,
281 prefs_set_data_from_toggle, prefs_set_toggle},
283 /* Display: Summary View */
284 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
285 &display.chkbtn_swapfrom,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
288 &display.chkbtn_hscrollbar,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
291 P_STRING, &display.entry_datefmt,
292 prefs_set_data_from_entry, prefs_set_entry},
294 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
296 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
298 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
301 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
303 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
305 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
307 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
309 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
311 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
313 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
315 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
319 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
321 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
323 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
325 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
327 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
329 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
331 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
333 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
335 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
337 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
339 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
341 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
343 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
345 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
347 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
349 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
350 P_INT, NULL, NULL, NULL},
351 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
353 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
355 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
357 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
359 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
361 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
363 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
365 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
367 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
369 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
371 {"compose_width", "600", &prefs_common.compose_width, P_INT,
373 {"compose_height", "560", &prefs_common.compose_height, P_INT,
377 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
378 &message.chkbtn_enablecol,
379 prefs_set_data_from_toggle, prefs_set_toggle},
381 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
383 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
385 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
387 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
389 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
391 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
392 P_BOOL, NULL, NULL, NULL},
394 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
395 &message.chkbtn_mbalnum,
396 prefs_set_data_from_toggle, prefs_set_toggle},
397 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
398 P_BOOL, &message.chkbtn_disphdrpane,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
401 &message.chkbtn_disphdr,
402 prefs_set_data_from_toggle, prefs_set_toggle},
403 {"line_space", "2", &prefs_common.line_space, P_INT,
404 &message.spinbtn_linespc,
405 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
406 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
407 &message.chkbtn_headspc,
408 prefs_set_data_from_toggle, prefs_set_toggle},
410 {"enable_smooth_scroll", "FALSE",
411 &prefs_common.enable_smooth_scroll, P_BOOL,
412 &message.chkbtn_smoothscroll,
413 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
415 &message.spinbtn_scrollstep,
416 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
417 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
418 &message.chkbtn_halfpage,
419 prefs_set_data_from_toggle, prefs_set_toggle},
422 {"mime_image_viewer", "display '%s'",
423 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
424 {"mime_audio_player", "play '%s'",
425 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
429 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
430 &privacy.checkbtn_default_encrypt,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
433 &privacy.checkbtn_default_sign,
434 prefs_set_data_from_toggle, prefs_set_toggle},
435 {"auto_check_signatures", "TRUE",
436 &prefs_common.auto_check_signatures, P_BOOL,
437 &privacy.checkbtn_auto_check_signatures,
438 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
441 &privacy.checkbtn_passphrase_grab,
442 prefs_set_data_from_toggle, prefs_set_toggle},
443 #endif /* __MINGW32__ */
444 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
445 &privacy.optmenu_default_signkey,
446 prefs_common_default_signkey_set_data_from_optmenu,
447 prefs_common_default_signkey_set_optmenu},
448 #endif /* USE_GPGME */
451 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
453 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
456 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
457 &interface.checkbtn_emacs,
458 prefs_set_data_from_toggle, prefs_set_toggle},
459 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
460 P_BOOL, &interface.checkbtn_openunread,
461 prefs_set_data_from_toggle, prefs_set_toggle},
462 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
463 P_BOOL, &interface.checkbtn_openinbox,
464 prefs_set_data_from_toggle, prefs_set_toggle},
465 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
466 &interface.checkbtn_immedexec,
467 prefs_set_data_from_toggle, prefs_set_toggle},
468 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
469 P_BOOL, &interface.checkbtn_addaddrbyclick,
470 prefs_set_data_from_toggle, prefs_set_toggle},
472 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
473 &interface.checkbtn_confonexit,
474 prefs_set_data_from_toggle, prefs_set_toggle},
475 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
476 &interface.checkbtn_cleanonexit,
477 prefs_set_data_from_toggle, prefs_set_toggle},
478 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
479 &interface.checkbtn_askonclean,
480 prefs_set_data_from_toggle, prefs_set_toggle},
481 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
482 P_BOOL, &interface.checkbtn_warnqueued,
483 prefs_set_data_from_toggle, prefs_set_toggle},
486 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
487 &prefs_common.uri_cmd, P_STRING,
488 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
489 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
490 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
491 {"ext_editor_command", "gedit %s",
492 &prefs_common.ext_editor_cmd, P_STRING,
493 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
495 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
499 #define VSPACING_NARROW 4
500 #define VBOX_BORDER 16
501 #define DEFAULT_ENTRY_WIDTH 80
502 #define PREFSBUFSIZE 1024
504 /* widget creating functions */
505 static void prefs_common_create (void);
506 static void prefs_receive_create (void);
507 static void prefs_send_create (void);
508 static void prefs_compose_create (void);
509 static void prefs_display_create (void);
510 static void prefs_message_create (void);
512 static void prefs_privacy_create (void);
514 static void prefs_interface_create (void);
515 static void prefs_other_create (void);
517 static void prefs_quote_description (void);
518 static void prefs_quote_description_create (void);
519 static void prefs_quote_colors_dialog (void);
520 static void prefs_quote_colors_dialog_create (void);
521 static void quote_color_set_dialog (GtkWidget *widget,
523 static void quote_colors_set_dialog_ok (GtkWidget *widget,
525 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
527 static void set_button_bg_color (GtkWidget *widget,
529 static void prefs_enable_message_color_toggled (void);
530 static void prefs_recycle_colors_toggled (GtkWidget *widget);
532 /* functions for setting items of SummaryView */
533 static void prefs_summary_display_item_dialog_create
534 (gboolean *cancelled);
535 static void display_item_ok (GtkWidget *widget,
536 gboolean *cancelled);
537 static void display_item_cancel (GtkWidget *widget,
538 gboolean *cancelled);
539 static gint display_item_delete_event (GtkWidget *widget,
541 gboolean *cancelled);
542 static void display_item_key_pressed (GtkWidget *widget,
544 gboolean *cancelled);
546 static void prefs_font_select (GtkButton *button);
547 static void prefs_font_selection_key_pressed (GtkWidget *widget,
550 static void prefs_font_selection_ok (GtkButton *button);
552 static void prefs_common_key_pressed (GtkWidget *widget,
555 static void prefs_common_ok (GtkButton *button);
556 static void prefs_common_apply (GtkButton *button);
558 void prefs_common_read_config(void)
560 prefs_read_config(param, "Common", COMMON_RC);
563 void prefs_common_save_config(void)
565 prefs_save_config(param, "Common", COMMON_RC);
568 void prefs_common_open(void)
570 if (!dialog.window) {
571 prefs_common_create();
574 manage_window_set_transient(GTK_WINDOW(dialog.window));
575 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
576 gtk_widget_grab_focus(dialog.ok_btn);
578 prefs_set_dialog(param);
580 gtk_widget_show(dialog.window);
583 static void prefs_common_create(void)
587 debug_print(_("Creating common preferences window...\n"));
589 prefs_dialog_create(&dialog);
590 gtk_window_set_title (GTK_WINDOW(dialog.window),
591 _("Common Preferences"));
592 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
593 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
594 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
595 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
596 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
597 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
598 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
599 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
600 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
601 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
602 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
603 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
604 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
605 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
606 GTK_OBJECT(dialog.window));
608 /* create all widgets on notebook */
609 prefs_receive_create();
610 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
612 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
613 prefs_compose_create();
614 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
615 prefs_display_create();
616 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
617 prefs_message_create();
618 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
620 prefs_privacy_create();
621 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
623 prefs_interface_create();
624 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
625 prefs_other_create();
626 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
628 gtk_widget_show_all(dialog.window);
631 static void prefs_receive_create(void)
635 GtkWidget *frame_incext;
636 GtkWidget *checkbtn_incext;
638 GtkWidget *label_incext;
639 GtkWidget *entry_incext;
640 GtkWidget *button_incext;
642 GtkWidget *frame_spool;
643 GtkWidget *checkbtn_local;
644 GtkWidget *checkbtn_filter_on_inc;
645 GtkWidget *label_spool;
646 GtkWidget *entry_spool;
648 GtkWidget *hbox_autochk;
649 GtkWidget *checkbtn_autochk;
650 GtkWidget *label_autochk1;
651 GtkObject *spinbtn_autochk_adj;
652 GtkWidget *spinbtn_autochk;
653 GtkWidget *label_autochk2;
654 GtkWidget *checkbtn_chkonstartup;
656 GtkWidget *frame_news;
657 GtkWidget *label_maxarticle;
658 GtkWidget *spinbtn_maxarticle;
659 GtkObject *spinbtn_maxarticle_adj;
661 vbox1 = gtk_vbox_new (FALSE, VSPACING);
662 gtk_widget_show (vbox1);
663 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
664 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
666 PACK_FRAME(vbox1, frame_incext, _("External program"));
668 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
669 gtk_widget_show (vbox2);
670 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
671 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
673 /* Use of external incorporation program */
674 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
675 _("Use external program for incorporation"));
677 hbox = gtk_hbox_new (FALSE, 8);
678 gtk_widget_show (hbox);
679 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
680 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
682 label_incext = gtk_label_new (_("Program path"));
683 gtk_widget_show (label_incext);
684 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
686 entry_incext = gtk_entry_new ();
687 gtk_widget_show (entry_incext);
688 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
690 button_incext = gtk_button_new_with_label ("... ");
691 gtk_widget_show (button_incext);
692 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
694 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
696 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
697 gtk_widget_show (vbox2);
698 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
699 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
701 hbox = gtk_hbox_new (FALSE, 32);
702 gtk_widget_show (hbox);
703 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
705 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
706 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
707 _("Filter on incorporation"));
708 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
710 hbox = gtk_hbox_new (FALSE, 8);
711 gtk_widget_show (hbox);
712 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
713 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
715 label_spool = gtk_label_new (_("Spool directory"));
716 gtk_widget_show (label_spool);
717 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
719 entry_spool = gtk_entry_new ();
720 gtk_widget_show (entry_spool);
721 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
723 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
724 gtk_widget_show (vbox2);
725 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
728 hbox_autochk = gtk_hbox_new (FALSE, 8);
729 gtk_widget_show (hbox_autochk);
730 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
732 gtk_widget_set_sensitive(hbox_autochk, FALSE);
734 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
735 _("Auto-check new mail"));
737 label_autochk1 = gtk_label_new (_("each"));
738 gtk_widget_show (label_autochk1);
739 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
741 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
742 spinbtn_autochk = gtk_spin_button_new
743 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
744 gtk_widget_show (spinbtn_autochk);
745 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
746 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
747 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
749 label_autochk2 = gtk_label_new (_("minute(s)"));
750 gtk_widget_show (label_autochk2);
751 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
753 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
754 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
755 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
757 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
758 _("Check new mail on startup"));
760 PACK_FRAME(vbox1, frame_news, _("News"));
762 hbox = gtk_hbox_new (FALSE, 8);
763 gtk_widget_show (hbox);
764 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
765 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
767 label_maxarticle = gtk_label_new
768 (_("Maximum article number to download\n"
769 "(unlimited if 0 is specified)"));
770 gtk_widget_show (label_maxarticle);
771 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
772 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
774 spinbtn_maxarticle_adj =
775 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
776 spinbtn_maxarticle = gtk_spin_button_new
777 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
778 gtk_widget_show (spinbtn_maxarticle);
779 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
781 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
782 gtk_spin_button_set_numeric
783 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
785 receive.checkbtn_incext = checkbtn_incext;
786 receive.entry_incext = entry_incext;
787 receive.button_incext = button_incext;
789 receive.checkbtn_local = checkbtn_local;
790 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
791 receive.entry_spool = entry_spool;
793 receive.checkbtn_autochk = checkbtn_autochk;
794 receive.spinbtn_autochk = spinbtn_autochk;
795 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
797 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
799 receive.spinbtn_maxarticle = spinbtn_maxarticle;
800 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
803 static void prefs_send_create(void)
807 GtkWidget *frame_sendext;
808 GtkWidget *vbox_sendext;
809 GtkWidget *checkbtn_sendext;
811 GtkWidget *label_sendext;
812 GtkWidget *entry_sendext;
813 GtkWidget *button_sendext;
814 GtkWidget *checkbtn_savemsg;
815 GtkWidget *checkbtn_queuemsg;
816 GtkWidget *label_outcharset;
818 GtkWidget *optmenu_menu;
821 vbox1 = gtk_vbox_new (FALSE, VSPACING);
822 gtk_widget_show (vbox1);
823 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
824 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
826 PACK_FRAME(vbox1, frame_sendext, _("External program"));
828 gtk_widget_set_sensitive(frame_sendext, FALSE);
830 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
831 gtk_widget_show (vbox_sendext);
832 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
833 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
835 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
836 _("Use external program for sending"));
838 hbox1 = gtk_hbox_new (FALSE, 8);
839 gtk_widget_show (hbox1);
840 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
841 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
843 label_sendext = gtk_label_new (_("Program path"));
844 gtk_widget_show (label_sendext);
845 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
847 entry_sendext = gtk_entry_new ();
848 gtk_widget_show (entry_sendext);
849 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
851 button_sendext = gtk_button_new_with_label ("... ");
852 gtk_widget_show (button_sendext);
853 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
855 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
856 gtk_widget_show (vbox2);
857 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
859 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
860 _("Save sent message to outbox"));
861 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
862 _("Queue message that failed to send"));
864 hbox1 = gtk_hbox_new (FALSE, 8);
865 gtk_widget_show (hbox1);
866 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
868 label_outcharset = gtk_label_new (_("Outgoing codeset"));
869 gtk_widget_show (label_outcharset);
870 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
872 optmenu = gtk_option_menu_new ();
873 gtk_widget_show (optmenu);
874 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
876 optmenu_menu = gtk_menu_new ();
878 #define SET_MENUITEM(str, charset) \
880 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
883 SET_MENUITEM(_("Automatic"), CS_AUTO);
884 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
886 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
888 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
890 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
891 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
892 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
893 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
894 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
895 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
896 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
897 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
898 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
899 #endif /* HAVE_LIBJCONV */
900 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
902 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
903 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
906 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
907 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
909 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
910 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
912 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
913 #endif /* HAVE_LIBJCONV */
915 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
917 send.checkbtn_sendext = checkbtn_sendext;
918 send.entry_sendext = entry_sendext;
919 send.button_sendext = button_sendext;
921 send.checkbtn_savemsg = checkbtn_savemsg;
922 send.checkbtn_queuemsg = checkbtn_queuemsg;
924 send.optmenu_charset = optmenu;
927 static void prefs_compose_create(void)
930 GtkWidget *frame_quote;
931 GtkWidget *vbox_quote;
932 GtkWidget *checkbtn_quote;
934 GtkWidget *label_quotemark;
935 GtkWidget *entry_quotemark;
937 GtkWidget *label_quotefmt;
938 GtkWidget *btn_quotedesc;
939 GtkWidget *scrolledwin_quotefmt;
940 GtkWidget *text_quotefmt;
942 GtkWidget *frame_sig;
944 GtkWidget *checkbtn_autosig;
945 GtkWidget *label_sigsep;
946 GtkWidget *entry_sigsep;
948 GtkWidget *vbox_linewrap;
951 GtkWidget *label_linewrap;
952 GtkObject *spinbtn_linewrap_adj;
953 GtkWidget *spinbtn_linewrap;
954 GtkWidget *checkbtn_wrapquote;
955 GtkWidget *checkbtn_wrapatsend;
957 vbox1 = gtk_vbox_new (FALSE, VSPACING);
958 gtk_widget_show (vbox1);
959 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
960 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
962 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
964 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
965 gtk_widget_show (vbox_quote);
966 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
967 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
969 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
970 _("Quote message when replying"));
972 hbox1 = gtk_hbox_new (FALSE, 8);
973 gtk_widget_show (hbox1);
974 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
976 label_quotemark = gtk_label_new (_("Quotation mark"));
977 gtk_widget_show (label_quotemark);
978 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
980 entry_quotemark = gtk_entry_new ();
981 gtk_widget_show (entry_quotemark);
982 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
983 gtk_widget_set_usize (entry_quotemark, 64, -1);
985 hbox2 = gtk_hbox_new (FALSE, 0);
986 gtk_widget_show (hbox2);
987 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
989 label_quotefmt = gtk_label_new (_("Quotation format:"));
990 gtk_widget_show (label_quotefmt);
991 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
994 gtk_button_new_with_label (_(" Description of symbols "));
995 gtk_widget_show (btn_quotedesc);
996 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
997 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
998 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1000 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1001 gtk_widget_show (scrolledwin_quotefmt);
1002 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1003 gtk_scrolled_window_set_policy
1004 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1005 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1007 text_quotefmt = gtk_text_new (NULL, NULL);
1008 gtk_widget_show (text_quotefmt);
1009 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1010 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1011 gtk_widget_set_usize(text_quotefmt, -1, 60);
1013 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1015 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1016 gtk_widget_show (vbox_sig);
1017 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1018 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1020 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1021 _("Insert signature automatically"));
1023 hbox1 = gtk_hbox_new (FALSE, 8);
1024 gtk_widget_show (hbox1);
1025 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1027 label_sigsep = gtk_label_new (_("Signature separator"));
1028 gtk_widget_show (label_sigsep);
1029 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1031 entry_sigsep = gtk_entry_new ();
1032 gtk_widget_show (entry_sigsep);
1033 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1034 gtk_widget_set_usize (entry_sigsep, 64, -1);
1037 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1038 gtk_widget_show (vbox_linewrap);
1039 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1041 hbox3 = gtk_hbox_new (FALSE, 8);
1042 gtk_widget_show (hbox3);
1043 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1045 label_linewrap = gtk_label_new (_("Wrap messages at"));
1046 gtk_widget_show (label_linewrap);
1047 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1049 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1050 spinbtn_linewrap = gtk_spin_button_new
1051 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1052 gtk_widget_show (spinbtn_linewrap);
1053 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1054 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1055 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1057 label_linewrap = gtk_label_new (_("characters"));
1058 gtk_widget_show (label_linewrap);
1059 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1061 hbox4 = gtk_hbox_new (FALSE, 32);
1062 gtk_widget_show (hbox4);
1063 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1065 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1067 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1069 compose.checkbtn_quote = checkbtn_quote;
1070 compose.entry_quotemark = entry_quotemark;
1071 compose.text_quotefmt = text_quotefmt;
1072 compose.checkbtn_autosig = checkbtn_autosig;
1073 compose.entry_sigsep = entry_sigsep;
1075 compose.spinbtn_linewrap = spinbtn_linewrap;
1076 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1077 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1078 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1082 /* alfons - nice ui for darko */
1084 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1086 g_return_if_fail(widget != NULL);
1087 g_return_if_fail(*widget != NULL);
1088 gtk_widget_destroy(*widget);
1092 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1094 g_return_if_fail(widget != NULL);
1095 g_return_if_fail(*widget != NULL);
1100 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1103 struct tm *cal_time;
1106 cur_time = time(NULL);
1107 cal_time = localtime(&cur_time);
1109 text = gtk_editable_get_chars(editable, 0, -1);
1111 strftime(buffer, sizeof buffer, text, cal_time);
1113 gtk_label_set_text(example, buffer);
1116 static GtkWidget *create_date_format(GtkButton *button, void *data)
1118 static GtkWidget *date_format = NULL;
1120 GtkWidget *scrolledwindow1;
1121 GtkWidget *date_format_list;
1140 { "%a", _("the full abbreviated weekday name") },
1141 { "%A", _("the full weekday name") },
1142 { "%b", _("the abbreviated month name") },
1143 { "%B", _("the full month name") },
1144 { "%c", _("the preferred date and time for the current locale") },
1145 { "%C", _("the century number (year/100)") },
1146 { "%d", _("the day of the month as a decimal number") },
1147 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1148 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1149 { "%j", _("the day of the year as a decimal number") },
1150 { "%m", _("the month as a decimal number") },
1151 { "%M", _("the minute as a decimal number") },
1152 { "%p", _("either AM or PM") },
1153 { "%S", _("the second as a decimal number") },
1154 { "%w", _("the day of the week as a decimal number") },
1155 { "%x", _("the preferred date for the current locale") },
1156 { "%y", _("the last two digits of a year") },
1157 { "%Y", _("the year as a decimal number") },
1158 { "%Z", _("the time zone or name or abbreviation") }
1161 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1163 if (date_format) return date_format;
1165 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1166 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1167 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1168 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1170 vbox1 = gtk_vbox_new(FALSE, 10);
1171 gtk_widget_show(vbox1);
1172 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1174 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1175 gtk_widget_show(scrolledwindow1);
1176 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1178 date_format_list = gtk_clist_new(2);
1179 gtk_widget_show(date_format_list);
1180 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1181 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1182 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1183 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1185 label3 = gtk_label_new(_("Date Format"));
1186 gtk_widget_show(label3);
1187 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1189 label4 = gtk_label_new(_("Date Format Description"));
1190 gtk_widget_show(label4);
1191 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1193 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1195 /* phoney casting necessary because of gtk... */
1196 text[0] = (gchar *) time_format[tmp].fmt;
1197 text[1] = (gchar *) time_format[tmp].txt;
1199 gtk_clist_append(GTK_CLIST(date_format_list), text);
1202 table2 = gtk_table_new(1, 1, TRUE);
1203 gtk_widget_show(table2);
1204 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1206 vbox2 = gtk_vbox_new(FALSE, 0);
1207 gtk_widget_show(vbox2);
1208 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1209 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1210 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1212 vbox3 = gtk_vbox_new(TRUE, 4);
1213 gtk_widget_show(vbox3);
1214 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1216 hbox2 = gtk_hbox_new(FALSE, 0);
1217 gtk_widget_show(hbox2);
1218 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1220 label5 = gtk_label_new(_("Date format"));
1221 gtk_widget_show(label5);
1222 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1223 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1225 entry1 = gtk_entry_new_with_max_length(300);
1226 gtk_widget_show(entry1);
1227 gtk_box_pack_start(GTK_BOX(hbox2), entry1, TRUE, TRUE, 40);
1229 hbox1 = gtk_hbox_new(FALSE, 0);
1230 gtk_widget_show(hbox1);
1231 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1233 label6 = gtk_label_new(_("Example"));
1234 gtk_widget_show(label6);
1235 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1236 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1238 label7 = gtk_label_new(_("label7"));
1239 gtk_widget_show(label7);
1240 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1241 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1243 hbox3 = gtk_hbox_new(TRUE, 0);
1244 gtk_widget_show(hbox3);
1245 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1247 button1 = gtk_button_new_with_label(_("Close"));
1248 gtk_widget_show(button1);
1249 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1251 /* set the current format */
1252 gtk_entry_set_text(GTK_ENTRY(entry1), prefs_common.date_format);
1253 date_format_entry_on_change(GTK_EDITABLE(entry1), GTK_LABEL(label7));
1255 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1256 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1258 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1259 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1261 gtk_signal_connect(GTK_OBJECT(entry1), "changed",
1262 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1264 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1265 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1267 gtk_widget_show(date_format);
1271 static void prefs_display_create(void)
1274 GtkWidget *frame_font;
1276 GtkWidget *label_textfont;
1277 GtkWidget *entry_textfont;
1278 GtkWidget *button_textfont;
1279 GtkWidget *chkbtn_folder_unread;
1280 GtkWidget *chkbtn_transhdr;
1281 GtkWidget *frame_summary;
1283 GtkWidget *chkbtn_swapfrom;
1284 GtkWidget *chkbtn_hscrollbar;
1286 GtkWidget *label_datefmt;
1287 GtkWidget *entry_datefmt;
1288 GtkWidget *button_dispitem;
1289 GtkWidget *button_headers_display;
1291 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1292 gtk_widget_show (vbox1);
1293 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1294 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1296 PACK_FRAME(vbox1, frame_font, _("Font"));
1298 table1 = gtk_table_new (1, 3, FALSE);
1299 gtk_widget_show (table1);
1300 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1301 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1302 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1303 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1305 label_textfont = gtk_label_new (_("Text"));
1306 gtk_widget_show (label_textfont);
1307 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1308 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1310 entry_textfont = gtk_entry_new ();
1311 gtk_widget_show (entry_textfont);
1312 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1313 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1315 button_textfont = gtk_button_new_with_label ("... ");
1316 gtk_widget_show (button_textfont);
1317 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1319 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1320 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1322 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1323 gtk_widget_show (vbox2);
1324 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1327 (vbox2, chkbtn_transhdr,
1328 _("Translate header name (such as `From:', `Subject:')"));
1330 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1331 _("Display unread number next to folder name"));
1333 /* ---- Summary ---- */
1335 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1337 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1338 gtk_widget_show (vbox2);
1339 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1340 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1343 (vbox2, chkbtn_swapfrom,
1344 _("Display recipient on `From' column if sender is yourself"));
1346 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1348 hbox1 = gtk_hbox_new (FALSE, 8);
1349 gtk_widget_show (hbox1);
1350 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1352 label_datefmt = gtk_button_new_with_label (_("Date format"));
1353 gtk_widget_show (label_datefmt);
1354 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1355 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1356 GTK_SIGNAL_FUNC(create_date_format), NULL);
1358 entry_datefmt = gtk_entry_new ();
1359 gtk_widget_show (entry_datefmt);
1360 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1362 hbox1 = gtk_hbox_new (FALSE, 8);
1363 gtk_widget_show (hbox1);
1364 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1366 button_dispitem = gtk_button_new_with_label
1367 (_(" Set display item of summary... "));
1368 gtk_widget_show (button_dispitem);
1369 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1370 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1371 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1374 hbox1 = gtk_hbox_new (FALSE, 8);
1375 gtk_widget_show (hbox1);
1376 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1378 button_headers_display = gtk_button_new_with_label
1379 (_(" Set displaying of headers... "));
1380 gtk_widget_show (button_headers_display);
1381 gtk_box_pack_start (GTK_BOX (hbox1), button_headers_display, FALSE,
1383 gtk_signal_connect (GTK_OBJECT (button_headers_display), "clicked",
1384 GTK_SIGNAL_FUNC (prefs_display_headers_open),
1387 display.entry_textfont = entry_textfont;
1388 display.button_textfont = button_textfont;
1390 display.chkbtn_folder_unread = chkbtn_folder_unread;
1391 display.chkbtn_transhdr = chkbtn_transhdr;
1393 display.chkbtn_swapfrom = chkbtn_swapfrom;
1394 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1395 display.entry_datefmt = entry_datefmt;
1398 static void prefs_message_create(void)
1403 GtkWidget *chkbtn_enablecol;
1404 GtkWidget *button_edit_col;
1405 GtkWidget *chkbtn_mbalnum;
1406 GtkWidget *chkbtn_disphdrpane;
1407 GtkWidget *chkbtn_disphdr;
1408 GtkWidget *hbox_linespc;
1409 GtkWidget *label_linespc;
1410 GtkObject *spinbtn_linespc_adj;
1411 GtkWidget *spinbtn_linespc;
1412 GtkWidget *chkbtn_headspc;
1414 GtkWidget *frame_scr;
1415 GtkWidget *vbox_scr;
1416 GtkWidget *chkbtn_smoothscroll;
1417 GtkWidget *hbox_scr;
1418 GtkWidget *label_scr;
1419 GtkObject *spinbtn_scrollstep_adj;
1420 GtkWidget *spinbtn_scrollstep;
1421 GtkWidget *chkbtn_halfpage;
1423 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1424 gtk_widget_show (vbox1);
1425 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1426 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1428 hbox1 = gtk_hbox_new (FALSE, 8);
1429 gtk_widget_show (hbox1);
1430 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1432 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1433 _("Enable coloration of message"));
1434 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1435 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1438 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1439 gtk_widget_show (button_edit_col);
1440 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1441 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1442 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1444 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1446 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1447 gtk_widget_show (vbox2);
1448 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1451 (vbox2, chkbtn_mbalnum,
1452 _("Display 2-byte alphabet and numeric with 1-byte character"));
1453 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1454 _("Display header pane above message view"));
1455 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1456 _("Display short headers on message view"));
1458 hbox1 = gtk_hbox_new (FALSE, 32);
1459 gtk_widget_show (hbox1);
1460 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1462 hbox_linespc = gtk_hbox_new (FALSE, 8);
1463 gtk_widget_show (hbox1);
1464 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1466 label_linespc = gtk_label_new (_("Line space"));
1467 gtk_widget_show (label_linespc);
1468 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1471 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1472 spinbtn_linespc = gtk_spin_button_new
1473 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1474 gtk_widget_show (spinbtn_linespc);
1475 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1477 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1478 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1480 label_linespc = gtk_label_new (_("pixel(s)"));
1481 gtk_widget_show (label_linespc);
1482 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1485 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1487 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1489 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1490 gtk_widget_show (vbox_scr);
1491 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1492 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1494 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1496 hbox1 = gtk_hbox_new (FALSE, 32);
1497 gtk_widget_show (hbox1);
1498 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1500 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1502 hbox_scr = gtk_hbox_new (FALSE, 8);
1503 gtk_widget_show (hbox_scr);
1504 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1506 label_scr = gtk_label_new (_("Step"));
1507 gtk_widget_show (label_scr);
1508 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1510 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1511 spinbtn_scrollstep = gtk_spin_button_new
1512 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1513 gtk_widget_show (spinbtn_scrollstep);
1514 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1516 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1517 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1520 label_scr = gtk_label_new (_("pixel(s)"));
1521 gtk_widget_show (label_scr);
1522 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1524 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1526 message.chkbtn_enablecol = chkbtn_enablecol;
1527 message.button_edit_col = button_edit_col;
1528 message.chkbtn_mbalnum = chkbtn_mbalnum;
1529 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1530 message.chkbtn_disphdr = chkbtn_disphdr;
1531 message.spinbtn_linespc = spinbtn_linespc;
1532 message.chkbtn_headspc = chkbtn_headspc;
1534 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1535 message.spinbtn_scrollstep = spinbtn_scrollstep;
1536 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1537 message.chkbtn_halfpage = chkbtn_halfpage;
1541 static void prefs_privacy_create(void)
1546 GtkWidget *checkbtn_default_encrypt;
1547 GtkWidget *checkbtn_default_sign;
1548 GtkWidget *checkbtn_auto_check_signatures;
1549 GtkWidget *checkbtn_passphrase_grab;
1551 GtkWidget *menuitem;
1553 GtkWidget *optmenu_menu;
1555 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1556 gtk_widget_show (vbox1);
1557 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1558 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1560 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1561 gtk_widget_show (vbox2);
1562 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1564 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1565 _("Encrypt message by default"));
1567 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1568 _("Sign message by default"));
1570 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1571 _("Automatically check signatures"));
1574 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1575 _("Grab input while entering a passphrase"));
1578 hbox1 = gtk_hbox_new (FALSE, 8);
1579 gtk_widget_show (hbox1);
1580 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1582 /* create default signkey box */
1583 label = gtk_label_new (_("Default Sign Key"));
1584 gtk_widget_show (label);
1585 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1586 optmenu = gtk_option_menu_new ();
1587 gtk_widget_show (optmenu);
1588 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1589 optmenu_menu = gtk_menu_new ();
1591 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1592 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1593 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1594 /* FIXME: disabled because not implemented */
1595 gtk_widget_set_sensitive(optmenu, FALSE);
1597 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1598 privacy.checkbtn_default_sign = checkbtn_default_sign;
1599 privacy.checkbtn_auto_check_signatures
1600 = checkbtn_auto_check_signatures;
1601 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1602 privacy.optmenu_default_signkey = optmenu;
1606 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1610 GtkWidget *menuitem;
1613 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1614 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1615 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1616 g_free(*((gchar **)pparam->data));
1617 *((gchar **)pparam->data) = g_strdup(charset);
1621 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1625 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1627 GtkWidget *menuitem;
1631 g_return_if_fail(optmenu != NULL);
1632 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1634 menu = gtk_option_menu_get_menu(optmenu);
1635 for (cur = GTK_MENU_SHELL(menu)->children;
1636 cur != NULL; cur = cur->next) {
1637 menuitem = GTK_WIDGET(cur->data);
1638 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1639 if (!strcmp(charset, *((gchar **)pparam->data))) {
1640 gtk_option_menu_set_history(optmenu, n);
1646 gtk_option_menu_set_history(optmenu, 0);
1647 prefs_common_charset_set_data_from_optmenu(pparam);
1650 #endif /* USE_GPGME */
1652 static void prefs_interface_create(void)
1657 GtkWidget *checkbtn_emacs;
1658 GtkWidget *checkbtn_openunread;
1659 GtkWidget *checkbtn_openinbox;
1660 GtkWidget *checkbtn_immedexec;
1661 GtkWidget *checkbtn_addaddrbyclick;
1664 GtkWidget *frame_exit;
1665 GtkWidget *vbox_exit;
1667 GtkWidget *checkbtn_confonexit;
1668 GtkWidget *checkbtn_cleanonexit;
1669 GtkWidget *checkbtn_askonclean;
1670 GtkWidget *checkbtn_warnqueued;
1672 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1673 gtk_widget_show (vbox1);
1674 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1675 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1677 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1678 gtk_widget_show (vbox2);
1679 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1681 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1682 _("Emulate the behavior of mouse operation of\n"
1683 "Emacs-based mailer"));
1684 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1688 (vbox2, checkbtn_openunread,
1689 _("Open first unread message when entering a folder"));
1692 (vbox2, checkbtn_openinbox,
1693 _("Go to inbox after receiving new mail"));
1695 vbox3 = gtk_vbox_new (FALSE, 0);
1696 gtk_widget_show (vbox3);
1697 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1700 (vbox3, checkbtn_immedexec,
1701 _("Execute immediately when moving or deleting messages"));
1703 hbox1 = gtk_hbox_new (FALSE, 0);
1704 gtk_widget_show (hbox1);
1705 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1707 label = gtk_label_new
1708 (_("(Messages will be just marked till execution\n"
1709 " if this is turned off)"));
1710 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1711 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1714 (vbox2, checkbtn_addaddrbyclick,
1715 _("Add address to destination when double-clicked"));
1717 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1719 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1720 gtk_widget_show (vbox_exit);
1721 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1722 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1724 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1725 _("Confirm on exit"));
1727 hbox1 = gtk_hbox_new (FALSE, 32);
1728 gtk_widget_show (hbox1);
1729 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1731 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1732 _("Empty trash on exit"));
1733 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1734 _("Ask before emptying"));
1735 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1737 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1738 _("Warn if there are queued messages"));
1740 interface.checkbtn_emacs = checkbtn_emacs;
1741 interface.checkbtn_openunread = checkbtn_openunread;
1742 interface.checkbtn_openinbox = checkbtn_openinbox;
1743 interface.checkbtn_immedexec = checkbtn_immedexec;
1744 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1745 interface.checkbtn_confonexit = checkbtn_confonexit;
1746 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1747 interface.checkbtn_askonclean = checkbtn_askonclean;
1748 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1751 static void prefs_other_create(void)
1756 GtkWidget *uri_frame;
1757 GtkWidget *uri_label;
1758 GtkWidget *uri_combo;
1759 GtkWidget *uri_entry;
1761 GtkWidget *print_frame;
1762 GtkWidget *printcmd_label;
1763 GtkWidget *printcmd_entry;
1765 GtkWidget *exteditor_frame;
1766 GtkWidget *exteditor_label;
1767 GtkWidget *exteditor_combo;
1768 GtkWidget *exteditor_entry;
1770 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1771 gtk_widget_show (vbox1);
1772 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1773 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1775 PACK_FRAME(vbox1, uri_frame,
1776 _("External Web browser (%s will be replaced with URI)"));
1778 hbox1 = gtk_hbox_new (FALSE, 8);
1779 gtk_widget_show (hbox1);
1780 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1781 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1783 uri_label = gtk_label_new (_("Command"));
1784 gtk_widget_show(uri_label);
1785 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1787 uri_combo = gtk_combo_new ();
1788 gtk_widget_show (uri_combo);
1789 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1790 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1791 "netscape -remote 'openURL(%s,raise)'",
1792 "gnome-moz-remote --raise --newwin '%s'",
1793 "kterm -e w3m '%s'",
1794 "kterm -e lynx '%s'",
1797 uri_entry = GTK_COMBO (uri_combo)->entry;
1799 PACK_FRAME(vbox1, print_frame,
1800 _("Printing (%s will be replaced with file name)"));
1802 hbox1 = gtk_hbox_new (FALSE, 8);
1803 gtk_widget_show (hbox1);
1804 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1805 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1807 printcmd_label = gtk_label_new (_("Command"));
1808 gtk_widget_show (printcmd_label);
1809 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1811 printcmd_entry = gtk_entry_new ();
1812 gtk_widget_show (printcmd_entry);
1813 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1815 PACK_FRAME(vbox1, exteditor_frame,
1816 _("External editor (%s will be replaced with file name)"));
1818 hbox1 = gtk_hbox_new (FALSE, 8);
1819 gtk_widget_show (hbox1);
1820 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1821 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1823 exteditor_label = gtk_label_new (_("Command"));
1824 gtk_widget_show (exteditor_label);
1825 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1827 exteditor_combo = gtk_combo_new ();
1828 gtk_widget_show (exteditor_combo);
1829 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1830 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1832 "mgedit --no-fork %s",
1838 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1840 other.uri_combo = uri_combo;
1841 other.uri_entry = uri_entry;
1842 other.printcmd_entry = printcmd_entry;
1844 other.exteditor_combo = exteditor_combo;
1845 other.exteditor_entry = exteditor_entry;
1848 void prefs_quote_colors_dialog(void)
1850 if (!quote_color_win)
1851 prefs_quote_colors_dialog_create();
1852 gtk_widget_show(quote_color_win);
1855 gtk_widget_hide(quote_color_win);
1857 textview_update_message_colors();
1858 main_window_reflect_prefs_all();
1861 static void prefs_quote_colors_dialog_create(void)
1866 GtkWidget *quotelevel1_label;
1867 GtkWidget *quotelevel2_label;
1868 GtkWidget *quotelevel3_label;
1869 GtkWidget *uri_label;
1872 //GtkWidget *cancel_btn;
1873 GtkWidget *recycle_colors_btn;
1874 GtkWidget *frame_colors;
1876 window = gtk_window_new(GTK_WINDOW_DIALOG);
1877 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1878 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1879 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1880 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1881 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1883 vbox = gtk_vbox_new (FALSE, VSPACING);
1884 gtk_container_add (GTK_CONTAINER (window), vbox);
1885 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1886 PACK_FRAME(vbox, frame_colors, _("Colors"));
1888 table = gtk_table_new (4, 2, FALSE);
1889 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1890 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1891 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1892 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1894 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1896 color_buttons.quote_level1_btn = gtk_button_new();
1897 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1898 (GtkAttachOptions) (0),
1899 (GtkAttachOptions) (0), 0, 0);
1900 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1901 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1903 color_buttons.quote_level2_btn = gtk_button_new();
1904 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1905 (GtkAttachOptions) (0),
1906 (GtkAttachOptions) (0), 0, 0);
1907 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1908 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1910 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1911 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1912 (GtkAttachOptions) (0),
1913 (GtkAttachOptions) (0), 0, 0);
1914 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1915 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1917 color_buttons.uri_btn = gtk_button_new_with_label ("");
1918 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1919 (GtkAttachOptions) (0),
1920 (GtkAttachOptions) (0), 0, 0);
1921 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1922 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1924 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1925 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1926 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1927 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1928 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1930 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1931 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1932 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1933 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1934 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1936 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1937 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1938 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1939 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1940 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1942 uri_label = gtk_label_new (_("URI link"));
1943 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1944 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1945 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1946 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1948 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1949 _("Recycle quote colors"));
1951 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1952 NULL, NULL, NULL, NULL);
1953 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1955 gtk_widget_grab_default(ok_btn);
1956 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1957 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1958 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1959 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1961 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1962 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1963 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1964 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1965 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1966 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1967 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1968 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1969 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1970 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1972 /* show message button colors and recycle options */
1973 set_button_bg_color(color_buttons.quote_level1_btn,
1974 prefs_common.quote_level1_col);
1975 set_button_bg_color(color_buttons.quote_level2_btn,
1976 prefs_common.quote_level2_col);
1977 set_button_bg_color(color_buttons.quote_level3_btn,
1978 prefs_common.quote_level3_col);
1979 set_button_bg_color(color_buttons.uri_btn,
1980 prefs_common.uri_col);
1981 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
1982 prefs_common.recycle_quote_colors);
1984 gtk_widget_show_all(vbox);
1985 quote_color_win = window;
1988 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
1990 gchar *type = (gchar *)data;
1991 gchar *title = NULL;
1992 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
1994 GtkColorSelectionDialog *dialog;
1996 if(g_strcasecmp(type, "LEVEL1") == 0) {
1997 title = _("Pick color for quotation level 1");
1998 rgbvalue = prefs_common.quote_level1_col;
1999 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2000 title = _("Pick color for quotation level 2");
2001 rgbvalue = prefs_common.quote_level2_col;
2002 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2003 title = _("Pick color for quotation level 3");
2004 rgbvalue = prefs_common.quote_level3_col;
2005 } else if(g_strcasecmp(type, "URI") == 0) {
2006 title = _("Pick color for URI");
2007 rgbvalue = prefs_common.uri_col;
2008 } else { /* Should never be called */
2009 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2013 color_dialog = gtk_color_selection_dialog_new(title);
2014 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2015 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2016 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2018 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2019 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2020 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2021 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2023 /* preselect the previous color in the color selection dialog */
2024 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2025 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2026 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2027 dialog = (GtkColorSelectionDialog *)color_dialog;
2028 gtk_color_selection_set_color
2029 ((GtkColorSelection *)dialog->colorsel, color);
2031 gtk_widget_show(color_dialog);
2034 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2036 GtkColorSelection *colorsel = (GtkColorSelection *)
2037 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2039 gint red, green, blue, rgbvalue;
2040 gchar *type = (gchar *)data;
2042 gtk_color_selection_get_color(colorsel, color);
2044 red = (gint) (color[0] * 255.0);
2045 green = (gint) (color[1] * 255.0);
2046 blue = (gint) (color[2] * 255.0);
2047 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2050 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2051 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2052 fprintf(stderr, "Color is %x\n", rgbvalue);
2055 if (g_strcasecmp(type, "LEVEL1") == 0) {
2056 prefs_common.quote_level1_col = rgbvalue;
2057 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2058 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2059 prefs_common.quote_level2_col = rgbvalue;
2060 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2061 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2062 prefs_common.quote_level3_col = rgbvalue;
2063 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2064 } else if (g_strcasecmp(type, "URI") == 0) {
2065 prefs_common.uri_col = rgbvalue;
2066 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2068 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2070 gtk_widget_hide(color_dialog);
2073 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2075 gtk_widget_hide(color_dialog);
2078 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2083 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2084 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2085 newstyle->bg[GTK_STATE_NORMAL] = color;
2086 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2087 newstyle->bg[GTK_STATE_ACTIVE] = color;
2089 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2092 static void prefs_enable_message_color_toggled(void)
2096 is_active = gtk_toggle_button_get_active
2097 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2098 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2099 prefs_common.enable_color = is_active;
2102 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2106 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2107 prefs_common.recycle_quote_colors = is_active;
2110 static void prefs_quote_description(void)
2112 if (!quote_desc_win)
2113 prefs_quote_description_create();
2115 gtk_widget_show(quote_desc_win);
2117 gtk_widget_hide(quote_desc_win);
2120 static void prefs_quote_description_create(void)
2128 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2129 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2130 _("Description of symbols"));
2131 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2132 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2133 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2134 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2136 vbox = gtk_vbox_new(FALSE, 8);
2137 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2139 hbox = gtk_hbox_new(FALSE, 4);
2140 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2142 label = gtk_label_new
2153 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2154 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2156 label = gtk_label_new
2159 "Full Name of Sender\n"
2160 "First Name of Sender\n"
2161 "Initial of Sender\n"
2167 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2168 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2170 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2171 NULL, NULL, NULL, NULL);
2172 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2174 gtk_widget_grab_default(ok_btn);
2175 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2176 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2178 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2179 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2181 gtk_widget_show_all(vbox);
2184 /* functions for setting items of SummaryView */
2186 static struct _SummaryDisplayItem
2190 GtkWidget *chkbtn[N_SUMMARY_COLS];
2193 GtkWidget *cancel_btn;
2196 #define SET_ACTIVE(column, var) \
2197 gtk_toggle_button_set_active \
2198 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2200 #define GET_ACTIVE(column, var) \
2201 prefs_common.var = gtk_toggle_button_get_active \
2202 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2204 void prefs_summary_display_item_set(void)
2206 static gboolean cancelled;
2208 if (!summarydispitem.window)
2209 prefs_summary_display_item_dialog_create(&cancelled);
2210 gtk_widget_grab_focus(summarydispitem.ok_btn);
2211 gtk_widget_show(summarydispitem.window);
2212 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2214 SET_ACTIVE(S_COL_MARK, show_mark);
2215 SET_ACTIVE(S_COL_UNREAD, show_unread);
2216 SET_ACTIVE(S_COL_MIME, show_mime);
2217 SET_ACTIVE(S_COL_NUMBER, show_number);
2218 SET_ACTIVE(S_COL_SIZE, show_size);
2219 SET_ACTIVE(S_COL_DATE, show_date);
2220 SET_ACTIVE(S_COL_FROM, show_from);
2221 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2224 gtk_widget_hide(summarydispitem.window);
2226 if (cancelled != TRUE) {
2227 GET_ACTIVE(S_COL_MARK, show_mark);
2228 GET_ACTIVE(S_COL_UNREAD, show_unread);
2229 GET_ACTIVE(S_COL_MIME, show_mime);
2230 GET_ACTIVE(S_COL_NUMBER, show_number);
2231 GET_ACTIVE(S_COL_SIZE, show_size);
2232 GET_ACTIVE(S_COL_DATE, show_date);
2233 GET_ACTIVE(S_COL_FROM, show_from);
2234 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2236 main_window_reflect_prefs_all();
2240 #define SET_CHECK_BUTTON(column, label) \
2242 summarydispitem.chkbtn[column] = \
2243 gtk_check_button_new_with_label(label); \
2244 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2245 summarydispitem.chkbtn[column], \
2249 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2253 GtkWidget *chkbtn_vbox;
2256 GtkWidget *cancel_btn;
2258 window = gtk_window_new(GTK_WINDOW_DIALOG);
2259 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2260 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2261 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2262 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2263 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2264 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2265 GTK_SIGNAL_FUNC(display_item_delete_event),
2267 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2268 GTK_SIGNAL_FUNC(display_item_key_pressed),
2271 vbox = gtk_vbox_new(FALSE, 8);
2272 gtk_container_add(GTK_CONTAINER(window), vbox);
2274 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2275 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2277 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2278 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2279 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2280 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2281 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2282 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2283 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2284 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2286 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2287 &cancel_btn, _("Cancel"), NULL, NULL);
2288 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2289 gtk_widget_grab_default(ok_btn);
2291 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2292 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2293 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2294 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2296 gtk_widget_show_all(vbox);
2298 summarydispitem.window = window;
2299 summarydispitem.ok_btn = ok_btn;
2300 summarydispitem.cancel_btn = cancel_btn;
2303 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2309 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2315 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2316 gboolean *cancelled)
2324 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2325 gboolean *cancelled)
2327 if (event && event->keyval == GDK_Escape) {
2333 static void prefs_font_select(GtkButton *button)
2335 if (!font_sel_win) {
2336 font_sel_win = gtk_font_selection_dialog_new
2337 (_("Font selection"));
2338 gtk_window_position(GTK_WINDOW(font_sel_win),
2339 GTK_WIN_POS_CENTER);
2340 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2341 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2344 (GTK_OBJECT(font_sel_win), "key_press_event",
2345 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2348 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2350 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2352 gtk_signal_connect_object
2353 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2355 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2356 GTK_OBJECT(font_sel_win));
2359 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2360 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2361 gtk_widget_grab_focus
2362 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2363 gtk_widget_show(font_sel_win);
2366 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2370 if (event && event->keyval == GDK_Escape)
2371 gtk_widget_hide(font_sel_win);
2374 static void prefs_font_selection_ok(GtkButton *button)
2378 fontname = gtk_font_selection_dialog_get_font_name
2379 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2382 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2386 gtk_widget_hide(font_sel_win);
2389 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2392 GtkWidget *menuitem;
2395 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2396 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2397 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2398 g_free(*((gchar **)pparam->data));
2399 *((gchar **)pparam->data) = g_strdup(charset);
2402 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2405 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2407 GtkWidget *menuitem;
2411 g_return_if_fail(optmenu != NULL);
2412 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2414 menu = gtk_option_menu_get_menu(optmenu);
2415 for (cur = GTK_MENU_SHELL(menu)->children;
2416 cur != NULL; cur = cur->next) {
2417 menuitem = GTK_WIDGET(cur->data);
2418 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2419 if (!strcmp(charset, *((gchar **)pparam->data))) {
2420 gtk_option_menu_set_history(optmenu, n);
2426 gtk_option_menu_set_history(optmenu, 0);
2427 prefs_common_charset_set_data_from_optmenu(pparam);
2430 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2433 if (event && event->keyval == GDK_Escape)
2434 gtk_widget_hide(dialog.window);
2437 static void prefs_common_ok(GtkButton *button)
2439 prefs_common_apply(button);
2440 gtk_widget_hide(dialog.window);
2441 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2442 gtk_widget_hide(quote_desc_win);
2445 static void prefs_common_apply(GtkButton *button)
2447 prefs_set_data_from_dialog(param);
2448 main_window_reflect_prefs_all();
2449 prefs_common_save_config();