2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
33 #include <sys/types.h>
39 #include "prefs_common.h"
40 #include "prefs_display_header.h"
41 #include "mainwindow.h"
42 #include "summaryview.h"
43 #include "messageview.h"
44 #include "manage_window.h"
50 #include "alertpanel.h"
53 PrefsCommon prefs_common;
55 static PrefsDialog dialog;
57 static struct Receive {
58 GtkWidget *checkbtn_incext;
59 GtkWidget *entry_incext;
60 GtkWidget *button_incext;
62 GtkWidget *checkbtn_local;
63 GtkWidget *checkbtn_filter_on_inc;
64 GtkWidget *entry_spool;
66 GtkWidget *checkbtn_autochk;
67 GtkWidget *spinbtn_autochk;
68 GtkObject *spinbtn_autochk_adj;
70 GtkWidget *checkbtn_chkonstartup;
72 GtkWidget *spinbtn_maxarticle;
73 GtkObject *spinbtn_maxarticle_adj;
77 GtkWidget *checkbtn_sendext;
78 GtkWidget *entry_sendext;
79 GtkWidget *button_sendext;
81 GtkWidget *checkbtn_savemsg;
82 GtkWidget *checkbtn_queuemsg;
84 GtkWidget *optmenu_charset;
87 static struct Compose {
88 GtkWidget *checkbtn_quote;
89 GtkWidget *entry_quotemark;
90 GtkWidget *text_quotefmt;
91 GtkWidget *checkbtn_autosig;
92 GtkWidget *entry_sigsep;
94 GtkWidget *spinbtn_linewrap;
95 GtkObject *spinbtn_linewrap_adj;
96 GtkWidget *checkbtn_wrapquote;
97 GtkWidget *checkbtn_wrapatsend;
100 static struct Display {
101 GtkWidget *entry_textfont;
102 GtkWidget *button_textfont;
104 GtkWidget *chkbtn_folder_unread;
106 GtkWidget *chkbtn_transhdr;
108 GtkWidget *chkbtn_swapfrom;
109 GtkWidget *chkbtn_hscrollbar;
110 GtkWidget *chkbtn_useaddrbook;
113 static struct Message {
114 GtkWidget *chkbtn_enablecol;
115 GtkWidget *button_edit_col;
116 GtkWidget *chkbtn_mbalnum;
117 GtkWidget *chkbtn_disphdrpane;
118 GtkWidget *chkbtn_disphdr;
119 GtkWidget *spinbtn_linespc;
120 GtkObject *spinbtn_linespc_adj;
121 GtkWidget *chkbtn_headspc;
123 GtkWidget *chkbtn_smoothscroll;
124 GtkWidget *spinbtn_scrollstep;
125 GtkObject *spinbtn_scrollstep_adj;
126 GtkWidget *chkbtn_halfpage;
130 static struct Privacy {
131 GtkWidget *checkbtn_gpgme_warning;
132 GtkWidget *checkbtn_default_encrypt;
133 GtkWidget *checkbtn_default_sign;
134 GtkWidget *checkbtn_auto_check_signatures;
135 GtkWidget *checkbtn_passphrase_grab;
136 GtkWidget *optmenu_default_signkey;
140 static struct Interface {
141 GtkWidget *checkbtn_emacs;
142 GtkWidget *checkbtn_openunread;
143 GtkWidget *checkbtn_openinbox;
144 GtkWidget *checkbtn_immedexec;
145 GtkWidget *checkbtn_confonexit;
146 GtkWidget *checkbtn_cleanonexit;
147 GtkWidget *checkbtn_askonclean;
148 GtkWidget *checkbtn_warnqueued;
149 GtkWidget *checkbtn_returnreceipt;
150 GtkWidget *checkbtn_addaddrbyclick;
153 static struct Other {
154 GtkWidget *uri_combo;
155 GtkWidget *uri_entry;
156 GtkWidget *printcmd_entry;
157 GtkWidget *exteditor_combo;
158 GtkWidget *exteditor_entry;
161 static struct MessageColorButtons {
162 GtkWidget *quote_level1_btn;
163 GtkWidget *quote_level2_btn;
164 GtkWidget *quote_level3_btn;
168 static GtkWidget *quote_desc_win;
169 static GtkWidget *font_sel_win;
170 static GtkWidget *quote_color_win;
171 static GtkWidget *color_dialog;
172 static GtkWidget *entry_datefmt;
173 static GtkWidget *datefmt_sample;
175 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
176 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
178 static void prefs_common_default_signkey_set_data_from_optmenu
180 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
184 parameter name, default value, pointer to the prefs variable, data type,
185 pointer to the widget pointer,
186 pointer to the function for data setting,
187 pointer to the function for widget setting
190 static PrefParam param[] = {
192 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
193 &receive.checkbtn_incext,
194 prefs_set_data_from_toggle, prefs_set_toggle},
195 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
196 &receive.entry_incext,
197 prefs_set_data_from_entry, prefs_set_entry},
199 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
200 &receive.checkbtn_local,
201 prefs_set_data_from_toggle, prefs_set_toggle},
202 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
203 &receive.checkbtn_filter_on_inc,
204 prefs_set_data_from_toggle, prefs_set_toggle},
205 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
206 &receive.entry_spool,
207 prefs_set_data_from_entry, prefs_set_entry},
209 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
210 &receive.checkbtn_autochk,
211 prefs_set_data_from_toggle, prefs_set_toggle},
212 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
213 &receive.spinbtn_autochk,
214 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
215 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
216 &receive.checkbtn_chkonstartup,
217 prefs_set_data_from_toggle, prefs_set_toggle},
219 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
220 &receive.spinbtn_maxarticle,
221 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
224 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
225 &send.checkbtn_sendext,
226 prefs_set_data_from_toggle, prefs_set_toggle},
227 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
228 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
229 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
230 &send.checkbtn_savemsg,
231 prefs_set_data_from_toggle, prefs_set_toggle},
232 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
233 &send.checkbtn_queuemsg,
234 prefs_set_data_from_toggle, prefs_set_toggle},
236 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
237 &send.optmenu_charset,
238 prefs_common_charset_set_data_from_optmenu,
239 prefs_common_charset_set_optmenu},
242 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
243 &compose.checkbtn_quote,
244 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
246 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
247 {"quote_format", "On %d\\n%f wrote:\\n\\n",
248 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
249 prefs_set_data_from_text, prefs_set_text},
251 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
252 &compose.checkbtn_autosig,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
255 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
257 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
258 &compose.spinbtn_linewrap,
259 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
260 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
261 &compose.checkbtn_wrapquote,
262 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"linewrap_before_sending", "FALSE",
264 &prefs_common.linewrap_at_send, P_BOOL,
265 &compose.checkbtn_wrapatsend,
266 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
272 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
274 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
275 &prefs_common.textfont, P_STRING,
276 &display.entry_textfont,
277 prefs_set_data_from_entry, prefs_set_entry},
279 {"display_folder_unread_num", "TRUE",
280 &prefs_common.display_folder_unread, P_BOOL,
281 &display.chkbtn_folder_unread,
282 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
285 &display.chkbtn_transhdr,
286 prefs_set_data_from_toggle, prefs_set_toggle},
288 /* Display: Summary View */
289 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
290 &display.chkbtn_swapfrom,
291 prefs_set_data_from_toggle, prefs_set_toggle},
292 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
293 &display.chkbtn_hscrollbar,
294 prefs_set_data_from_toggle, prefs_set_toggle},
295 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
296 &display.chkbtn_useaddrbook,
297 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
299 P_STRING, &entry_datefmt,
300 prefs_set_data_from_entry, prefs_set_entry},
302 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
304 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
306 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
309 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
311 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
313 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
315 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
317 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
319 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
321 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
323 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
325 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
329 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
331 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
333 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
335 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
337 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
339 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
341 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
343 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
345 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
347 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
349 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
351 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
353 {"summary_col_score", "40", &prefs_common.summary_col_score,
354 P_INT, NULL, NULL, NULL},
355 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
357 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
359 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
361 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
362 P_INT, NULL, NULL, NULL},
363 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
365 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
367 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
369 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
371 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
373 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
375 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
377 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
379 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
381 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
383 {"compose_width", "600", &prefs_common.compose_width, P_INT,
385 {"compose_height", "560", &prefs_common.compose_height, P_INT,
389 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
390 &message.chkbtn_enablecol,
391 prefs_set_data_from_toggle, prefs_set_toggle},
393 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
395 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
397 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
399 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
401 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
403 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
404 P_BOOL, NULL, NULL, NULL},
406 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
407 &message.chkbtn_mbalnum,
408 prefs_set_data_from_toggle, prefs_set_toggle},
409 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
410 P_BOOL, &message.chkbtn_disphdrpane,
411 prefs_set_data_from_toggle, prefs_set_toggle},
412 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
413 &message.chkbtn_disphdr,
414 prefs_set_data_from_toggle, prefs_set_toggle},
415 {"line_space", "2", &prefs_common.line_space, P_INT,
416 &message.spinbtn_linespc,
417 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
418 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
419 &message.chkbtn_headspc,
420 prefs_set_data_from_toggle, prefs_set_toggle},
422 {"enable_smooth_scroll", "FALSE",
423 &prefs_common.enable_smooth_scroll, P_BOOL,
424 &message.chkbtn_smoothscroll,
425 prefs_set_data_from_toggle, prefs_set_toggle},
426 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
427 &message.spinbtn_scrollstep,
428 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
429 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
430 &message.chkbtn_halfpage,
431 prefs_set_data_from_toggle, prefs_set_toggle},
433 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
437 {"mime_image_viewer", "display '%s'",
438 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
439 {"mime_audio_player", "play '%s'",
440 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
444 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
445 &privacy.checkbtn_gpgme_warning,
446 prefs_set_data_from_toggle, prefs_set_toggle},
447 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
448 &privacy.checkbtn_default_encrypt,
449 prefs_set_data_from_toggle, prefs_set_toggle},
450 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
451 &privacy.checkbtn_default_sign,
452 prefs_set_data_from_toggle, prefs_set_toggle},
453 {"auto_check_signatures", "TRUE",
454 &prefs_common.auto_check_signatures, P_BOOL,
455 &privacy.checkbtn_auto_check_signatures,
456 prefs_set_data_from_toggle, prefs_set_toggle},
458 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
459 &privacy.checkbtn_passphrase_grab,
460 prefs_set_data_from_toggle, prefs_set_toggle},
461 #endif /* __MINGW32__ */
462 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
463 &privacy.optmenu_default_signkey,
464 prefs_common_default_signkey_set_data_from_optmenu,
465 prefs_common_default_signkey_set_optmenu},
466 #endif /* USE_GPGME */
469 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
471 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
474 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
475 &interface.checkbtn_emacs,
476 prefs_set_data_from_toggle, prefs_set_toggle},
477 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
478 P_BOOL, &interface.checkbtn_openunread,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
481 P_BOOL, &interface.checkbtn_openinbox,
482 prefs_set_data_from_toggle, prefs_set_toggle},
483 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
484 &interface.checkbtn_immedexec,
485 prefs_set_data_from_toggle, prefs_set_toggle},
486 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
487 P_BOOL, &interface.checkbtn_addaddrbyclick,
488 prefs_set_data_from_toggle, prefs_set_toggle},
490 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
491 &interface.checkbtn_confonexit,
492 prefs_set_data_from_toggle, prefs_set_toggle},
493 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
494 &interface.checkbtn_returnreceipt,
495 prefs_set_data_from_toggle, prefs_set_toggle},
496 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
497 &interface.checkbtn_cleanonexit,
498 prefs_set_data_from_toggle, prefs_set_toggle},
499 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
500 &interface.checkbtn_askonclean,
501 prefs_set_data_from_toggle, prefs_set_toggle},
502 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
503 P_BOOL, &interface.checkbtn_warnqueued,
504 prefs_set_data_from_toggle, prefs_set_toggle},
507 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
508 &prefs_common.uri_cmd, P_STRING,
509 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
510 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
511 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
512 {"ext_editor_command", "gedit %s",
513 &prefs_common.ext_editor_cmd, P_STRING,
514 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
516 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
520 #define VSPACING_NARROW 4
521 #define VBOX_BORDER 16
522 #define DEFAULT_ENTRY_WIDTH 80
523 #define PREFSBUFSIZE 1024
525 /* widget creating functions */
526 static void prefs_common_create (void);
527 static void prefs_receive_create (void);
528 static void prefs_send_create (void);
529 static void prefs_compose_create (void);
530 static void prefs_display_create (void);
531 static void prefs_message_create (void);
533 static void prefs_privacy_create (void);
535 static void prefs_interface_create (void);
536 static void prefs_other_create (void);
538 static void prefs_quote_description (void);
539 static void prefs_quote_description_create (void);
540 static void prefs_quote_colors_dialog (void);
541 static void prefs_quote_colors_dialog_create (void);
542 static void quote_color_set_dialog (GtkWidget *widget,
544 static void quote_colors_set_dialog_ok (GtkWidget *widget,
546 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
548 static void set_button_bg_color (GtkWidget *widget,
550 static void prefs_enable_message_color_toggled (void);
551 static void prefs_recycle_colors_toggled (GtkWidget *widget);
553 /* functions for setting items of SummaryView */
554 static void prefs_summary_display_item_dialog_create
555 (gboolean *cancelled);
556 static void display_item_ok (GtkWidget *widget,
557 gboolean *cancelled);
558 static void display_item_cancel (GtkWidget *widget,
559 gboolean *cancelled);
560 static gint display_item_delete_event (GtkWidget *widget,
562 gboolean *cancelled);
563 static void display_item_key_pressed (GtkWidget *widget,
565 gboolean *cancelled);
567 static void prefs_font_select (GtkButton *button);
568 static void prefs_font_selection_key_pressed (GtkWidget *widget,
571 static void prefs_font_selection_ok (GtkButton *button);
573 static void prefs_common_key_pressed (GtkWidget *widget,
576 static void prefs_common_ok (void);
577 static void prefs_common_apply (void);
578 static void prefs_common_cancel (void);
580 void prefs_common_read_config(void)
582 prefs_read_config(param, "Common", COMMON_RC);
585 void prefs_common_save_config(void)
587 prefs_save_config(param, "Common", COMMON_RC);
590 void prefs_common_open(void)
592 inc_autocheck_timer_remove();
594 if (!dialog.window) {
595 prefs_common_create();
598 manage_window_set_transient(GTK_WINDOW(dialog.window));
599 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
600 gtk_widget_grab_focus(dialog.ok_btn);
602 prefs_set_dialog(param);
604 gtk_widget_show(dialog.window);
607 static void prefs_common_create(void)
611 debug_print(_("Creating common preferences window...\n"));
613 prefs_dialog_create(&dialog);
614 gtk_window_set_title (GTK_WINDOW(dialog.window),
615 _("Common Preferences"));
616 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
617 GTK_SIGNAL_FUNC(prefs_common_cancel), NULL);
618 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
619 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
620 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
621 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
622 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
623 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
624 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
625 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
626 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
627 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
628 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
629 GTK_SIGNAL_FUNC(prefs_common_cancel),
630 GTK_OBJECT(dialog.window));
632 /* create all widgets on notebook */
633 prefs_receive_create();
634 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
636 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
637 prefs_compose_create();
638 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
639 prefs_display_create();
640 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
641 prefs_message_create();
642 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
644 prefs_privacy_create();
645 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
647 prefs_interface_create();
648 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
649 prefs_other_create();
650 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
652 gtk_widget_show_all(dialog.window);
655 static void prefs_receive_create(void)
659 GtkWidget *frame_incext;
660 GtkWidget *checkbtn_incext;
662 GtkWidget *label_incext;
663 GtkWidget *entry_incext;
664 GtkWidget *button_incext;
666 GtkWidget *frame_spool;
667 GtkWidget *checkbtn_local;
668 GtkWidget *checkbtn_filter_on_inc;
669 GtkWidget *label_spool;
670 GtkWidget *entry_spool;
672 GtkWidget *hbox_autochk;
673 GtkWidget *checkbtn_autochk;
674 GtkWidget *label_autochk1;
675 GtkObject *spinbtn_autochk_adj;
676 GtkWidget *spinbtn_autochk;
677 GtkWidget *label_autochk2;
678 GtkWidget *checkbtn_chkonstartup;
680 GtkWidget *frame_news;
681 GtkWidget *label_maxarticle;
682 GtkWidget *spinbtn_maxarticle;
683 GtkObject *spinbtn_maxarticle_adj;
685 vbox1 = gtk_vbox_new (FALSE, VSPACING);
686 gtk_widget_show (vbox1);
687 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
688 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
690 PACK_FRAME(vbox1, frame_incext, _("External program"));
692 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
693 gtk_widget_show (vbox2);
694 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
695 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
697 /* Use of external incorporation program */
698 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
699 _("Use external program for incorporation"));
701 hbox = gtk_hbox_new (FALSE, 8);
702 gtk_widget_show (hbox);
703 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
704 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
706 label_incext = gtk_label_new (_("Program path"));
707 gtk_widget_show (label_incext);
708 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
710 entry_incext = gtk_entry_new ();
711 gtk_widget_show (entry_incext);
712 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
714 button_incext = gtk_button_new_with_label ("... ");
715 gtk_widget_show (button_incext);
716 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
718 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
720 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
721 gtk_widget_show (vbox2);
722 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
723 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
725 hbox = gtk_hbox_new (FALSE, 32);
726 gtk_widget_show (hbox);
727 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
729 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
730 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
731 _("Filter on incorporation"));
732 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
734 hbox = gtk_hbox_new (FALSE, 8);
735 gtk_widget_show (hbox);
736 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
737 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
739 label_spool = gtk_label_new (_("Spool directory"));
740 gtk_widget_show (label_spool);
741 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
743 entry_spool = gtk_entry_new ();
744 gtk_widget_show (entry_spool);
745 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
747 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
748 gtk_widget_show (vbox2);
749 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
752 hbox_autochk = gtk_hbox_new (FALSE, 8);
753 gtk_widget_show (hbox_autochk);
754 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
756 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
757 _("Auto-check new mail"));
759 label_autochk1 = gtk_label_new (_("each"));
760 gtk_widget_show (label_autochk1);
761 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
763 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
764 spinbtn_autochk = gtk_spin_button_new
765 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
766 gtk_widget_show (spinbtn_autochk);
767 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
768 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
769 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
771 label_autochk2 = gtk_label_new (_("minute(s)"));
772 gtk_widget_show (label_autochk2);
773 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
775 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
776 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
777 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
779 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
780 _("Check new mail on startup"));
782 PACK_FRAME(vbox1, frame_news, _("News"));
784 hbox = gtk_hbox_new (FALSE, 8);
785 gtk_widget_show (hbox);
786 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
787 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
789 label_maxarticle = gtk_label_new
790 (_("Maximum article number to download\n"
791 "(unlimited if 0 is specified)"));
792 gtk_widget_show (label_maxarticle);
793 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
794 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
796 spinbtn_maxarticle_adj =
797 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
798 spinbtn_maxarticle = gtk_spin_button_new
799 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
800 gtk_widget_show (spinbtn_maxarticle);
801 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
803 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
804 gtk_spin_button_set_numeric
805 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
807 receive.checkbtn_incext = checkbtn_incext;
808 receive.entry_incext = entry_incext;
809 receive.button_incext = button_incext;
811 receive.checkbtn_local = checkbtn_local;
812 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
813 receive.entry_spool = entry_spool;
815 receive.checkbtn_autochk = checkbtn_autochk;
816 receive.spinbtn_autochk = spinbtn_autochk;
817 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
819 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
821 receive.spinbtn_maxarticle = spinbtn_maxarticle;
822 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
825 static void prefs_send_create(void)
829 GtkWidget *frame_sendext;
830 GtkWidget *vbox_sendext;
831 GtkWidget *checkbtn_sendext;
833 GtkWidget *label_sendext;
834 GtkWidget *entry_sendext;
835 GtkWidget *button_sendext;
836 GtkWidget *checkbtn_savemsg;
837 GtkWidget *checkbtn_queuemsg;
838 GtkWidget *label_outcharset;
840 GtkWidget *optmenu_menu;
843 vbox1 = gtk_vbox_new (FALSE, VSPACING);
844 gtk_widget_show (vbox1);
845 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
846 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
848 PACK_FRAME(vbox1, frame_sendext, _("External program"));
850 gtk_widget_set_sensitive(frame_sendext, FALSE);
852 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
853 gtk_widget_show (vbox_sendext);
854 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
855 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
857 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
858 _("Use external program for sending"));
860 hbox1 = gtk_hbox_new (FALSE, 8);
861 gtk_widget_show (hbox1);
862 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
863 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
865 label_sendext = gtk_label_new (_("Program path"));
866 gtk_widget_show (label_sendext);
867 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
869 entry_sendext = gtk_entry_new ();
870 gtk_widget_show (entry_sendext);
871 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
873 button_sendext = gtk_button_new_with_label ("... ");
874 gtk_widget_show (button_sendext);
875 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
877 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
878 gtk_widget_show (vbox2);
879 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
881 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
882 _("Save sent message to outbox"));
883 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
884 _("Queue message that failed to send"));
886 hbox1 = gtk_hbox_new (FALSE, 8);
887 gtk_widget_show (hbox1);
888 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
890 label_outcharset = gtk_label_new (_("Outgoing codeset"));
891 gtk_widget_show (label_outcharset);
892 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
894 optmenu = gtk_option_menu_new ();
895 gtk_widget_show (optmenu);
896 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
898 optmenu_menu = gtk_menu_new ();
900 #define SET_MENUITEM(str, charset) \
902 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
905 SET_MENUITEM(_("Automatic"), CS_AUTO);
906 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
908 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
910 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
912 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
913 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
914 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
915 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
916 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
917 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
918 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
919 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
920 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
921 #endif /* HAVE_LIBJCONV */
922 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
924 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
925 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
928 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
929 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
931 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
932 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
934 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
935 #endif /* HAVE_LIBJCONV */
937 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
939 send.checkbtn_sendext = checkbtn_sendext;
940 send.entry_sendext = entry_sendext;
941 send.button_sendext = button_sendext;
943 send.checkbtn_savemsg = checkbtn_savemsg;
944 send.checkbtn_queuemsg = checkbtn_queuemsg;
946 send.optmenu_charset = optmenu;
949 static void prefs_compose_create(void)
952 GtkWidget *frame_quote;
953 GtkWidget *vbox_quote;
954 GtkWidget *checkbtn_quote;
956 GtkWidget *label_quotemark;
957 GtkWidget *entry_quotemark;
959 GtkWidget *label_quotefmt;
960 GtkWidget *btn_quotedesc;
961 GtkWidget *scrolledwin_quotefmt;
962 GtkWidget *text_quotefmt;
964 GtkWidget *frame_sig;
966 GtkWidget *checkbtn_autosig;
967 GtkWidget *label_sigsep;
968 GtkWidget *entry_sigsep;
970 GtkWidget *vbox_linewrap;
973 GtkWidget *label_linewrap;
974 GtkObject *spinbtn_linewrap_adj;
975 GtkWidget *spinbtn_linewrap;
976 GtkWidget *checkbtn_wrapquote;
977 GtkWidget *checkbtn_wrapatsend;
979 vbox1 = gtk_vbox_new (FALSE, VSPACING);
980 gtk_widget_show (vbox1);
981 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
982 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
984 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
986 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
987 gtk_widget_show (vbox_quote);
988 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
989 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
991 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
992 _("Quote message when replying"));
994 hbox1 = gtk_hbox_new (FALSE, 8);
995 gtk_widget_show (hbox1);
996 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
998 label_quotemark = gtk_label_new (_("Quotation mark"));
999 gtk_widget_show (label_quotemark);
1000 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1002 entry_quotemark = gtk_entry_new ();
1003 gtk_widget_show (entry_quotemark);
1004 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1005 gtk_widget_set_usize (entry_quotemark, 64, -1);
1007 hbox2 = gtk_hbox_new (FALSE, 0);
1008 gtk_widget_show (hbox2);
1009 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1011 label_quotefmt = gtk_label_new (_("Quotation format:"));
1012 gtk_widget_show (label_quotefmt);
1013 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1016 gtk_button_new_with_label (_(" Description of symbols "));
1017 gtk_widget_show (btn_quotedesc);
1018 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1019 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1020 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1022 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1023 gtk_widget_show (scrolledwin_quotefmt);
1024 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1025 gtk_scrolled_window_set_policy
1026 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1027 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1029 text_quotefmt = gtk_text_new (NULL, NULL);
1030 gtk_widget_show (text_quotefmt);
1031 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1032 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1033 gtk_widget_set_usize(text_quotefmt, -1, 60);
1035 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1037 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1038 gtk_widget_show (vbox_sig);
1039 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1040 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1042 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1043 _("Insert signature automatically"));
1045 hbox1 = gtk_hbox_new (FALSE, 8);
1046 gtk_widget_show (hbox1);
1047 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1049 label_sigsep = gtk_label_new (_("Signature separator"));
1050 gtk_widget_show (label_sigsep);
1051 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1053 entry_sigsep = gtk_entry_new ();
1054 gtk_widget_show (entry_sigsep);
1055 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1056 gtk_widget_set_usize (entry_sigsep, 64, -1);
1059 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1060 gtk_widget_show (vbox_linewrap);
1061 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1063 hbox3 = gtk_hbox_new (FALSE, 8);
1064 gtk_widget_show (hbox3);
1065 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1067 label_linewrap = gtk_label_new (_("Wrap messages at"));
1068 gtk_widget_show (label_linewrap);
1069 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1071 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1072 spinbtn_linewrap = gtk_spin_button_new
1073 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1074 gtk_widget_show (spinbtn_linewrap);
1075 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1076 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1077 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1079 label_linewrap = gtk_label_new (_("characters"));
1080 gtk_widget_show (label_linewrap);
1081 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1083 hbox4 = gtk_hbox_new (FALSE, 32);
1084 gtk_widget_show (hbox4);
1085 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1087 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1089 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1091 compose.checkbtn_quote = checkbtn_quote;
1092 compose.entry_quotemark = entry_quotemark;
1093 compose.text_quotefmt = text_quotefmt;
1094 compose.checkbtn_autosig = checkbtn_autosig;
1095 compose.entry_sigsep = entry_sigsep;
1097 compose.spinbtn_linewrap = spinbtn_linewrap;
1098 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1099 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1100 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1104 /* alfons - nice ui for darko */
1106 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1110 g_return_if_fail(widget != NULL);
1111 g_return_if_fail(*widget != NULL);
1112 g_return_if_fail(entry_datefmt != NULL);
1113 g_return_if_fail(datefmt_sample != NULL);
1115 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1116 g_free(prefs_common.date_format);
1117 prefs_common.date_format = text;
1118 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1120 gtk_widget_destroy(*widget);
1124 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1126 g_return_if_fail(widget != NULL);
1127 g_return_if_fail(*widget != NULL);
1132 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1135 struct tm *cal_time;
1138 cur_time = time(NULL);
1139 cal_time = localtime(&cur_time);
1141 text = gtk_editable_get_chars(editable, 0, -1);
1143 strftime(buffer, sizeof buffer, text, cal_time);
1145 gtk_label_set_text(example, buffer);
1148 static GtkWidget *create_date_format(GtkButton *button, void *data)
1150 static GtkWidget *date_format = NULL;
1152 GtkWidget *scrolledwindow1;
1153 GtkWidget *date_format_list;
1171 { "%a", _("the full abbreviated weekday name") },
1172 { "%A", _("the full weekday name") },
1173 { "%b", _("the abbreviated month name") },
1174 { "%B", _("the full month name") },
1175 { "%c", _("the preferred date and time for the current locale") },
1176 { "%C", _("the century number (year/100)") },
1177 { "%d", _("the day of the month as a decimal number") },
1178 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1179 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1180 { "%j", _("the day of the year as a decimal number") },
1181 { "%m", _("the month as a decimal number") },
1182 { "%M", _("the minute as a decimal number") },
1183 { "%p", _("either AM or PM") },
1184 { "%S", _("the second as a decimal number") },
1185 { "%w", _("the day of the week as a decimal number") },
1186 { "%x", _("the preferred date for the current locale") },
1187 { "%y", _("the last two digits of a year") },
1188 { "%Y", _("the year as a decimal number") },
1189 { "%Z", _("the time zone or name or abbreviation") }
1192 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1194 if (date_format) return date_format;
1196 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1197 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1198 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1199 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1201 vbox1 = gtk_vbox_new(FALSE, 10);
1202 gtk_widget_show(vbox1);
1203 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1205 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1206 gtk_widget_show(scrolledwindow1);
1207 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1209 date_format_list = gtk_clist_new(2);
1210 gtk_widget_show(date_format_list);
1211 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1212 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1213 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1214 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1216 label3 = gtk_label_new(_("Date Format"));
1217 gtk_widget_show(label3);
1218 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1220 label4 = gtk_label_new(_("Date Format Description"));
1221 gtk_widget_show(label4);
1222 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1224 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1226 /* phoney casting necessary because of gtk... */
1227 text[0] = (gchar *) time_format[tmp].fmt;
1228 text[1] = (gchar *) time_format[tmp].txt;
1230 gtk_clist_append(GTK_CLIST(date_format_list), text);
1233 table2 = gtk_table_new(1, 1, TRUE);
1234 gtk_widget_show(table2);
1235 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1237 vbox2 = gtk_vbox_new(FALSE, 0);
1238 gtk_widget_show(vbox2);
1239 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1240 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1241 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1243 vbox3 = gtk_vbox_new(TRUE, 4);
1244 gtk_widget_show(vbox3);
1245 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1247 hbox2 = gtk_hbox_new(FALSE, 0);
1248 gtk_widget_show(hbox2);
1249 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1251 label5 = gtk_label_new(_("Date format"));
1252 gtk_widget_show(label5);
1253 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1254 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1256 datefmt_sample = gtk_entry_new_with_max_length(300);
1257 gtk_widget_show(datefmt_sample);
1258 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1260 hbox1 = gtk_hbox_new(FALSE, 0);
1261 gtk_widget_show(hbox1);
1262 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1264 label6 = gtk_label_new(_("Example"));
1265 gtk_widget_show(label6);
1266 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1267 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1269 label7 = gtk_label_new(_("label7"));
1270 gtk_widget_show(label7);
1271 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1272 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1274 hbox3 = gtk_hbox_new(TRUE, 0);
1275 gtk_widget_show(hbox3);
1276 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1278 button1 = gtk_button_new_with_label(_("Close"));
1279 gtk_widget_show(button1);
1280 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1282 /* set the current format */
1283 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1284 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1287 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1288 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1290 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1291 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1293 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1294 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1296 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1297 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1299 gtk_widget_show(date_format);
1303 static void prefs_display_create(void)
1306 GtkWidget *frame_font;
1308 GtkWidget *label_textfont;
1309 GtkWidget *entry_textfont;
1310 GtkWidget *button_textfont;
1311 GtkWidget *chkbtn_folder_unread;
1312 GtkWidget *chkbtn_transhdr;
1313 GtkWidget *frame_summary;
1315 GtkWidget *chkbtn_swapfrom;
1316 GtkWidget *chkbtn_hscrollbar;
1317 GtkWidget *chkbtn_useaddrbook;
1319 GtkWidget *label_datefmt;
1320 GtkWidget *button_dispitem;
1322 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1323 gtk_widget_show (vbox1);
1324 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1325 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1327 PACK_FRAME(vbox1, frame_font, _("Font"));
1329 table1 = gtk_table_new (1, 3, FALSE);
1330 gtk_widget_show (table1);
1331 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1332 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1333 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1334 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1336 label_textfont = gtk_label_new (_("Text"));
1337 gtk_widget_show (label_textfont);
1338 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1339 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1341 entry_textfont = gtk_entry_new ();
1342 gtk_widget_show (entry_textfont);
1343 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1344 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1346 button_textfont = gtk_button_new_with_label ("... ");
1347 gtk_widget_show (button_textfont);
1348 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1350 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1351 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1353 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1354 gtk_widget_show (vbox2);
1355 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1358 (vbox2, chkbtn_transhdr,
1359 _("Translate header name (such as `From:', `Subject:')"));
1361 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1362 _("Display unread number next to folder name"));
1364 /* ---- Summary ---- */
1366 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1368 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1369 gtk_widget_show (vbox2);
1370 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1371 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1374 (vbox2, chkbtn_swapfrom,
1375 _("Display recipient on `From' column if sender is yourself"));
1377 (vbox2, chkbtn_useaddrbook,
1378 _("Display sender using address book"));
1380 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
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 label_datefmt = gtk_button_new_with_label (_("Date format"));
1387 gtk_widget_show (label_datefmt);
1388 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1389 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1390 GTK_SIGNAL_FUNC(create_date_format), NULL);
1392 entry_datefmt = gtk_entry_new ();
1393 gtk_widget_show (entry_datefmt);
1394 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1396 hbox1 = gtk_hbox_new (FALSE, 8);
1397 gtk_widget_show (hbox1);
1398 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1400 button_dispitem = gtk_button_new_with_label
1401 (_(" Set display item of summary... "));
1402 gtk_widget_show (button_dispitem);
1403 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1404 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1405 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1408 display.entry_textfont = entry_textfont;
1409 display.button_textfont = button_textfont;
1411 display.chkbtn_folder_unread = chkbtn_folder_unread;
1412 display.chkbtn_transhdr = chkbtn_transhdr;
1414 display.chkbtn_swapfrom = chkbtn_swapfrom;
1415 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1416 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1419 static void prefs_message_create(void)
1424 GtkWidget *chkbtn_enablecol;
1425 GtkWidget *button_edit_col;
1426 GtkWidget *chkbtn_mbalnum;
1427 GtkWidget *chkbtn_disphdrpane;
1428 GtkWidget *chkbtn_disphdr;
1429 GtkWidget *button_edit_disphdr;
1430 GtkWidget *hbox_linespc;
1431 GtkWidget *label_linespc;
1432 GtkObject *spinbtn_linespc_adj;
1433 GtkWidget *spinbtn_linespc;
1434 GtkWidget *chkbtn_headspc;
1436 GtkWidget *frame_scr;
1437 GtkWidget *vbox_scr;
1438 GtkWidget *chkbtn_smoothscroll;
1439 GtkWidget *hbox_scr;
1440 GtkWidget *label_scr;
1441 GtkObject *spinbtn_scrollstep_adj;
1442 GtkWidget *spinbtn_scrollstep;
1443 GtkWidget *chkbtn_halfpage;
1445 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1446 gtk_widget_show (vbox1);
1447 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1448 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1450 hbox1 = gtk_hbox_new (FALSE, 8);
1451 gtk_widget_show (hbox1);
1452 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1454 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1455 _("Enable coloration of message"));
1456 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1457 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1460 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1461 gtk_widget_show (button_edit_col);
1462 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1463 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1464 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1466 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1468 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1469 gtk_widget_show (vbox2);
1470 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1473 (vbox2, chkbtn_mbalnum,
1474 _("Display 2-byte alphabet and numeric with 1-byte character"));
1475 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1476 _("Display header pane above message view"));
1478 hbox1 = gtk_hbox_new (FALSE, 8);
1479 gtk_widget_show (hbox1);
1480 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1482 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1483 _("Display short headers on message view"));
1485 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1486 gtk_widget_show (button_edit_disphdr);
1487 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1489 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1490 GTK_SIGNAL_FUNC (prefs_display_header_open),
1493 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1495 hbox1 = gtk_hbox_new (FALSE, 32);
1496 gtk_widget_show (hbox1);
1497 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1499 hbox_linespc = gtk_hbox_new (FALSE, 8);
1500 gtk_widget_show (hbox1);
1501 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1503 label_linespc = gtk_label_new (_("Line space"));
1504 gtk_widget_show (label_linespc);
1505 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1508 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1509 spinbtn_linespc = gtk_spin_button_new
1510 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1511 gtk_widget_show (spinbtn_linespc);
1512 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1514 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1515 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1517 label_linespc = gtk_label_new (_("pixel(s)"));
1518 gtk_widget_show (label_linespc);
1519 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1522 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1524 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1526 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1527 gtk_widget_show (vbox_scr);
1528 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1529 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1531 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1533 hbox1 = gtk_hbox_new (FALSE, 32);
1534 gtk_widget_show (hbox1);
1535 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1537 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1539 hbox_scr = gtk_hbox_new (FALSE, 8);
1540 gtk_widget_show (hbox_scr);
1541 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1543 label_scr = gtk_label_new (_("Step"));
1544 gtk_widget_show (label_scr);
1545 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1547 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1548 spinbtn_scrollstep = gtk_spin_button_new
1549 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1550 gtk_widget_show (spinbtn_scrollstep);
1551 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1553 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1554 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1557 label_scr = gtk_label_new (_("pixel(s)"));
1558 gtk_widget_show (label_scr);
1559 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1561 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1563 message.chkbtn_enablecol = chkbtn_enablecol;
1564 message.button_edit_col = button_edit_col;
1565 message.chkbtn_mbalnum = chkbtn_mbalnum;
1566 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1567 message.chkbtn_disphdr = chkbtn_disphdr;
1568 message.spinbtn_linespc = spinbtn_linespc;
1569 message.chkbtn_headspc = chkbtn_headspc;
1571 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1572 message.spinbtn_scrollstep = spinbtn_scrollstep;
1573 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1574 message.chkbtn_halfpage = chkbtn_halfpage;
1578 static void prefs_privacy_create(void)
1583 GtkWidget *checkbtn_gpgme_warning;
1584 GtkWidget *checkbtn_default_encrypt;
1585 GtkWidget *checkbtn_default_sign;
1586 GtkWidget *checkbtn_auto_check_signatures;
1587 GtkWidget *checkbtn_passphrase_grab;
1589 GtkWidget *menuitem;
1591 GtkWidget *optmenu_menu;
1593 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1594 gtk_widget_show (vbox1);
1595 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1596 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1598 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1599 gtk_widget_show (vbox2);
1600 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1603 (vbox2, checkbtn_gpgme_warning,
1604 _("Display warning on startup if GnuPG does not work"));
1606 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1607 _("Encrypt message by default"));
1609 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1610 _("Sign message by default"));
1612 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1613 _("Automatically check signatures"));
1616 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1617 _("Grab input while entering a passphrase"));
1620 hbox1 = gtk_hbox_new (FALSE, 8);
1621 gtk_widget_show (hbox1);
1622 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1624 /* create default signkey box */
1625 label = gtk_label_new (_("Default Sign Key"));
1626 gtk_widget_show (label);
1627 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1628 optmenu = gtk_option_menu_new ();
1629 gtk_widget_show (optmenu);
1630 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1631 optmenu_menu = gtk_menu_new ();
1633 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1634 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1635 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1636 /* FIXME: disabled because not implemented */
1637 gtk_widget_set_sensitive(optmenu, FALSE);
1639 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1640 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1641 privacy.checkbtn_default_sign = checkbtn_default_sign;
1642 privacy.checkbtn_auto_check_signatures
1643 = checkbtn_auto_check_signatures;
1644 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1645 privacy.optmenu_default_signkey = optmenu;
1649 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1653 GtkWidget *menuitem;
1656 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1657 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1658 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1659 g_free(*((gchar **)pparam->data));
1660 *((gchar **)pparam->data) = g_strdup(charset);
1664 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1668 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1670 GtkWidget *menuitem;
1674 g_return_if_fail(optmenu != NULL);
1675 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1677 menu = gtk_option_menu_get_menu(optmenu);
1678 for (cur = GTK_MENU_SHELL(menu)->children;
1679 cur != NULL; cur = cur->next) {
1680 menuitem = GTK_WIDGET(cur->data);
1681 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1682 if (!strcmp(charset, *((gchar **)pparam->data))) {
1683 gtk_option_menu_set_history(optmenu, n);
1689 gtk_option_menu_set_history(optmenu, 0);
1690 prefs_common_charset_set_data_from_optmenu(pparam);
1693 #endif /* USE_GPGME */
1695 static void prefs_interface_create(void)
1700 GtkWidget *checkbtn_emacs;
1701 GtkWidget *checkbtn_openunread;
1702 GtkWidget *checkbtn_openinbox;
1703 GtkWidget *checkbtn_immedexec;
1704 GtkWidget *checkbtn_addaddrbyclick;
1707 GtkWidget *frame_exit;
1708 GtkWidget *vbox_exit;
1710 GtkWidget *checkbtn_confonexit;
1711 GtkWidget *checkbtn_cleanonexit;
1712 GtkWidget *checkbtn_askonclean;
1713 GtkWidget *checkbtn_warnqueued;
1714 GtkWidget *checkbtn_returnreceipt;
1716 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1717 gtk_widget_show (vbox1);
1718 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1719 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1721 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1722 gtk_widget_show (vbox2);
1723 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1725 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1726 _("Emulate the behavior of mouse operation of\n"
1727 "Emacs-based mailer"));
1728 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1732 (vbox2, checkbtn_openunread,
1733 _("Open first unread message when entering a folder"));
1736 (vbox2, checkbtn_openinbox,
1737 _("Go to inbox after receiving new mail"));
1739 vbox3 = gtk_vbox_new (FALSE, 0);
1740 gtk_widget_show (vbox3);
1741 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1744 (vbox3, checkbtn_immedexec,
1745 _("Execute immediately when moving or deleting messages"));
1747 hbox1 = gtk_hbox_new (FALSE, 0);
1748 gtk_widget_show (hbox1);
1749 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1751 label = gtk_label_new
1752 (_("(Messages will be just marked till execution\n"
1753 " if this is turned off)"));
1754 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1755 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1758 (vbox2, checkbtn_addaddrbyclick,
1759 _("Add address to destination when double-clicked"));
1761 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1763 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1764 gtk_widget_show (vbox_exit);
1765 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1766 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1768 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1769 _("Confirm on exit"));
1771 hbox1 = gtk_hbox_new (FALSE, 32);
1772 gtk_widget_show (hbox1);
1773 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1775 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1776 _("Empty trash on exit"));
1777 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1778 _("Ask before emptying"));
1779 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1781 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1782 _("Warn if there are queued messages"));
1784 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1785 _("Send return receipt on request"));
1787 interface.checkbtn_emacs = checkbtn_emacs;
1788 interface.checkbtn_openunread = checkbtn_openunread;
1789 interface.checkbtn_openinbox = checkbtn_openinbox;
1790 interface.checkbtn_immedexec = checkbtn_immedexec;
1791 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1792 interface.checkbtn_confonexit = checkbtn_confonexit;
1793 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1794 interface.checkbtn_askonclean = checkbtn_askonclean;
1795 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1796 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1799 static void prefs_other_create(void)
1804 GtkWidget *uri_frame;
1805 GtkWidget *uri_label;
1806 GtkWidget *uri_combo;
1807 GtkWidget *uri_entry;
1809 GtkWidget *print_frame;
1810 GtkWidget *printcmd_label;
1811 GtkWidget *printcmd_entry;
1813 GtkWidget *exteditor_frame;
1814 GtkWidget *exteditor_label;
1815 GtkWidget *exteditor_combo;
1816 GtkWidget *exteditor_entry;
1818 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1819 gtk_widget_show (vbox1);
1820 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1821 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1823 PACK_FRAME(vbox1, uri_frame,
1824 _("External Web browser (%s will be replaced with URI)"));
1826 hbox1 = gtk_hbox_new (FALSE, 8);
1827 gtk_widget_show (hbox1);
1828 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1829 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1831 uri_label = gtk_label_new (_("Command"));
1832 gtk_widget_show(uri_label);
1833 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1835 uri_combo = gtk_combo_new ();
1836 gtk_widget_show (uri_combo);
1837 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1838 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1839 "netscape -remote 'openURL(%s,raise)'",
1840 "gnome-moz-remote --raise --newwin '%s'",
1841 "kterm -e w3m '%s'",
1842 "kterm -e lynx '%s'",
1845 uri_entry = GTK_COMBO (uri_combo)->entry;
1847 PACK_FRAME(vbox1, print_frame,
1848 _("Printing (%s will be replaced with file name)"));
1850 hbox1 = gtk_hbox_new (FALSE, 8);
1851 gtk_widget_show (hbox1);
1852 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1853 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1855 printcmd_label = gtk_label_new (_("Command"));
1856 gtk_widget_show (printcmd_label);
1857 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1859 printcmd_entry = gtk_entry_new ();
1860 gtk_widget_show (printcmd_entry);
1861 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1863 PACK_FRAME(vbox1, exteditor_frame,
1864 _("External editor (%s will be replaced with file name)"));
1866 hbox1 = gtk_hbox_new (FALSE, 8);
1867 gtk_widget_show (hbox1);
1868 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1869 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1871 exteditor_label = gtk_label_new (_("Command"));
1872 gtk_widget_show (exteditor_label);
1873 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1875 exteditor_combo = gtk_combo_new ();
1876 gtk_widget_show (exteditor_combo);
1877 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1878 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1880 "mgedit --no-fork %s",
1886 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1888 other.uri_combo = uri_combo;
1889 other.uri_entry = uri_entry;
1890 other.printcmd_entry = printcmd_entry;
1892 other.exteditor_combo = exteditor_combo;
1893 other.exteditor_entry = exteditor_entry;
1896 void prefs_quote_colors_dialog(void)
1898 if (!quote_color_win)
1899 prefs_quote_colors_dialog_create();
1900 gtk_widget_show(quote_color_win);
1903 gtk_widget_hide(quote_color_win);
1905 textview_update_message_colors();
1906 main_window_reflect_prefs_all();
1909 static void prefs_quote_colors_dialog_create(void)
1914 GtkWidget *quotelevel1_label;
1915 GtkWidget *quotelevel2_label;
1916 GtkWidget *quotelevel3_label;
1917 GtkWidget *uri_label;
1920 //GtkWidget *cancel_btn;
1921 GtkWidget *recycle_colors_btn;
1922 GtkWidget *frame_colors;
1924 window = gtk_window_new(GTK_WINDOW_DIALOG);
1925 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1926 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1927 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1928 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1929 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1931 vbox = gtk_vbox_new (FALSE, VSPACING);
1932 gtk_container_add (GTK_CONTAINER (window), vbox);
1933 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1934 PACK_FRAME(vbox, frame_colors, _("Colors"));
1936 table = gtk_table_new (4, 2, FALSE);
1937 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1938 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1939 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1940 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1942 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1944 color_buttons.quote_level1_btn = gtk_button_new();
1945 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1946 (GtkAttachOptions) (0),
1947 (GtkAttachOptions) (0), 0, 0);
1948 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1949 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1951 color_buttons.quote_level2_btn = gtk_button_new();
1952 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1953 (GtkAttachOptions) (0),
1954 (GtkAttachOptions) (0), 0, 0);
1955 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1956 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1958 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1959 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1960 (GtkAttachOptions) (0),
1961 (GtkAttachOptions) (0), 0, 0);
1962 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1963 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1965 color_buttons.uri_btn = gtk_button_new_with_label ("");
1966 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1967 (GtkAttachOptions) (0),
1968 (GtkAttachOptions) (0), 0, 0);
1969 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1970 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1972 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1973 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1974 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1975 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1976 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1978 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1979 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1980 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1981 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1982 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1984 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1985 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1986 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1987 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1988 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1990 uri_label = gtk_label_new (_("URI link"));
1991 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1992 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1993 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1994 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1996 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
1997 _("Recycle quote colors"));
1999 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2000 NULL, NULL, NULL, NULL);
2001 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2003 gtk_widget_grab_default(ok_btn);
2004 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2005 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2006 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2007 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2009 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2010 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2011 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2012 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2013 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2014 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2015 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2016 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2017 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2018 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2020 /* show message button colors and recycle options */
2021 set_button_bg_color(color_buttons.quote_level1_btn,
2022 prefs_common.quote_level1_col);
2023 set_button_bg_color(color_buttons.quote_level2_btn,
2024 prefs_common.quote_level2_col);
2025 set_button_bg_color(color_buttons.quote_level3_btn,
2026 prefs_common.quote_level3_col);
2027 set_button_bg_color(color_buttons.uri_btn,
2028 prefs_common.uri_col);
2029 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2030 prefs_common.recycle_quote_colors);
2032 gtk_widget_show_all(vbox);
2033 quote_color_win = window;
2036 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2038 gchar *type = (gchar *)data;
2039 gchar *title = NULL;
2040 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2042 GtkColorSelectionDialog *dialog;
2044 if(g_strcasecmp(type, "LEVEL1") == 0) {
2045 title = _("Pick color for quotation level 1");
2046 rgbvalue = prefs_common.quote_level1_col;
2047 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2048 title = _("Pick color for quotation level 2");
2049 rgbvalue = prefs_common.quote_level2_col;
2050 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2051 title = _("Pick color for quotation level 3");
2052 rgbvalue = prefs_common.quote_level3_col;
2053 } else if(g_strcasecmp(type, "URI") == 0) {
2054 title = _("Pick color for URI");
2055 rgbvalue = prefs_common.uri_col;
2056 } else { /* Should never be called */
2057 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2061 color_dialog = gtk_color_selection_dialog_new(title);
2062 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2063 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2064 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2066 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2067 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2068 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2069 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2071 /* preselect the previous color in the color selection dialog */
2072 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2073 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2074 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2075 dialog = (GtkColorSelectionDialog *)color_dialog;
2076 gtk_color_selection_set_color
2077 ((GtkColorSelection *)dialog->colorsel, color);
2079 gtk_widget_show(color_dialog);
2082 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2084 GtkColorSelection *colorsel = (GtkColorSelection *)
2085 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2087 gint red, green, blue, rgbvalue;
2088 gchar *type = (gchar *)data;
2090 gtk_color_selection_get_color(colorsel, color);
2092 red = (gint) (color[0] * 255.0);
2093 green = (gint) (color[1] * 255.0);
2094 blue = (gint) (color[2] * 255.0);
2095 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2098 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2099 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2100 fprintf(stderr, "Color is %x\n", rgbvalue);
2103 if (g_strcasecmp(type, "LEVEL1") == 0) {
2104 prefs_common.quote_level1_col = rgbvalue;
2105 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2106 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2107 prefs_common.quote_level2_col = rgbvalue;
2108 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2109 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2110 prefs_common.quote_level3_col = rgbvalue;
2111 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2112 } else if (g_strcasecmp(type, "URI") == 0) {
2113 prefs_common.uri_col = rgbvalue;
2114 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2116 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2118 gtk_widget_hide(color_dialog);
2121 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2123 gtk_widget_hide(color_dialog);
2126 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2131 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2132 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2133 newstyle->bg[GTK_STATE_NORMAL] = color;
2134 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2135 newstyle->bg[GTK_STATE_ACTIVE] = color;
2137 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2140 static void prefs_enable_message_color_toggled(void)
2144 is_active = gtk_toggle_button_get_active
2145 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2146 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2147 prefs_common.enable_color = is_active;
2150 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2154 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2155 prefs_common.recycle_quote_colors = is_active;
2158 static void prefs_quote_description(void)
2160 if (!quote_desc_win)
2161 prefs_quote_description_create();
2163 gtk_widget_show(quote_desc_win);
2165 gtk_widget_hide(quote_desc_win);
2168 static void prefs_quote_description_create(void)
2176 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2177 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2178 _("Description of symbols"));
2179 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2180 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2181 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2182 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2184 vbox = gtk_vbox_new(FALSE, 8);
2185 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2187 hbox = gtk_hbox_new(FALSE, 4);
2188 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2190 label = gtk_label_new
2201 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2202 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2204 label = gtk_label_new
2207 "Full Name of Sender\n"
2208 "First Name of Sender\n"
2209 "Initial of Sender\n"
2215 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2216 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2218 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2219 NULL, NULL, NULL, NULL);
2220 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2222 gtk_widget_grab_default(ok_btn);
2223 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2224 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2226 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2227 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2229 gtk_widget_show_all(vbox);
2232 /* functions for setting items of SummaryView */
2234 static struct _SummaryDisplayItem
2238 GtkWidget *chkbtn[N_SUMMARY_COLS];
2241 GtkWidget *cancel_btn;
2244 #define SET_ACTIVE(column, var) \
2245 gtk_toggle_button_set_active \
2246 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2248 #define GET_ACTIVE(column, var) \
2249 prefs_common.var = gtk_toggle_button_get_active \
2250 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2252 void prefs_summary_display_item_set(void)
2254 static gboolean cancelled;
2256 if (!summarydispitem.window)
2257 prefs_summary_display_item_dialog_create(&cancelled);
2258 gtk_widget_grab_focus(summarydispitem.ok_btn);
2259 gtk_widget_show(summarydispitem.window);
2260 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2262 SET_ACTIVE(S_COL_MARK, show_mark);
2263 SET_ACTIVE(S_COL_UNREAD, show_unread);
2264 SET_ACTIVE(S_COL_MIME, show_mime);
2265 SET_ACTIVE(S_COL_NUMBER, show_number);
2266 SET_ACTIVE(S_COL_SCORE, show_score);
2267 SET_ACTIVE(S_COL_SIZE, show_size);
2268 SET_ACTIVE(S_COL_DATE, show_date);
2269 SET_ACTIVE(S_COL_FROM, show_from);
2270 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2273 gtk_widget_hide(summarydispitem.window);
2275 if (cancelled != TRUE) {
2276 GET_ACTIVE(S_COL_MARK, show_mark);
2277 GET_ACTIVE(S_COL_UNREAD, show_unread);
2278 GET_ACTIVE(S_COL_MIME, show_mime);
2279 GET_ACTIVE(S_COL_NUMBER, show_number);
2280 GET_ACTIVE(S_COL_SCORE, show_score);
2281 GET_ACTIVE(S_COL_SIZE, show_size);
2282 GET_ACTIVE(S_COL_DATE, show_date);
2283 GET_ACTIVE(S_COL_FROM, show_from);
2284 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2286 main_window_reflect_prefs_all();
2290 #define SET_CHECK_BUTTON(column, label) \
2292 summarydispitem.chkbtn[column] = \
2293 gtk_check_button_new_with_label(label); \
2294 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2295 summarydispitem.chkbtn[column], \
2299 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2303 GtkWidget *chkbtn_vbox;
2306 GtkWidget *cancel_btn;
2308 window = gtk_window_new(GTK_WINDOW_DIALOG);
2309 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2310 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2311 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2312 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2313 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2314 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2315 GTK_SIGNAL_FUNC(display_item_delete_event),
2317 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2318 GTK_SIGNAL_FUNC(display_item_key_pressed),
2321 vbox = gtk_vbox_new(FALSE, 8);
2322 gtk_container_add(GTK_CONTAINER(window), vbox);
2324 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2325 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2327 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2328 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2329 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2330 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2331 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2332 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2333 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2334 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2335 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2337 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2338 &cancel_btn, _("Cancel"), NULL, NULL);
2339 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2340 gtk_widget_grab_default(ok_btn);
2342 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2343 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2344 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2345 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2347 gtk_widget_show_all(vbox);
2349 summarydispitem.window = window;
2350 summarydispitem.ok_btn = ok_btn;
2351 summarydispitem.cancel_btn = cancel_btn;
2354 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2360 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2366 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2367 gboolean *cancelled)
2375 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2376 gboolean *cancelled)
2378 if (event && event->keyval == GDK_Escape) {
2384 static void prefs_font_select(GtkButton *button)
2386 if (!font_sel_win) {
2387 font_sel_win = gtk_font_selection_dialog_new
2388 (_("Font selection"));
2389 gtk_window_position(GTK_WINDOW(font_sel_win),
2390 GTK_WIN_POS_CENTER);
2391 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2392 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2395 (GTK_OBJECT(font_sel_win), "key_press_event",
2396 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2399 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2401 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2403 gtk_signal_connect_object
2404 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2406 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2407 GTK_OBJECT(font_sel_win));
2410 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2411 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2412 gtk_widget_grab_focus
2413 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2414 gtk_widget_show(font_sel_win);
2417 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2421 if (event && event->keyval == GDK_Escape)
2422 gtk_widget_hide(font_sel_win);
2425 static void prefs_font_selection_ok(GtkButton *button)
2429 fontname = gtk_font_selection_dialog_get_font_name
2430 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2433 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2437 gtk_widget_hide(font_sel_win);
2440 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2443 GtkWidget *menuitem;
2446 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2447 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2448 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2449 g_free(*((gchar **)pparam->data));
2450 *((gchar **)pparam->data) = g_strdup(charset);
2453 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2456 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2458 GtkWidget *menuitem;
2462 g_return_if_fail(optmenu != NULL);
2463 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2465 menu = gtk_option_menu_get_menu(optmenu);
2466 for (cur = GTK_MENU_SHELL(menu)->children;
2467 cur != NULL; cur = cur->next) {
2468 menuitem = GTK_WIDGET(cur->data);
2469 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2470 if (!strcmp(charset, *((gchar **)pparam->data))) {
2471 gtk_option_menu_set_history(optmenu, n);
2477 gtk_option_menu_set_history(optmenu, 0);
2478 prefs_common_charset_set_data_from_optmenu(pparam);
2481 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2484 if (event && event->keyval == GDK_Escape)
2485 prefs_common_cancel();
2488 static void prefs_common_ok(void)
2490 prefs_common_apply();
2491 gtk_widget_hide(dialog.window);
2492 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2493 gtk_widget_hide(quote_desc_win);
2495 inc_autocheck_timer_set();
2498 static void prefs_common_apply(void)
2500 prefs_set_data_from_dialog(param);
2501 main_window_reflect_prefs_all();
2502 prefs_common_save_config();
2505 static void prefs_common_cancel(void)
2507 gtk_widget_hide(dialog.window);
2508 inc_autocheck_timer_set();