2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "mainwindow.h"
41 #include "summaryview.h"
42 #include "messageview.h"
43 #include "manage_window.h"
48 #include "alertpanel.h"
50 #include "prefs_display_headers.h"
52 PrefsCommon prefs_common;
54 static PrefsDialog dialog;
56 static struct Receive {
57 GtkWidget *checkbtn_incext;
58 GtkWidget *entry_incext;
59 GtkWidget *button_incext;
61 GtkWidget *checkbtn_local;
62 GtkWidget *checkbtn_filter_on_inc;
63 GtkWidget *entry_spool;
65 GtkWidget *checkbtn_autochk;
66 GtkWidget *spinbtn_autochk;
67 GtkObject *spinbtn_autochk_adj;
69 GtkWidget *checkbtn_chkonstartup;
71 GtkWidget *spinbtn_maxarticle;
72 GtkObject *spinbtn_maxarticle_adj;
76 GtkWidget *checkbtn_sendext;
77 GtkWidget *entry_sendext;
78 GtkWidget *button_sendext;
80 GtkWidget *checkbtn_savemsg;
81 GtkWidget *checkbtn_queuemsg;
83 GtkWidget *optmenu_charset;
86 static struct Compose {
87 GtkWidget *checkbtn_quote;
88 GtkWidget *entry_quotemark;
89 GtkWidget *text_quotefmt;
90 GtkWidget *checkbtn_autosig;
91 GtkWidget *entry_sigsep;
93 GtkWidget *spinbtn_linewrap;
94 GtkObject *spinbtn_linewrap_adj;
95 GtkWidget *checkbtn_wrapquote;
96 GtkWidget *checkbtn_wrapatsend;
99 static struct Display {
100 GtkWidget *entry_textfont;
101 GtkWidget *button_textfont;
103 GtkWidget *chkbtn_folder_unread;
105 GtkWidget *chkbtn_transhdr;
107 GtkWidget *chkbtn_swapfrom;
108 GtkWidget *chkbtn_hscrollbar;
109 GtkWidget *entry_datefmt;
112 static struct Message {
113 GtkWidget *chkbtn_enablecol;
114 GtkWidget *button_edit_col;
115 GtkWidget *chkbtn_mbalnum;
116 GtkWidget *chkbtn_disphdrpane;
117 GtkWidget *chkbtn_disphdr;
118 GtkWidget *spinbtn_linespc;
119 GtkObject *spinbtn_linespc_adj;
120 GtkWidget *chkbtn_headspc;
122 GtkWidget *chkbtn_smoothscroll;
123 GtkWidget *spinbtn_scrollstep;
124 GtkObject *spinbtn_scrollstep_adj;
125 GtkWidget *chkbtn_halfpage;
129 static struct Privacy {
130 GtkWidget *checkbtn_gpgme_warning;
131 GtkWidget *checkbtn_default_encrypt;
132 GtkWidget *checkbtn_default_sign;
133 GtkWidget *checkbtn_auto_check_signatures;
134 GtkWidget *checkbtn_passphrase_grab;
135 GtkWidget *optmenu_default_signkey;
139 static struct Interface {
140 GtkWidget *checkbtn_emacs;
141 GtkWidget *checkbtn_openunread;
142 GtkWidget *checkbtn_openinbox;
143 GtkWidget *checkbtn_immedexec;
144 GtkWidget *checkbtn_confonexit;
145 GtkWidget *checkbtn_cleanonexit;
146 GtkWidget *checkbtn_askonclean;
147 GtkWidget *checkbtn_warnqueued;
148 GtkWidget *checkbtn_returnreceipt;
149 GtkWidget *checkbtn_addaddrbyclick;
152 static struct Other {
153 GtkWidget *uri_combo;
154 GtkWidget *uri_entry;
155 GtkWidget *printcmd_entry;
156 GtkWidget *exteditor_combo;
157 GtkWidget *exteditor_entry;
160 static struct MessageColorButtons {
161 GtkWidget *quote_level1_btn;
162 GtkWidget *quote_level2_btn;
163 GtkWidget *quote_level3_btn;
167 static GtkWidget *quote_desc_win;
168 static GtkWidget *font_sel_win;
169 static GtkWidget *quote_color_win;
170 static GtkWidget *color_dialog;
172 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
173 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
175 static void prefs_common_default_signkey_set_data_from_optmenu
177 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
181 parameter name, default value, pointer to the prefs variable, data type,
182 pointer to the widget pointer,
183 pointer to the function for data setting,
184 pointer to the function for widget setting
187 static PrefParam param[] = {
189 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
190 &receive.checkbtn_incext,
191 prefs_set_data_from_toggle, prefs_set_toggle},
192 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
193 &receive.entry_incext,
194 prefs_set_data_from_entry, prefs_set_entry},
196 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
197 &receive.checkbtn_local,
198 prefs_set_data_from_toggle, prefs_set_toggle},
199 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
200 &receive.checkbtn_filter_on_inc,
201 prefs_set_data_from_toggle, prefs_set_toggle},
202 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
203 &receive.entry_spool,
204 prefs_set_data_from_entry, prefs_set_entry},
206 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
207 &receive.checkbtn_autochk,
208 prefs_set_data_from_toggle, prefs_set_toggle},
209 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
210 &receive.spinbtn_autochk,
211 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
212 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
213 &receive.checkbtn_chkonstartup,
214 prefs_set_data_from_toggle, prefs_set_toggle},
216 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
217 &receive.spinbtn_maxarticle,
218 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
221 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
222 &send.checkbtn_sendext,
223 prefs_set_data_from_toggle, prefs_set_toggle},
224 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
225 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
226 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
227 &send.checkbtn_savemsg,
228 prefs_set_data_from_toggle, prefs_set_toggle},
229 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
230 &send.checkbtn_queuemsg,
231 prefs_set_data_from_toggle, prefs_set_toggle},
233 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
234 &send.optmenu_charset,
235 prefs_common_charset_set_data_from_optmenu,
236 prefs_common_charset_set_optmenu},
239 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
240 &compose.checkbtn_quote,
241 prefs_set_data_from_toggle, prefs_set_toggle},
242 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
243 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
244 {"quote_format", "On %d\\n%f wrote:\\n\\n",
245 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
246 prefs_set_data_from_text, prefs_set_text},
248 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
249 &compose.checkbtn_autosig,
250 prefs_set_data_from_toggle, prefs_set_toggle},
251 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
252 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
254 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
255 &compose.spinbtn_linewrap,
256 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
257 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
258 &compose.checkbtn_wrapquote,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"linewrap_before_sending", "FALSE",
261 &prefs_common.linewrap_at_send, P_BOOL,
262 &compose.checkbtn_wrapatsend,
263 prefs_set_data_from_toggle, prefs_set_toggle},
265 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
271 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
272 &prefs_common.textfont, P_STRING,
273 &display.entry_textfont,
274 prefs_set_data_from_entry, prefs_set_entry},
276 {"display_folder_unread_num", "TRUE",
277 &prefs_common.display_folder_unread, P_BOOL,
278 &display.chkbtn_folder_unread,
279 prefs_set_data_from_toggle, prefs_set_toggle},
281 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
282 &display.chkbtn_transhdr,
283 prefs_set_data_from_toggle, prefs_set_toggle},
285 /* Display: Summary View */
286 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
287 &display.chkbtn_swapfrom,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
290 &display.chkbtn_hscrollbar,
291 prefs_set_data_from_toggle, prefs_set_toggle},
292 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
293 P_STRING, &display.entry_datefmt,
294 prefs_set_data_from_entry, prefs_set_entry},
296 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
298 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
300 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
303 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
305 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
307 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
309 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
311 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
313 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
315 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
317 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
321 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
323 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
325 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
327 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
329 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
331 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
333 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
335 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
337 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
339 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
341 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
343 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
345 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
347 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
349 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
351 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
352 P_INT, NULL, NULL, NULL},
353 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
355 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
357 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
359 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
361 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
363 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
365 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
367 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
369 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
371 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
373 {"compose_width", "600", &prefs_common.compose_width, P_INT,
375 {"compose_height", "560", &prefs_common.compose_height, P_INT,
379 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
380 &message.chkbtn_enablecol,
381 prefs_set_data_from_toggle, prefs_set_toggle},
383 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
385 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
387 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
389 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
391 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
393 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
394 P_BOOL, NULL, NULL, NULL},
396 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
397 &message.chkbtn_mbalnum,
398 prefs_set_data_from_toggle, prefs_set_toggle},
399 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
400 P_BOOL, &message.chkbtn_disphdrpane,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
403 &message.chkbtn_disphdr,
404 prefs_set_data_from_toggle, prefs_set_toggle},
405 {"line_space", "2", &prefs_common.line_space, P_INT,
406 &message.spinbtn_linespc,
407 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
408 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
409 &message.chkbtn_headspc,
410 prefs_set_data_from_toggle, prefs_set_toggle},
412 {"enable_smooth_scroll", "FALSE",
413 &prefs_common.enable_smooth_scroll, P_BOOL,
414 &message.chkbtn_smoothscroll,
415 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
417 &message.spinbtn_scrollstep,
418 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
419 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
420 &message.chkbtn_halfpage,
421 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"mime_image_viewer", "display '%s'",
425 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
426 {"mime_audio_player", "play '%s'",
427 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
431 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
432 &privacy.checkbtn_gpgme_warning,
433 prefs_set_data_from_toggle, prefs_set_toggle},
434 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
435 &privacy.checkbtn_default_encrypt,
436 prefs_set_data_from_toggle, prefs_set_toggle},
437 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
438 &privacy.checkbtn_default_sign,
439 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"auto_check_signatures", "TRUE",
441 &prefs_common.auto_check_signatures, P_BOOL,
442 &privacy.checkbtn_auto_check_signatures,
443 prefs_set_data_from_toggle, prefs_set_toggle},
445 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
446 &privacy.checkbtn_passphrase_grab,
447 prefs_set_data_from_toggle, prefs_set_toggle},
448 #endif /* __MINGW32__ */
449 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
450 &privacy.optmenu_default_signkey,
451 prefs_common_default_signkey_set_data_from_optmenu,
452 prefs_common_default_signkey_set_optmenu},
453 #endif /* USE_GPGME */
456 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
458 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
461 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
462 &interface.checkbtn_emacs,
463 prefs_set_data_from_toggle, prefs_set_toggle},
464 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
465 P_BOOL, &interface.checkbtn_openunread,
466 prefs_set_data_from_toggle, prefs_set_toggle},
467 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
468 P_BOOL, &interface.checkbtn_openinbox,
469 prefs_set_data_from_toggle, prefs_set_toggle},
470 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
471 &interface.checkbtn_immedexec,
472 prefs_set_data_from_toggle, prefs_set_toggle},
473 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
474 P_BOOL, &interface.checkbtn_addaddrbyclick,
475 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
478 &interface.checkbtn_confonexit,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
481 &interface.checkbtn_returnreceipt,
482 prefs_set_data_from_toggle, prefs_set_toggle},
483 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
484 &interface.checkbtn_cleanonexit,
485 prefs_set_data_from_toggle, prefs_set_toggle},
486 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
487 &interface.checkbtn_askonclean,
488 prefs_set_data_from_toggle, prefs_set_toggle},
489 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
490 P_BOOL, &interface.checkbtn_warnqueued,
491 prefs_set_data_from_toggle, prefs_set_toggle},
494 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
495 &prefs_common.uri_cmd, P_STRING,
496 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
497 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
498 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
499 {"ext_editor_command", "gedit %s",
500 &prefs_common.ext_editor_cmd, P_STRING,
501 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
503 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
507 #define VSPACING_NARROW 4
508 #define VBOX_BORDER 16
509 #define DEFAULT_ENTRY_WIDTH 80
510 #define PREFSBUFSIZE 1024
512 /* widget creating functions */
513 static void prefs_common_create (void);
514 static void prefs_receive_create (void);
515 static void prefs_send_create (void);
516 static void prefs_compose_create (void);
517 static void prefs_display_create (void);
518 static void prefs_message_create (void);
520 static void prefs_privacy_create (void);
522 static void prefs_interface_create (void);
523 static void prefs_other_create (void);
525 static void prefs_quote_description (void);
526 static void prefs_quote_description_create (void);
527 static void prefs_quote_colors_dialog (void);
528 static void prefs_quote_colors_dialog_create (void);
529 static void quote_color_set_dialog (GtkWidget *widget,
531 static void quote_colors_set_dialog_ok (GtkWidget *widget,
533 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
535 static void set_button_bg_color (GtkWidget *widget,
537 static void prefs_enable_message_color_toggled (void);
538 static void prefs_recycle_colors_toggled (GtkWidget *widget);
540 /* functions for setting items of SummaryView */
541 static void prefs_summary_display_item_dialog_create
542 (gboolean *cancelled);
543 static void display_item_ok (GtkWidget *widget,
544 gboolean *cancelled);
545 static void display_item_cancel (GtkWidget *widget,
546 gboolean *cancelled);
547 static gint display_item_delete_event (GtkWidget *widget,
549 gboolean *cancelled);
550 static void display_item_key_pressed (GtkWidget *widget,
552 gboolean *cancelled);
554 static void prefs_font_select (GtkButton *button);
555 static void prefs_font_selection_key_pressed (GtkWidget *widget,
558 static void prefs_font_selection_ok (GtkButton *button);
560 static void prefs_common_key_pressed (GtkWidget *widget,
563 static void prefs_common_ok (GtkButton *button);
564 static void prefs_common_apply (GtkButton *button);
566 void prefs_common_read_config(void)
568 prefs_read_config(param, "Common", COMMON_RC);
571 void prefs_common_save_config(void)
573 prefs_save_config(param, "Common", COMMON_RC);
576 void prefs_common_open(void)
578 if (!dialog.window) {
579 prefs_common_create();
582 manage_window_set_transient(GTK_WINDOW(dialog.window));
583 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
584 gtk_widget_grab_focus(dialog.ok_btn);
586 prefs_set_dialog(param);
588 gtk_widget_show(dialog.window);
591 static void prefs_common_create(void)
595 debug_print(_("Creating common preferences window...\n"));
597 prefs_dialog_create(&dialog);
598 gtk_window_set_title (GTK_WINDOW(dialog.window),
599 _("Common Preferences"));
600 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
601 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
602 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
603 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
604 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
605 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
606 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
607 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
608 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
609 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
610 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
611 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
612 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
613 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
614 GTK_OBJECT(dialog.window));
616 /* create all widgets on notebook */
617 prefs_receive_create();
618 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
620 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
621 prefs_compose_create();
622 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
623 prefs_display_create();
624 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
625 prefs_message_create();
626 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
628 prefs_privacy_create();
629 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
631 prefs_interface_create();
632 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
633 prefs_other_create();
634 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
636 gtk_widget_show_all(dialog.window);
639 static void prefs_receive_create(void)
643 GtkWidget *frame_incext;
644 GtkWidget *checkbtn_incext;
646 GtkWidget *label_incext;
647 GtkWidget *entry_incext;
648 GtkWidget *button_incext;
650 GtkWidget *frame_spool;
651 GtkWidget *checkbtn_local;
652 GtkWidget *checkbtn_filter_on_inc;
653 GtkWidget *label_spool;
654 GtkWidget *entry_spool;
656 GtkWidget *hbox_autochk;
657 GtkWidget *checkbtn_autochk;
658 GtkWidget *label_autochk1;
659 GtkObject *spinbtn_autochk_adj;
660 GtkWidget *spinbtn_autochk;
661 GtkWidget *label_autochk2;
662 GtkWidget *checkbtn_chkonstartup;
664 GtkWidget *frame_news;
665 GtkWidget *label_maxarticle;
666 GtkWidget *spinbtn_maxarticle;
667 GtkObject *spinbtn_maxarticle_adj;
669 vbox1 = gtk_vbox_new (FALSE, VSPACING);
670 gtk_widget_show (vbox1);
671 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
672 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
674 PACK_FRAME(vbox1, frame_incext, _("External program"));
676 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
677 gtk_widget_show (vbox2);
678 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
679 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
681 /* Use of external incorporation program */
682 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
683 _("Use external program for incorporation"));
685 hbox = gtk_hbox_new (FALSE, 8);
686 gtk_widget_show (hbox);
687 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
688 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
690 label_incext = gtk_label_new (_("Program path"));
691 gtk_widget_show (label_incext);
692 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
694 entry_incext = gtk_entry_new ();
695 gtk_widget_show (entry_incext);
696 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
698 button_incext = gtk_button_new_with_label ("... ");
699 gtk_widget_show (button_incext);
700 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
702 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
704 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
705 gtk_widget_show (vbox2);
706 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
707 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
709 hbox = gtk_hbox_new (FALSE, 32);
710 gtk_widget_show (hbox);
711 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
713 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
714 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
715 _("Filter on incorporation"));
716 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
718 hbox = gtk_hbox_new (FALSE, 8);
719 gtk_widget_show (hbox);
720 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
721 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
723 label_spool = gtk_label_new (_("Spool directory"));
724 gtk_widget_show (label_spool);
725 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
727 entry_spool = gtk_entry_new ();
728 gtk_widget_show (entry_spool);
729 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
731 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
732 gtk_widget_show (vbox2);
733 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
736 hbox_autochk = gtk_hbox_new (FALSE, 8);
737 gtk_widget_show (hbox_autochk);
738 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
740 gtk_widget_set_sensitive(hbox_autochk, FALSE);
742 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
743 _("Auto-check new mail"));
745 label_autochk1 = gtk_label_new (_("each"));
746 gtk_widget_show (label_autochk1);
747 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
749 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
750 spinbtn_autochk = gtk_spin_button_new
751 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
752 gtk_widget_show (spinbtn_autochk);
753 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
754 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
755 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
757 label_autochk2 = gtk_label_new (_("minute(s)"));
758 gtk_widget_show (label_autochk2);
759 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
761 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
762 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
763 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
765 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
766 _("Check new mail on startup"));
768 PACK_FRAME(vbox1, frame_news, _("News"));
770 hbox = gtk_hbox_new (FALSE, 8);
771 gtk_widget_show (hbox);
772 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
773 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
775 label_maxarticle = gtk_label_new
776 (_("Maximum article number to download\n"
777 "(unlimited if 0 is specified)"));
778 gtk_widget_show (label_maxarticle);
779 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
780 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
782 spinbtn_maxarticle_adj =
783 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
784 spinbtn_maxarticle = gtk_spin_button_new
785 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
786 gtk_widget_show (spinbtn_maxarticle);
787 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
789 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
790 gtk_spin_button_set_numeric
791 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
793 receive.checkbtn_incext = checkbtn_incext;
794 receive.entry_incext = entry_incext;
795 receive.button_incext = button_incext;
797 receive.checkbtn_local = checkbtn_local;
798 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
799 receive.entry_spool = entry_spool;
801 receive.checkbtn_autochk = checkbtn_autochk;
802 receive.spinbtn_autochk = spinbtn_autochk;
803 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
805 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
807 receive.spinbtn_maxarticle = spinbtn_maxarticle;
808 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
811 static void prefs_send_create(void)
815 GtkWidget *frame_sendext;
816 GtkWidget *vbox_sendext;
817 GtkWidget *checkbtn_sendext;
819 GtkWidget *label_sendext;
820 GtkWidget *entry_sendext;
821 GtkWidget *button_sendext;
822 GtkWidget *checkbtn_savemsg;
823 GtkWidget *checkbtn_queuemsg;
824 GtkWidget *label_outcharset;
826 GtkWidget *optmenu_menu;
829 vbox1 = gtk_vbox_new (FALSE, VSPACING);
830 gtk_widget_show (vbox1);
831 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
832 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
834 PACK_FRAME(vbox1, frame_sendext, _("External program"));
836 gtk_widget_set_sensitive(frame_sendext, FALSE);
838 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
839 gtk_widget_show (vbox_sendext);
840 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
841 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
843 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
844 _("Use external program for sending"));
846 hbox1 = gtk_hbox_new (FALSE, 8);
847 gtk_widget_show (hbox1);
848 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
849 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
851 label_sendext = gtk_label_new (_("Program path"));
852 gtk_widget_show (label_sendext);
853 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
855 entry_sendext = gtk_entry_new ();
856 gtk_widget_show (entry_sendext);
857 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
859 button_sendext = gtk_button_new_with_label ("... ");
860 gtk_widget_show (button_sendext);
861 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
863 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
864 gtk_widget_show (vbox2);
865 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
867 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
868 _("Save sent message to outbox"));
869 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
870 _("Queue message that failed to send"));
872 hbox1 = gtk_hbox_new (FALSE, 8);
873 gtk_widget_show (hbox1);
874 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
876 label_outcharset = gtk_label_new (_("Outgoing codeset"));
877 gtk_widget_show (label_outcharset);
878 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
880 optmenu = gtk_option_menu_new ();
881 gtk_widget_show (optmenu);
882 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
884 optmenu_menu = gtk_menu_new ();
886 #define SET_MENUITEM(str, charset) \
888 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
891 SET_MENUITEM(_("Automatic"), CS_AUTO);
892 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
894 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
896 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
898 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
899 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
900 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
901 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
902 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
903 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
904 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
905 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
906 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
907 #endif /* HAVE_LIBJCONV */
908 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
910 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
911 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
914 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
915 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
917 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
918 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
920 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
921 #endif /* HAVE_LIBJCONV */
923 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
925 send.checkbtn_sendext = checkbtn_sendext;
926 send.entry_sendext = entry_sendext;
927 send.button_sendext = button_sendext;
929 send.checkbtn_savemsg = checkbtn_savemsg;
930 send.checkbtn_queuemsg = checkbtn_queuemsg;
932 send.optmenu_charset = optmenu;
935 static void prefs_compose_create(void)
938 GtkWidget *frame_quote;
939 GtkWidget *vbox_quote;
940 GtkWidget *checkbtn_quote;
942 GtkWidget *label_quotemark;
943 GtkWidget *entry_quotemark;
945 GtkWidget *label_quotefmt;
946 GtkWidget *btn_quotedesc;
947 GtkWidget *scrolledwin_quotefmt;
948 GtkWidget *text_quotefmt;
950 GtkWidget *frame_sig;
952 GtkWidget *checkbtn_autosig;
953 GtkWidget *label_sigsep;
954 GtkWidget *entry_sigsep;
956 GtkWidget *vbox_linewrap;
959 GtkWidget *label_linewrap;
960 GtkObject *spinbtn_linewrap_adj;
961 GtkWidget *spinbtn_linewrap;
962 GtkWidget *checkbtn_wrapquote;
963 GtkWidget *checkbtn_wrapatsend;
965 vbox1 = gtk_vbox_new (FALSE, VSPACING);
966 gtk_widget_show (vbox1);
967 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
968 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
970 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
972 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
973 gtk_widget_show (vbox_quote);
974 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
975 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
977 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
978 _("Quote message when replying"));
980 hbox1 = gtk_hbox_new (FALSE, 8);
981 gtk_widget_show (hbox1);
982 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
984 label_quotemark = gtk_label_new (_("Quotation mark"));
985 gtk_widget_show (label_quotemark);
986 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
988 entry_quotemark = gtk_entry_new ();
989 gtk_widget_show (entry_quotemark);
990 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
991 gtk_widget_set_usize (entry_quotemark, 64, -1);
993 hbox2 = gtk_hbox_new (FALSE, 0);
994 gtk_widget_show (hbox2);
995 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
997 label_quotefmt = gtk_label_new (_("Quotation format:"));
998 gtk_widget_show (label_quotefmt);
999 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1002 gtk_button_new_with_label (_(" Description of symbols "));
1003 gtk_widget_show (btn_quotedesc);
1004 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1005 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1006 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1008 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1009 gtk_widget_show (scrolledwin_quotefmt);
1010 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1011 gtk_scrolled_window_set_policy
1012 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1013 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1015 text_quotefmt = gtk_text_new (NULL, NULL);
1016 gtk_widget_show (text_quotefmt);
1017 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1018 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1019 gtk_widget_set_usize(text_quotefmt, -1, 60);
1021 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1023 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1024 gtk_widget_show (vbox_sig);
1025 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1026 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1028 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1029 _("Insert signature automatically"));
1031 hbox1 = gtk_hbox_new (FALSE, 8);
1032 gtk_widget_show (hbox1);
1033 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1035 label_sigsep = gtk_label_new (_("Signature separator"));
1036 gtk_widget_show (label_sigsep);
1037 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1039 entry_sigsep = gtk_entry_new ();
1040 gtk_widget_show (entry_sigsep);
1041 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1042 gtk_widget_set_usize (entry_sigsep, 64, -1);
1045 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1046 gtk_widget_show (vbox_linewrap);
1047 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1049 hbox3 = gtk_hbox_new (FALSE, 8);
1050 gtk_widget_show (hbox3);
1051 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1053 label_linewrap = gtk_label_new (_("Wrap messages at"));
1054 gtk_widget_show (label_linewrap);
1055 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1057 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1058 spinbtn_linewrap = gtk_spin_button_new
1059 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1060 gtk_widget_show (spinbtn_linewrap);
1061 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1062 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1063 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1065 label_linewrap = gtk_label_new (_("characters"));
1066 gtk_widget_show (label_linewrap);
1067 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1069 hbox4 = gtk_hbox_new (FALSE, 32);
1070 gtk_widget_show (hbox4);
1071 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1073 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1075 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1077 compose.checkbtn_quote = checkbtn_quote;
1078 compose.entry_quotemark = entry_quotemark;
1079 compose.text_quotefmt = text_quotefmt;
1080 compose.checkbtn_autosig = checkbtn_autosig;
1081 compose.entry_sigsep = entry_sigsep;
1083 compose.spinbtn_linewrap = spinbtn_linewrap;
1084 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1085 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1086 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1090 /* alfons - nice ui for darko */
1092 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1094 g_return_if_fail(widget != NULL);
1095 g_return_if_fail(*widget != NULL);
1096 gtk_widget_destroy(*widget);
1100 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1102 g_return_if_fail(widget != NULL);
1103 g_return_if_fail(*widget != NULL);
1108 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1111 struct tm *cal_time;
1114 cur_time = time(NULL);
1115 cal_time = localtime(&cur_time);
1117 text = gtk_editable_get_chars(editable, 0, -1);
1119 strftime(buffer, sizeof buffer, text, cal_time);
1121 gtk_label_set_text(example, buffer);
1124 static GtkWidget *create_date_format(GtkButton *button, void *data)
1126 static GtkWidget *date_format = NULL;
1128 GtkWidget *scrolledwindow1;
1129 GtkWidget *date_format_list;
1148 { "%a", _("the full abbreviated weekday name") },
1149 { "%A", _("the full weekday name") },
1150 { "%b", _("the abbreviated month name") },
1151 { "%B", _("the full month name") },
1152 { "%c", _("the preferred date and time for the current locale") },
1153 { "%C", _("the century number (year/100)") },
1154 { "%d", _("the day of the month as a decimal number") },
1155 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1156 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1157 { "%j", _("the day of the year as a decimal number") },
1158 { "%m", _("the month as a decimal number") },
1159 { "%M", _("the minute as a decimal number") },
1160 { "%p", _("either AM or PM") },
1161 { "%S", _("the second as a decimal number") },
1162 { "%w", _("the day of the week as a decimal number") },
1163 { "%x", _("the preferred date for the current locale") },
1164 { "%y", _("the last two digits of a year") },
1165 { "%Y", _("the year as a decimal number") },
1166 { "%Z", _("the time zone or name or abbreviation") }
1169 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1171 if (date_format) return date_format;
1173 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1174 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1175 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1176 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1178 vbox1 = gtk_vbox_new(FALSE, 10);
1179 gtk_widget_show(vbox1);
1180 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1182 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1183 gtk_widget_show(scrolledwindow1);
1184 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1186 date_format_list = gtk_clist_new(2);
1187 gtk_widget_show(date_format_list);
1188 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1189 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1190 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1191 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1193 label3 = gtk_label_new(_("Date Format"));
1194 gtk_widget_show(label3);
1195 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1197 label4 = gtk_label_new(_("Date Format Description"));
1198 gtk_widget_show(label4);
1199 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1201 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1203 /* phoney casting necessary because of gtk... */
1204 text[0] = (gchar *) time_format[tmp].fmt;
1205 text[1] = (gchar *) time_format[tmp].txt;
1207 gtk_clist_append(GTK_CLIST(date_format_list), text);
1210 table2 = gtk_table_new(1, 1, TRUE);
1211 gtk_widget_show(table2);
1212 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1214 vbox2 = gtk_vbox_new(FALSE, 0);
1215 gtk_widget_show(vbox2);
1216 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1217 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1218 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1220 vbox3 = gtk_vbox_new(TRUE, 4);
1221 gtk_widget_show(vbox3);
1222 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1224 hbox2 = gtk_hbox_new(FALSE, 0);
1225 gtk_widget_show(hbox2);
1226 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1228 label5 = gtk_label_new(_("Date format"));
1229 gtk_widget_show(label5);
1230 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1231 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1233 entry1 = gtk_entry_new_with_max_length(300);
1234 gtk_widget_show(entry1);
1235 gtk_box_pack_start(GTK_BOX(hbox2), entry1, TRUE, TRUE, 40);
1237 hbox1 = gtk_hbox_new(FALSE, 0);
1238 gtk_widget_show(hbox1);
1239 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1241 label6 = gtk_label_new(_("Example"));
1242 gtk_widget_show(label6);
1243 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1244 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1246 label7 = gtk_label_new(_("label7"));
1247 gtk_widget_show(label7);
1248 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1249 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1251 hbox3 = gtk_hbox_new(TRUE, 0);
1252 gtk_widget_show(hbox3);
1253 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1255 button1 = gtk_button_new_with_label(_("Close"));
1256 gtk_widget_show(button1);
1257 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1259 /* set the current format */
1260 gtk_entry_set_text(GTK_ENTRY(entry1), prefs_common.date_format);
1261 date_format_entry_on_change(GTK_EDITABLE(entry1), GTK_LABEL(label7));
1263 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1264 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1266 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1267 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1269 gtk_signal_connect(GTK_OBJECT(entry1), "changed",
1270 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1272 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1273 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1275 gtk_widget_show(date_format);
1279 static void prefs_display_create(void)
1282 GtkWidget *frame_font;
1284 GtkWidget *label_textfont;
1285 GtkWidget *entry_textfont;
1286 GtkWidget *button_textfont;
1287 GtkWidget *chkbtn_folder_unread;
1288 GtkWidget *chkbtn_transhdr;
1289 GtkWidget *frame_summary;
1291 GtkWidget *chkbtn_swapfrom;
1292 GtkWidget *chkbtn_hscrollbar;
1294 GtkWidget *label_datefmt;
1295 GtkWidget *entry_datefmt;
1296 GtkWidget *button_dispitem;
1297 GtkWidget *button_headers_display;
1299 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1300 gtk_widget_show (vbox1);
1301 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1302 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1304 PACK_FRAME(vbox1, frame_font, _("Font"));
1306 table1 = gtk_table_new (1, 3, FALSE);
1307 gtk_widget_show (table1);
1308 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1309 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1310 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1311 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1313 label_textfont = gtk_label_new (_("Text"));
1314 gtk_widget_show (label_textfont);
1315 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1316 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1318 entry_textfont = gtk_entry_new ();
1319 gtk_widget_show (entry_textfont);
1320 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1321 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1323 button_textfont = gtk_button_new_with_label ("... ");
1324 gtk_widget_show (button_textfont);
1325 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1327 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1328 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1330 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1331 gtk_widget_show (vbox2);
1332 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1335 (vbox2, chkbtn_transhdr,
1336 _("Translate header name (such as `From:', `Subject:')"));
1338 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1339 _("Display unread number next to folder name"));
1341 /* ---- Summary ---- */
1343 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1345 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1346 gtk_widget_show (vbox2);
1347 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1348 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1351 (vbox2, chkbtn_swapfrom,
1352 _("Display recipient on `From' column if sender is yourself"));
1354 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1356 hbox1 = gtk_hbox_new (FALSE, 8);
1357 gtk_widget_show (hbox1);
1358 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1360 label_datefmt = gtk_button_new_with_label (_("Date format"));
1361 gtk_widget_show (label_datefmt);
1362 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1363 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1364 GTK_SIGNAL_FUNC(create_date_format), NULL);
1366 entry_datefmt = gtk_entry_new ();
1367 gtk_widget_show (entry_datefmt);
1368 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1370 hbox1 = gtk_hbox_new (FALSE, 8);
1371 gtk_widget_show (hbox1);
1372 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1374 button_dispitem = gtk_button_new_with_label
1375 (_(" Set display item of summary... "));
1376 gtk_widget_show (button_dispitem);
1377 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1378 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1379 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1382 hbox1 = gtk_hbox_new (FALSE, 8);
1383 gtk_widget_show (hbox1);
1384 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1386 button_headers_display = gtk_button_new_with_label
1387 (_(" Set displaying of headers... "));
1388 gtk_widget_show (button_headers_display);
1389 gtk_box_pack_start (GTK_BOX (hbox1), button_headers_display, FALSE,
1391 gtk_signal_connect (GTK_OBJECT (button_headers_display), "clicked",
1392 GTK_SIGNAL_FUNC (prefs_display_headers_open),
1395 display.entry_textfont = entry_textfont;
1396 display.button_textfont = button_textfont;
1398 display.chkbtn_folder_unread = chkbtn_folder_unread;
1399 display.chkbtn_transhdr = chkbtn_transhdr;
1401 display.chkbtn_swapfrom = chkbtn_swapfrom;
1402 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1403 display.entry_datefmt = entry_datefmt;
1406 static void prefs_message_create(void)
1411 GtkWidget *chkbtn_enablecol;
1412 GtkWidget *button_edit_col;
1413 GtkWidget *chkbtn_mbalnum;
1414 GtkWidget *chkbtn_disphdrpane;
1415 GtkWidget *chkbtn_disphdr;
1416 GtkWidget *hbox_linespc;
1417 GtkWidget *label_linespc;
1418 GtkObject *spinbtn_linespc_adj;
1419 GtkWidget *spinbtn_linespc;
1420 GtkWidget *chkbtn_headspc;
1422 GtkWidget *frame_scr;
1423 GtkWidget *vbox_scr;
1424 GtkWidget *chkbtn_smoothscroll;
1425 GtkWidget *hbox_scr;
1426 GtkWidget *label_scr;
1427 GtkObject *spinbtn_scrollstep_adj;
1428 GtkWidget *spinbtn_scrollstep;
1429 GtkWidget *chkbtn_halfpage;
1431 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1432 gtk_widget_show (vbox1);
1433 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1434 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1436 hbox1 = gtk_hbox_new (FALSE, 8);
1437 gtk_widget_show (hbox1);
1438 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1440 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1441 _("Enable coloration of message"));
1442 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1443 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1446 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1447 gtk_widget_show (button_edit_col);
1448 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1449 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1450 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1452 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1454 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1455 gtk_widget_show (vbox2);
1456 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1459 (vbox2, chkbtn_mbalnum,
1460 _("Display 2-byte alphabet and numeric with 1-byte character"));
1461 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1462 _("Display header pane above message view"));
1463 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr,
1464 _("Display short headers on message view"));
1466 hbox1 = gtk_hbox_new (FALSE, 32);
1467 gtk_widget_show (hbox1);
1468 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1470 hbox_linespc = gtk_hbox_new (FALSE, 8);
1471 gtk_widget_show (hbox1);
1472 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1474 label_linespc = gtk_label_new (_("Line space"));
1475 gtk_widget_show (label_linespc);
1476 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1479 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1480 spinbtn_linespc = gtk_spin_button_new
1481 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1482 gtk_widget_show (spinbtn_linespc);
1483 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1485 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1486 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1488 label_linespc = gtk_label_new (_("pixel(s)"));
1489 gtk_widget_show (label_linespc);
1490 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1493 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1495 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1497 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1498 gtk_widget_show (vbox_scr);
1499 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1500 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1502 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1504 hbox1 = gtk_hbox_new (FALSE, 32);
1505 gtk_widget_show (hbox1);
1506 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1508 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1510 hbox_scr = gtk_hbox_new (FALSE, 8);
1511 gtk_widget_show (hbox_scr);
1512 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1514 label_scr = gtk_label_new (_("Step"));
1515 gtk_widget_show (label_scr);
1516 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1518 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1519 spinbtn_scrollstep = gtk_spin_button_new
1520 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1521 gtk_widget_show (spinbtn_scrollstep);
1522 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1524 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1525 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1528 label_scr = gtk_label_new (_("pixel(s)"));
1529 gtk_widget_show (label_scr);
1530 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1532 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1534 message.chkbtn_enablecol = chkbtn_enablecol;
1535 message.button_edit_col = button_edit_col;
1536 message.chkbtn_mbalnum = chkbtn_mbalnum;
1537 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1538 message.chkbtn_disphdr = chkbtn_disphdr;
1539 message.spinbtn_linespc = spinbtn_linespc;
1540 message.chkbtn_headspc = chkbtn_headspc;
1542 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1543 message.spinbtn_scrollstep = spinbtn_scrollstep;
1544 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1545 message.chkbtn_halfpage = chkbtn_halfpage;
1549 static void prefs_privacy_create(void)
1554 GtkWidget *checkbtn_gpgme_warning;
1555 GtkWidget *checkbtn_default_encrypt;
1556 GtkWidget *checkbtn_default_sign;
1557 GtkWidget *checkbtn_auto_check_signatures;
1558 GtkWidget *checkbtn_passphrase_grab;
1560 GtkWidget *menuitem;
1562 GtkWidget *optmenu_menu;
1564 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1565 gtk_widget_show (vbox1);
1566 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1567 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1569 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1570 gtk_widget_show (vbox2);
1571 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1574 (vbox2, checkbtn_gpgme_warning,
1575 _("Display warning on startup if GnuPG does not work"));
1577 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1578 _("Encrypt message by default"));
1580 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1581 _("Sign message by default"));
1583 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1584 _("Automatically check signatures"));
1587 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1588 _("Grab input while entering a passphrase"));
1591 hbox1 = gtk_hbox_new (FALSE, 8);
1592 gtk_widget_show (hbox1);
1593 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1595 /* create default signkey box */
1596 label = gtk_label_new (_("Default Sign Key"));
1597 gtk_widget_show (label);
1598 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1599 optmenu = gtk_option_menu_new ();
1600 gtk_widget_show (optmenu);
1601 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1602 optmenu_menu = gtk_menu_new ();
1604 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1605 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1606 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1607 /* FIXME: disabled because not implemented */
1608 gtk_widget_set_sensitive(optmenu, FALSE);
1610 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1611 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1612 privacy.checkbtn_default_sign = checkbtn_default_sign;
1613 privacy.checkbtn_auto_check_signatures
1614 = checkbtn_auto_check_signatures;
1615 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1616 privacy.optmenu_default_signkey = optmenu;
1620 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1624 GtkWidget *menuitem;
1627 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1628 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1629 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1630 g_free(*((gchar **)pparam->data));
1631 *((gchar **)pparam->data) = g_strdup(charset);
1635 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1639 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1641 GtkWidget *menuitem;
1645 g_return_if_fail(optmenu != NULL);
1646 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1648 menu = gtk_option_menu_get_menu(optmenu);
1649 for (cur = GTK_MENU_SHELL(menu)->children;
1650 cur != NULL; cur = cur->next) {
1651 menuitem = GTK_WIDGET(cur->data);
1652 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1653 if (!strcmp(charset, *((gchar **)pparam->data))) {
1654 gtk_option_menu_set_history(optmenu, n);
1660 gtk_option_menu_set_history(optmenu, 0);
1661 prefs_common_charset_set_data_from_optmenu(pparam);
1664 #endif /* USE_GPGME */
1666 static void prefs_interface_create(void)
1671 GtkWidget *checkbtn_emacs;
1672 GtkWidget *checkbtn_openunread;
1673 GtkWidget *checkbtn_openinbox;
1674 GtkWidget *checkbtn_immedexec;
1675 GtkWidget *checkbtn_addaddrbyclick;
1678 GtkWidget *frame_exit;
1679 GtkWidget *vbox_exit;
1681 GtkWidget *checkbtn_confonexit;
1682 GtkWidget *checkbtn_cleanonexit;
1683 GtkWidget *checkbtn_askonclean;
1684 GtkWidget *checkbtn_warnqueued;
1685 GtkWidget *checkbtn_returnreceipt;
1687 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1688 gtk_widget_show (vbox1);
1689 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1690 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1692 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1693 gtk_widget_show (vbox2);
1694 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1696 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1697 _("Emulate the behavior of mouse operation of\n"
1698 "Emacs-based mailer"));
1699 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1703 (vbox2, checkbtn_openunread,
1704 _("Open first unread message when entering a folder"));
1707 (vbox2, checkbtn_openinbox,
1708 _("Go to inbox after receiving new mail"));
1710 vbox3 = gtk_vbox_new (FALSE, 0);
1711 gtk_widget_show (vbox3);
1712 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1715 (vbox3, checkbtn_immedexec,
1716 _("Execute immediately when moving or deleting messages"));
1718 hbox1 = gtk_hbox_new (FALSE, 0);
1719 gtk_widget_show (hbox1);
1720 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1722 label = gtk_label_new
1723 (_("(Messages will be just marked till execution\n"
1724 " if this is turned off)"));
1725 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1726 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1729 (vbox2, checkbtn_addaddrbyclick,
1730 _("Add address to destination when double-clicked"));
1732 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1734 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1735 gtk_widget_show (vbox_exit);
1736 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1737 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1739 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1740 _("Confirm on exit"));
1742 hbox1 = gtk_hbox_new (FALSE, 32);
1743 gtk_widget_show (hbox1);
1744 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1746 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1747 _("Empty trash on exit"));
1748 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1749 _("Ask before emptying"));
1750 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1752 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1753 _("Warn if there are queued messages"));
1755 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1756 _("Send return receipt on request"));
1758 interface.checkbtn_emacs = checkbtn_emacs;
1759 interface.checkbtn_openunread = checkbtn_openunread;
1760 interface.checkbtn_openinbox = checkbtn_openinbox;
1761 interface.checkbtn_immedexec = checkbtn_immedexec;
1762 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1763 interface.checkbtn_confonexit = checkbtn_confonexit;
1764 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1765 interface.checkbtn_askonclean = checkbtn_askonclean;
1766 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1767 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1770 static void prefs_other_create(void)
1775 GtkWidget *uri_frame;
1776 GtkWidget *uri_label;
1777 GtkWidget *uri_combo;
1778 GtkWidget *uri_entry;
1780 GtkWidget *print_frame;
1781 GtkWidget *printcmd_label;
1782 GtkWidget *printcmd_entry;
1784 GtkWidget *exteditor_frame;
1785 GtkWidget *exteditor_label;
1786 GtkWidget *exteditor_combo;
1787 GtkWidget *exteditor_entry;
1789 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1790 gtk_widget_show (vbox1);
1791 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1792 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1794 PACK_FRAME(vbox1, uri_frame,
1795 _("External Web browser (%s will be replaced with URI)"));
1797 hbox1 = gtk_hbox_new (FALSE, 8);
1798 gtk_widget_show (hbox1);
1799 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1800 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1802 uri_label = gtk_label_new (_("Command"));
1803 gtk_widget_show(uri_label);
1804 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1806 uri_combo = gtk_combo_new ();
1807 gtk_widget_show (uri_combo);
1808 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1809 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1810 "netscape -remote 'openURL(%s,raise)'",
1811 "gnome-moz-remote --raise --newwin '%s'",
1812 "kterm -e w3m '%s'",
1813 "kterm -e lynx '%s'",
1816 uri_entry = GTK_COMBO (uri_combo)->entry;
1818 PACK_FRAME(vbox1, print_frame,
1819 _("Printing (%s will be replaced with file name)"));
1821 hbox1 = gtk_hbox_new (FALSE, 8);
1822 gtk_widget_show (hbox1);
1823 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1824 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1826 printcmd_label = gtk_label_new (_("Command"));
1827 gtk_widget_show (printcmd_label);
1828 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1830 printcmd_entry = gtk_entry_new ();
1831 gtk_widget_show (printcmd_entry);
1832 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1834 PACK_FRAME(vbox1, exteditor_frame,
1835 _("External editor (%s will be replaced with file name)"));
1837 hbox1 = gtk_hbox_new (FALSE, 8);
1838 gtk_widget_show (hbox1);
1839 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1840 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1842 exteditor_label = gtk_label_new (_("Command"));
1843 gtk_widget_show (exteditor_label);
1844 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1846 exteditor_combo = gtk_combo_new ();
1847 gtk_widget_show (exteditor_combo);
1848 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1849 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1851 "mgedit --no-fork %s",
1857 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1859 other.uri_combo = uri_combo;
1860 other.uri_entry = uri_entry;
1861 other.printcmd_entry = printcmd_entry;
1863 other.exteditor_combo = exteditor_combo;
1864 other.exteditor_entry = exteditor_entry;
1867 void prefs_quote_colors_dialog(void)
1869 if (!quote_color_win)
1870 prefs_quote_colors_dialog_create();
1871 gtk_widget_show(quote_color_win);
1874 gtk_widget_hide(quote_color_win);
1876 textview_update_message_colors();
1877 main_window_reflect_prefs_all();
1880 static void prefs_quote_colors_dialog_create(void)
1885 GtkWidget *quotelevel1_label;
1886 GtkWidget *quotelevel2_label;
1887 GtkWidget *quotelevel3_label;
1888 GtkWidget *uri_label;
1891 //GtkWidget *cancel_btn;
1892 GtkWidget *recycle_colors_btn;
1893 GtkWidget *frame_colors;
1895 window = gtk_window_new(GTK_WINDOW_DIALOG);
1896 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1897 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1898 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1899 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1900 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1902 vbox = gtk_vbox_new (FALSE, VSPACING);
1903 gtk_container_add (GTK_CONTAINER (window), vbox);
1904 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1905 PACK_FRAME(vbox, frame_colors, _("Colors"));
1907 table = gtk_table_new (4, 2, FALSE);
1908 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1909 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1910 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1911 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1913 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1915 color_buttons.quote_level1_btn = gtk_button_new();
1916 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1917 (GtkAttachOptions) (0),
1918 (GtkAttachOptions) (0), 0, 0);
1919 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1920 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1922 color_buttons.quote_level2_btn = gtk_button_new();
1923 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1924 (GtkAttachOptions) (0),
1925 (GtkAttachOptions) (0), 0, 0);
1926 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1927 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1929 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1930 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1931 (GtkAttachOptions) (0),
1932 (GtkAttachOptions) (0), 0, 0);
1933 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1934 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1936 color_buttons.uri_btn = gtk_button_new_with_label ("");
1937 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1938 (GtkAttachOptions) (0),
1939 (GtkAttachOptions) (0), 0, 0);
1940 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1941 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1943 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1944 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1945 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1946 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1947 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1949 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1950 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1951 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1952 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1953 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1955 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1956 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1957 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1958 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1959 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1961 uri_label = gtk_label_new (_("URI link"));
1962 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1963 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1964 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1965 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1967 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1968 _("Recycle quote colors"));
1970 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
1971 NULL, NULL, NULL, NULL);
1972 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
1974 gtk_widget_grab_default(ok_btn);
1975 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1976 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1977 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
1978 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
1980 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
1981 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
1982 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
1983 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
1984 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
1985 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
1986 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
1987 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
1988 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
1989 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
1991 /* show message button colors and recycle options */
1992 set_button_bg_color(color_buttons.quote_level1_btn,
1993 prefs_common.quote_level1_col);
1994 set_button_bg_color(color_buttons.quote_level2_btn,
1995 prefs_common.quote_level2_col);
1996 set_button_bg_color(color_buttons.quote_level3_btn,
1997 prefs_common.quote_level3_col);
1998 set_button_bg_color(color_buttons.uri_btn,
1999 prefs_common.uri_col);
2000 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2001 prefs_common.recycle_quote_colors);
2003 gtk_widget_show_all(vbox);
2004 quote_color_win = window;
2007 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2009 gchar *type = (gchar *)data;
2010 gchar *title = NULL;
2011 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2013 GtkColorSelectionDialog *dialog;
2015 if(g_strcasecmp(type, "LEVEL1") == 0) {
2016 title = _("Pick color for quotation level 1");
2017 rgbvalue = prefs_common.quote_level1_col;
2018 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2019 title = _("Pick color for quotation level 2");
2020 rgbvalue = prefs_common.quote_level2_col;
2021 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2022 title = _("Pick color for quotation level 3");
2023 rgbvalue = prefs_common.quote_level3_col;
2024 } else if(g_strcasecmp(type, "URI") == 0) {
2025 title = _("Pick color for URI");
2026 rgbvalue = prefs_common.uri_col;
2027 } else { /* Should never be called */
2028 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2032 color_dialog = gtk_color_selection_dialog_new(title);
2033 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2034 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2035 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2037 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2038 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2039 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2040 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2042 /* preselect the previous color in the color selection dialog */
2043 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2044 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2045 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2046 dialog = (GtkColorSelectionDialog *)color_dialog;
2047 gtk_color_selection_set_color
2048 ((GtkColorSelection *)dialog->colorsel, color);
2050 gtk_widget_show(color_dialog);
2053 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2055 GtkColorSelection *colorsel = (GtkColorSelection *)
2056 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2058 gint red, green, blue, rgbvalue;
2059 gchar *type = (gchar *)data;
2061 gtk_color_selection_get_color(colorsel, color);
2063 red = (gint) (color[0] * 255.0);
2064 green = (gint) (color[1] * 255.0);
2065 blue = (gint) (color[2] * 255.0);
2066 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2069 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2070 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2071 fprintf(stderr, "Color is %x\n", rgbvalue);
2074 if (g_strcasecmp(type, "LEVEL1") == 0) {
2075 prefs_common.quote_level1_col = rgbvalue;
2076 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2077 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2078 prefs_common.quote_level2_col = rgbvalue;
2079 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2080 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2081 prefs_common.quote_level3_col = rgbvalue;
2082 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2083 } else if (g_strcasecmp(type, "URI") == 0) {
2084 prefs_common.uri_col = rgbvalue;
2085 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2087 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2089 gtk_widget_hide(color_dialog);
2092 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2094 gtk_widget_hide(color_dialog);
2097 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2102 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2103 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2104 newstyle->bg[GTK_STATE_NORMAL] = color;
2105 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2106 newstyle->bg[GTK_STATE_ACTIVE] = color;
2108 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2111 static void prefs_enable_message_color_toggled(void)
2115 is_active = gtk_toggle_button_get_active
2116 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2117 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2118 prefs_common.enable_color = is_active;
2121 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2125 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2126 prefs_common.recycle_quote_colors = is_active;
2129 static void prefs_quote_description(void)
2131 if (!quote_desc_win)
2132 prefs_quote_description_create();
2134 gtk_widget_show(quote_desc_win);
2136 gtk_widget_hide(quote_desc_win);
2139 static void prefs_quote_description_create(void)
2147 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2148 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2149 _("Description of symbols"));
2150 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2151 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2152 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2153 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2155 vbox = gtk_vbox_new(FALSE, 8);
2156 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2158 hbox = gtk_hbox_new(FALSE, 4);
2159 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2161 label = gtk_label_new
2172 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2173 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2175 label = gtk_label_new
2178 "Full Name of Sender\n"
2179 "First Name of Sender\n"
2180 "Initial of Sender\n"
2186 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2187 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2189 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2190 NULL, NULL, NULL, NULL);
2191 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2193 gtk_widget_grab_default(ok_btn);
2194 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2195 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2197 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2198 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2200 gtk_widget_show_all(vbox);
2203 /* functions for setting items of SummaryView */
2205 static struct _SummaryDisplayItem
2209 GtkWidget *chkbtn[N_SUMMARY_COLS];
2212 GtkWidget *cancel_btn;
2215 #define SET_ACTIVE(column, var) \
2216 gtk_toggle_button_set_active \
2217 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2219 #define GET_ACTIVE(column, var) \
2220 prefs_common.var = gtk_toggle_button_get_active \
2221 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2223 void prefs_summary_display_item_set(void)
2225 static gboolean cancelled;
2227 if (!summarydispitem.window)
2228 prefs_summary_display_item_dialog_create(&cancelled);
2229 gtk_widget_grab_focus(summarydispitem.ok_btn);
2230 gtk_widget_show(summarydispitem.window);
2231 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2233 SET_ACTIVE(S_COL_MARK, show_mark);
2234 SET_ACTIVE(S_COL_UNREAD, show_unread);
2235 SET_ACTIVE(S_COL_MIME, show_mime);
2236 SET_ACTIVE(S_COL_NUMBER, show_number);
2237 SET_ACTIVE(S_COL_SIZE, show_size);
2238 SET_ACTIVE(S_COL_DATE, show_date);
2239 SET_ACTIVE(S_COL_FROM, show_from);
2240 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2243 gtk_widget_hide(summarydispitem.window);
2245 if (cancelled != TRUE) {
2246 GET_ACTIVE(S_COL_MARK, show_mark);
2247 GET_ACTIVE(S_COL_UNREAD, show_unread);
2248 GET_ACTIVE(S_COL_MIME, show_mime);
2249 GET_ACTIVE(S_COL_NUMBER, show_number);
2250 GET_ACTIVE(S_COL_SIZE, show_size);
2251 GET_ACTIVE(S_COL_DATE, show_date);
2252 GET_ACTIVE(S_COL_FROM, show_from);
2253 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2255 main_window_reflect_prefs_all();
2259 #define SET_CHECK_BUTTON(column, label) \
2261 summarydispitem.chkbtn[column] = \
2262 gtk_check_button_new_with_label(label); \
2263 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2264 summarydispitem.chkbtn[column], \
2268 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2272 GtkWidget *chkbtn_vbox;
2275 GtkWidget *cancel_btn;
2277 window = gtk_window_new(GTK_WINDOW_DIALOG);
2278 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2279 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2280 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2281 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2282 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2283 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2284 GTK_SIGNAL_FUNC(display_item_delete_event),
2286 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2287 GTK_SIGNAL_FUNC(display_item_key_pressed),
2290 vbox = gtk_vbox_new(FALSE, 8);
2291 gtk_container_add(GTK_CONTAINER(window), vbox);
2293 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2294 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2296 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2297 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2298 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2299 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2300 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2301 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2302 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2303 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2305 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2306 &cancel_btn, _("Cancel"), NULL, NULL);
2307 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2308 gtk_widget_grab_default(ok_btn);
2310 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2311 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2312 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2313 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2315 gtk_widget_show_all(vbox);
2317 summarydispitem.window = window;
2318 summarydispitem.ok_btn = ok_btn;
2319 summarydispitem.cancel_btn = cancel_btn;
2322 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2328 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2334 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2335 gboolean *cancelled)
2343 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2344 gboolean *cancelled)
2346 if (event && event->keyval == GDK_Escape) {
2352 static void prefs_font_select(GtkButton *button)
2354 if (!font_sel_win) {
2355 font_sel_win = gtk_font_selection_dialog_new
2356 (_("Font selection"));
2357 gtk_window_position(GTK_WINDOW(font_sel_win),
2358 GTK_WIN_POS_CENTER);
2359 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2360 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2363 (GTK_OBJECT(font_sel_win), "key_press_event",
2364 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2367 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2369 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2371 gtk_signal_connect_object
2372 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2374 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2375 GTK_OBJECT(font_sel_win));
2378 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2379 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2380 gtk_widget_grab_focus
2381 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2382 gtk_widget_show(font_sel_win);
2385 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2389 if (event && event->keyval == GDK_Escape)
2390 gtk_widget_hide(font_sel_win);
2393 static void prefs_font_selection_ok(GtkButton *button)
2397 fontname = gtk_font_selection_dialog_get_font_name
2398 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2401 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2405 gtk_widget_hide(font_sel_win);
2408 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2411 GtkWidget *menuitem;
2414 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2415 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2416 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2417 g_free(*((gchar **)pparam->data));
2418 *((gchar **)pparam->data) = g_strdup(charset);
2421 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2424 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2426 GtkWidget *menuitem;
2430 g_return_if_fail(optmenu != NULL);
2431 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2433 menu = gtk_option_menu_get_menu(optmenu);
2434 for (cur = GTK_MENU_SHELL(menu)->children;
2435 cur != NULL; cur = cur->next) {
2436 menuitem = GTK_WIDGET(cur->data);
2437 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2438 if (!strcmp(charset, *((gchar **)pparam->data))) {
2439 gtk_option_menu_set_history(optmenu, n);
2445 gtk_option_menu_set_history(optmenu, 0);
2446 prefs_common_charset_set_data_from_optmenu(pparam);
2449 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2452 if (event && event->keyval == GDK_Escape)
2453 gtk_widget_hide(dialog.window);
2456 static void prefs_common_ok(GtkButton *button)
2458 prefs_common_apply(button);
2459 gtk_widget_hide(dialog.window);
2460 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2461 gtk_widget_hide(quote_desc_win);
2464 static void prefs_common_apply(GtkButton *button)
2466 prefs_set_data_from_dialog(param);
2467 main_window_reflect_prefs_all();
2468 prefs_common_save_config();