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 gint prefs_common_deleted (GtkWidget *widget,
576 static void prefs_common_key_pressed (GtkWidget *widget,
579 static void prefs_common_ok (void);
580 static void prefs_common_apply (void);
581 static void prefs_common_cancel (void);
583 void prefs_common_read_config(void)
585 prefs_read_config(param, "Common", COMMON_RC);
588 void prefs_common_save_config(void)
590 prefs_save_config(param, "Common", COMMON_RC);
593 void prefs_common_open(void)
595 inc_autocheck_timer_remove();
597 if (!dialog.window) {
598 prefs_common_create();
601 manage_window_set_transient(GTK_WINDOW(dialog.window));
602 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
603 gtk_widget_grab_focus(dialog.ok_btn);
605 prefs_set_dialog(param);
607 gtk_widget_show(dialog.window);
610 static void prefs_common_create(void)
614 debug_print(_("Creating common preferences window...\n"));
616 prefs_dialog_create(&dialog);
617 gtk_window_set_title (GTK_WINDOW(dialog.window),
618 _("Common Preferences"));
619 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
620 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
621 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
622 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
623 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
624 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
625 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
626 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
627 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
628 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
629 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
630 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
631 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
632 GTK_SIGNAL_FUNC(prefs_common_cancel),
633 GTK_OBJECT(dialog.window));
635 /* create all widgets on notebook */
636 prefs_receive_create();
637 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
639 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
640 prefs_compose_create();
641 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
642 prefs_display_create();
643 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
644 prefs_message_create();
645 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
647 prefs_privacy_create();
648 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
650 prefs_interface_create();
651 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
652 prefs_other_create();
653 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
655 gtk_widget_show_all(dialog.window);
658 static void prefs_receive_create(void)
662 GtkWidget *frame_incext;
663 GtkWidget *checkbtn_incext;
665 GtkWidget *label_incext;
666 GtkWidget *entry_incext;
667 GtkWidget *button_incext;
669 GtkWidget *frame_spool;
670 GtkWidget *checkbtn_local;
671 GtkWidget *checkbtn_filter_on_inc;
672 GtkWidget *label_spool;
673 GtkWidget *entry_spool;
675 GtkWidget *hbox_autochk;
676 GtkWidget *checkbtn_autochk;
677 GtkWidget *label_autochk1;
678 GtkObject *spinbtn_autochk_adj;
679 GtkWidget *spinbtn_autochk;
680 GtkWidget *label_autochk2;
681 GtkWidget *checkbtn_chkonstartup;
683 GtkWidget *frame_news;
684 GtkWidget *label_maxarticle;
685 GtkWidget *spinbtn_maxarticle;
686 GtkObject *spinbtn_maxarticle_adj;
688 vbox1 = gtk_vbox_new (FALSE, VSPACING);
689 gtk_widget_show (vbox1);
690 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
691 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
693 PACK_FRAME(vbox1, frame_incext, _("External program"));
695 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
696 gtk_widget_show (vbox2);
697 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
698 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
700 /* Use of external incorporation program */
701 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
702 _("Use external program for incorporation"));
704 hbox = gtk_hbox_new (FALSE, 8);
705 gtk_widget_show (hbox);
706 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
707 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
709 label_incext = gtk_label_new (_("Program path"));
710 gtk_widget_show (label_incext);
711 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
713 entry_incext = gtk_entry_new ();
714 gtk_widget_show (entry_incext);
715 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
717 button_incext = gtk_button_new_with_label ("... ");
718 gtk_widget_show (button_incext);
719 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
721 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
723 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
724 gtk_widget_show (vbox2);
725 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
726 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
728 hbox = gtk_hbox_new (FALSE, 32);
729 gtk_widget_show (hbox);
730 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
732 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
733 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
734 _("Filter on incorporation"));
735 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
737 hbox = gtk_hbox_new (FALSE, 8);
738 gtk_widget_show (hbox);
739 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
740 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
742 label_spool = gtk_label_new (_("Spool directory"));
743 gtk_widget_show (label_spool);
744 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
746 entry_spool = gtk_entry_new ();
747 gtk_widget_show (entry_spool);
748 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
750 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
751 gtk_widget_show (vbox2);
752 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
755 hbox_autochk = gtk_hbox_new (FALSE, 8);
756 gtk_widget_show (hbox_autochk);
757 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
759 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
760 _("Auto-check new mail"));
762 label_autochk1 = gtk_label_new (_("each"));
763 gtk_widget_show (label_autochk1);
764 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
766 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
767 spinbtn_autochk = gtk_spin_button_new
768 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
769 gtk_widget_show (spinbtn_autochk);
770 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
771 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
772 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
774 label_autochk2 = gtk_label_new (_("minute(s)"));
775 gtk_widget_show (label_autochk2);
776 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
778 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
779 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
780 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
782 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
783 _("Check new mail on startup"));
785 PACK_FRAME(vbox1, frame_news, _("News"));
787 hbox = gtk_hbox_new (FALSE, 8);
788 gtk_widget_show (hbox);
789 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
790 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
792 label_maxarticle = gtk_label_new
793 (_("Maximum article number to download\n"
794 "(unlimited if 0 is specified)"));
795 gtk_widget_show (label_maxarticle);
796 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
797 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
799 spinbtn_maxarticle_adj =
800 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
801 spinbtn_maxarticle = gtk_spin_button_new
802 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
803 gtk_widget_show (spinbtn_maxarticle);
804 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
806 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
807 gtk_spin_button_set_numeric
808 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
810 receive.checkbtn_incext = checkbtn_incext;
811 receive.entry_incext = entry_incext;
812 receive.button_incext = button_incext;
814 receive.checkbtn_local = checkbtn_local;
815 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
816 receive.entry_spool = entry_spool;
818 receive.checkbtn_autochk = checkbtn_autochk;
819 receive.spinbtn_autochk = spinbtn_autochk;
820 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
822 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
824 receive.spinbtn_maxarticle = spinbtn_maxarticle;
825 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
828 static void prefs_send_create(void)
832 GtkWidget *frame_sendext;
833 GtkWidget *vbox_sendext;
834 GtkWidget *checkbtn_sendext;
836 GtkWidget *label_sendext;
837 GtkWidget *entry_sendext;
838 GtkWidget *button_sendext;
839 GtkWidget *checkbtn_savemsg;
840 GtkWidget *checkbtn_queuemsg;
841 GtkWidget *label_outcharset;
843 GtkWidget *optmenu_menu;
846 vbox1 = gtk_vbox_new (FALSE, VSPACING);
847 gtk_widget_show (vbox1);
848 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
849 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
851 PACK_FRAME(vbox1, frame_sendext, _("External program"));
853 gtk_widget_set_sensitive(frame_sendext, FALSE);
855 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
856 gtk_widget_show (vbox_sendext);
857 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
858 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
860 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
861 _("Use external program for sending"));
863 hbox1 = gtk_hbox_new (FALSE, 8);
864 gtk_widget_show (hbox1);
865 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
866 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
868 label_sendext = gtk_label_new (_("Program path"));
869 gtk_widget_show (label_sendext);
870 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
872 entry_sendext = gtk_entry_new ();
873 gtk_widget_show (entry_sendext);
874 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
876 button_sendext = gtk_button_new_with_label ("... ");
877 gtk_widget_show (button_sendext);
878 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
880 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
881 gtk_widget_show (vbox2);
882 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
884 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
885 _("Save sent message to outbox"));
886 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
887 _("Queue message that failed to send"));
889 hbox1 = gtk_hbox_new (FALSE, 8);
890 gtk_widget_show (hbox1);
891 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
893 label_outcharset = gtk_label_new (_("Outgoing codeset"));
894 gtk_widget_show (label_outcharset);
895 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
897 optmenu = gtk_option_menu_new ();
898 gtk_widget_show (optmenu);
899 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
901 optmenu_menu = gtk_menu_new ();
903 #define SET_MENUITEM(str, charset) \
905 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
908 SET_MENUITEM(_("Automatic"), CS_AUTO);
909 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
911 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
913 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
915 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
916 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
917 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
918 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
919 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
920 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
921 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
922 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
923 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
924 #endif /* HAVE_LIBJCONV */
925 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
927 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
928 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
931 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
932 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
934 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
935 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
937 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
938 #endif /* HAVE_LIBJCONV */
940 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
942 send.checkbtn_sendext = checkbtn_sendext;
943 send.entry_sendext = entry_sendext;
944 send.button_sendext = button_sendext;
946 send.checkbtn_savemsg = checkbtn_savemsg;
947 send.checkbtn_queuemsg = checkbtn_queuemsg;
949 send.optmenu_charset = optmenu;
952 static void prefs_compose_create(void)
955 GtkWidget *frame_quote;
956 GtkWidget *vbox_quote;
957 GtkWidget *checkbtn_quote;
959 GtkWidget *label_quotemark;
960 GtkWidget *entry_quotemark;
962 GtkWidget *label_quotefmt;
963 GtkWidget *btn_quotedesc;
964 GtkWidget *scrolledwin_quotefmt;
965 GtkWidget *text_quotefmt;
967 GtkWidget *frame_sig;
969 GtkWidget *checkbtn_autosig;
970 GtkWidget *label_sigsep;
971 GtkWidget *entry_sigsep;
973 GtkWidget *vbox_linewrap;
976 GtkWidget *label_linewrap;
977 GtkObject *spinbtn_linewrap_adj;
978 GtkWidget *spinbtn_linewrap;
979 GtkWidget *checkbtn_wrapquote;
980 GtkWidget *checkbtn_wrapatsend;
982 vbox1 = gtk_vbox_new (FALSE, VSPACING);
983 gtk_widget_show (vbox1);
984 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
985 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
987 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
989 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
990 gtk_widget_show (vbox_quote);
991 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
992 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
994 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
995 _("Quote message when replying"));
997 hbox1 = gtk_hbox_new (FALSE, 8);
998 gtk_widget_show (hbox1);
999 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1001 label_quotemark = gtk_label_new (_("Quotation mark"));
1002 gtk_widget_show (label_quotemark);
1003 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1005 entry_quotemark = gtk_entry_new ();
1006 gtk_widget_show (entry_quotemark);
1007 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1008 gtk_widget_set_usize (entry_quotemark, 64, -1);
1010 hbox2 = gtk_hbox_new (FALSE, 0);
1011 gtk_widget_show (hbox2);
1012 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1014 label_quotefmt = gtk_label_new (_("Quotation format:"));
1015 gtk_widget_show (label_quotefmt);
1016 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1019 gtk_button_new_with_label (_(" Description of symbols "));
1020 gtk_widget_show (btn_quotedesc);
1021 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1022 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1023 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1025 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1026 gtk_widget_show (scrolledwin_quotefmt);
1027 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1028 gtk_scrolled_window_set_policy
1029 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1030 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1032 text_quotefmt = gtk_text_new (NULL, NULL);
1033 gtk_widget_show (text_quotefmt);
1034 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1035 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1036 gtk_widget_set_usize(text_quotefmt, -1, 60);
1038 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1040 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1041 gtk_widget_show (vbox_sig);
1042 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1043 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1045 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1046 _("Insert signature automatically"));
1048 hbox1 = gtk_hbox_new (FALSE, 8);
1049 gtk_widget_show (hbox1);
1050 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1052 label_sigsep = gtk_label_new (_("Signature separator"));
1053 gtk_widget_show (label_sigsep);
1054 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1056 entry_sigsep = gtk_entry_new ();
1057 gtk_widget_show (entry_sigsep);
1058 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1059 gtk_widget_set_usize (entry_sigsep, 64, -1);
1062 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1063 gtk_widget_show (vbox_linewrap);
1064 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1066 hbox3 = gtk_hbox_new (FALSE, 8);
1067 gtk_widget_show (hbox3);
1068 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1070 label_linewrap = gtk_label_new (_("Wrap messages at"));
1071 gtk_widget_show (label_linewrap);
1072 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1074 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1075 spinbtn_linewrap = gtk_spin_button_new
1076 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1077 gtk_widget_show (spinbtn_linewrap);
1078 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1079 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1080 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1082 label_linewrap = gtk_label_new (_("characters"));
1083 gtk_widget_show (label_linewrap);
1084 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1086 hbox4 = gtk_hbox_new (FALSE, 32);
1087 gtk_widget_show (hbox4);
1088 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1090 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1092 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1094 compose.checkbtn_quote = checkbtn_quote;
1095 compose.entry_quotemark = entry_quotemark;
1096 compose.text_quotefmt = text_quotefmt;
1097 compose.checkbtn_autosig = checkbtn_autosig;
1098 compose.entry_sigsep = entry_sigsep;
1100 compose.spinbtn_linewrap = spinbtn_linewrap;
1101 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1102 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1103 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1107 /* alfons - nice ui for darko */
1109 static void date_format_close_btn_clicked(GtkButton *button, GtkWidget **widget)
1113 g_return_if_fail(widget != NULL);
1114 g_return_if_fail(*widget != NULL);
1115 g_return_if_fail(entry_datefmt != NULL);
1116 g_return_if_fail(datefmt_sample != NULL);
1118 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1119 g_free(prefs_common.date_format);
1120 prefs_common.date_format = text;
1121 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1123 gtk_widget_destroy(*widget);
1127 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1129 g_return_if_fail(widget != NULL);
1130 g_return_if_fail(*widget != NULL);
1135 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1138 struct tm *cal_time;
1141 cur_time = time(NULL);
1142 cal_time = localtime(&cur_time);
1144 text = gtk_editable_get_chars(editable, 0, -1);
1146 strftime(buffer, sizeof buffer, text, cal_time);
1148 gtk_label_set_text(example, buffer);
1151 static GtkWidget *create_date_format(GtkButton *button, void *data)
1153 static GtkWidget *date_format = NULL;
1155 GtkWidget *scrolledwindow1;
1156 GtkWidget *date_format_list;
1174 { "%a", _("the full abbreviated weekday name") },
1175 { "%A", _("the full weekday name") },
1176 { "%b", _("the abbreviated month name") },
1177 { "%B", _("the full month name") },
1178 { "%c", _("the preferred date and time for the current locale") },
1179 { "%C", _("the century number (year/100)") },
1180 { "%d", _("the day of the month as a decimal number") },
1181 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1182 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1183 { "%j", _("the day of the year as a decimal number") },
1184 { "%m", _("the month as a decimal number") },
1185 { "%M", _("the minute as a decimal number") },
1186 { "%p", _("either AM or PM") },
1187 { "%S", _("the second as a decimal number") },
1188 { "%w", _("the day of the week as a decimal number") },
1189 { "%x", _("the preferred date for the current locale") },
1190 { "%y", _("the last two digits of a year") },
1191 { "%Y", _("the year as a decimal number") },
1192 { "%Z", _("the time zone or name or abbreviation") }
1195 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1197 if (date_format) return date_format;
1199 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1200 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1201 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1202 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 200);
1204 vbox1 = gtk_vbox_new(FALSE, 10);
1205 gtk_widget_show(vbox1);
1206 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1208 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1209 gtk_widget_show(scrolledwindow1);
1210 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1212 date_format_list = gtk_clist_new(2);
1213 gtk_widget_show(date_format_list);
1214 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1215 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1216 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1217 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1219 label3 = gtk_label_new(_("Date Format"));
1220 gtk_widget_show(label3);
1221 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1223 label4 = gtk_label_new(_("Date Format Description"));
1224 gtk_widget_show(label4);
1225 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1227 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1229 /* phoney casting necessary because of gtk... */
1230 text[0] = (gchar *) time_format[tmp].fmt;
1231 text[1] = (gchar *) time_format[tmp].txt;
1233 gtk_clist_append(GTK_CLIST(date_format_list), text);
1236 table2 = gtk_table_new(1, 1, TRUE);
1237 gtk_widget_show(table2);
1238 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1240 vbox2 = gtk_vbox_new(FALSE, 0);
1241 gtk_widget_show(vbox2);
1242 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1243 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1244 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1246 vbox3 = gtk_vbox_new(TRUE, 4);
1247 gtk_widget_show(vbox3);
1248 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1250 hbox2 = gtk_hbox_new(FALSE, 0);
1251 gtk_widget_show(hbox2);
1252 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1254 label5 = gtk_label_new(_("Date format"));
1255 gtk_widget_show(label5);
1256 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1257 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1259 datefmt_sample = gtk_entry_new_with_max_length(300);
1260 gtk_widget_show(datefmt_sample);
1261 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1263 hbox1 = gtk_hbox_new(FALSE, 0);
1264 gtk_widget_show(hbox1);
1265 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1267 label6 = gtk_label_new(_("Example"));
1268 gtk_widget_show(label6);
1269 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1270 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1272 label7 = gtk_label_new(_("label7"));
1273 gtk_widget_show(label7);
1274 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1275 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1277 hbox3 = gtk_hbox_new(TRUE, 0);
1278 gtk_widget_show(hbox3);
1279 gtk_box_pack_end(GTK_BOX(vbox3), hbox3, FALSE, FALSE, 0);
1281 button1 = gtk_button_new_with_label(_("Close"));
1282 gtk_widget_show(button1);
1283 gtk_box_pack_start(GTK_BOX(hbox3), button1, FALSE, TRUE, 144);
1285 /* set the current format */
1286 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1287 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1290 gtk_signal_connect(GTK_OBJECT(button1), "clicked",
1291 GTK_SIGNAL_FUNC(date_format_close_btn_clicked), &date_format);
1293 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1294 GTK_SIGNAL_FUNC(date_format_on_delete), &date_format);
1296 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1297 GTK_SIGNAL_FUNC(date_format_entry_on_change), label7);
1299 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1300 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1302 gtk_widget_show(date_format);
1306 static void prefs_display_create(void)
1309 GtkWidget *frame_font;
1311 GtkWidget *label_textfont;
1312 GtkWidget *entry_textfont;
1313 GtkWidget *button_textfont;
1314 GtkWidget *chkbtn_folder_unread;
1315 GtkWidget *chkbtn_transhdr;
1316 GtkWidget *frame_summary;
1318 GtkWidget *chkbtn_swapfrom;
1319 GtkWidget *chkbtn_hscrollbar;
1320 GtkWidget *chkbtn_useaddrbook;
1322 GtkWidget *label_datefmt;
1323 GtkWidget *button_dispitem;
1325 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1326 gtk_widget_show (vbox1);
1327 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1328 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1330 PACK_FRAME(vbox1, frame_font, _("Font"));
1332 table1 = gtk_table_new (1, 3, FALSE);
1333 gtk_widget_show (table1);
1334 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1335 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1336 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1337 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1339 label_textfont = gtk_label_new (_("Text"));
1340 gtk_widget_show (label_textfont);
1341 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1342 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1344 entry_textfont = gtk_entry_new ();
1345 gtk_widget_show (entry_textfont);
1346 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1347 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1349 button_textfont = gtk_button_new_with_label ("... ");
1350 gtk_widget_show (button_textfont);
1351 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1353 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1354 GTK_SIGNAL_FUNC (prefs_font_select), NULL);
1356 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1357 gtk_widget_show (vbox2);
1358 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1361 (vbox2, chkbtn_transhdr,
1362 _("Translate header name (such as `From:', `Subject:')"));
1364 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1365 _("Display unread number next to folder name"));
1367 /* ---- Summary ---- */
1369 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1371 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1372 gtk_widget_show (vbox2);
1373 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1374 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1377 (vbox2, chkbtn_swapfrom,
1378 _("Display recipient on `From' column if sender is yourself"));
1380 (vbox2, chkbtn_useaddrbook,
1381 _("Display sender using address book"));
1383 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1385 hbox1 = gtk_hbox_new (FALSE, 8);
1386 gtk_widget_show (hbox1);
1387 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1389 label_datefmt = gtk_button_new_with_label (_("Date format"));
1390 gtk_widget_show (label_datefmt);
1391 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1392 gtk_signal_connect(GTK_OBJECT(label_datefmt), "clicked",
1393 GTK_SIGNAL_FUNC(create_date_format), NULL);
1395 entry_datefmt = gtk_entry_new ();
1396 gtk_widget_show (entry_datefmt);
1397 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1399 hbox1 = gtk_hbox_new (FALSE, 8);
1400 gtk_widget_show (hbox1);
1401 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1403 button_dispitem = gtk_button_new_with_label
1404 (_(" Set display item of summary... "));
1405 gtk_widget_show (button_dispitem);
1406 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1407 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1408 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1411 display.entry_textfont = entry_textfont;
1412 display.button_textfont = button_textfont;
1414 display.chkbtn_folder_unread = chkbtn_folder_unread;
1415 display.chkbtn_transhdr = chkbtn_transhdr;
1417 display.chkbtn_swapfrom = chkbtn_swapfrom;
1418 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1419 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1422 static void prefs_message_create(void)
1427 GtkWidget *chkbtn_enablecol;
1428 GtkWidget *button_edit_col;
1429 GtkWidget *chkbtn_mbalnum;
1430 GtkWidget *chkbtn_disphdrpane;
1431 GtkWidget *chkbtn_disphdr;
1432 GtkWidget *button_edit_disphdr;
1433 GtkWidget *hbox_linespc;
1434 GtkWidget *label_linespc;
1435 GtkObject *spinbtn_linespc_adj;
1436 GtkWidget *spinbtn_linespc;
1437 GtkWidget *chkbtn_headspc;
1439 GtkWidget *frame_scr;
1440 GtkWidget *vbox_scr;
1441 GtkWidget *chkbtn_smoothscroll;
1442 GtkWidget *hbox_scr;
1443 GtkWidget *label_scr;
1444 GtkObject *spinbtn_scrollstep_adj;
1445 GtkWidget *spinbtn_scrollstep;
1446 GtkWidget *chkbtn_halfpage;
1448 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1449 gtk_widget_show (vbox1);
1450 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1451 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1453 hbox1 = gtk_hbox_new (FALSE, 8);
1454 gtk_widget_show (hbox1);
1455 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1457 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1458 _("Enable coloration of message"));
1459 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1460 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1463 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1464 gtk_widget_show (button_edit_col);
1465 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1466 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1467 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1469 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1471 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1472 gtk_widget_show (vbox2);
1473 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1476 (vbox2, chkbtn_mbalnum,
1477 _("Display 2-byte alphabet and numeric with 1-byte character"));
1478 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1479 _("Display header pane above message view"));
1481 hbox1 = gtk_hbox_new (FALSE, 8);
1482 gtk_widget_show (hbox1);
1483 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1485 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1486 _("Display short headers on message view"));
1488 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1489 gtk_widget_show (button_edit_disphdr);
1490 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1492 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1493 GTK_SIGNAL_FUNC (prefs_display_header_open),
1496 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1498 hbox1 = gtk_hbox_new (FALSE, 32);
1499 gtk_widget_show (hbox1);
1500 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1502 hbox_linespc = gtk_hbox_new (FALSE, 8);
1503 gtk_widget_show (hbox1);
1504 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1506 label_linespc = gtk_label_new (_("Line space"));
1507 gtk_widget_show (label_linespc);
1508 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1511 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1512 spinbtn_linespc = gtk_spin_button_new
1513 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1514 gtk_widget_show (spinbtn_linespc);
1515 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1517 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1518 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1520 label_linespc = gtk_label_new (_("pixel(s)"));
1521 gtk_widget_show (label_linespc);
1522 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1525 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1527 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1529 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1530 gtk_widget_show (vbox_scr);
1531 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1532 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1534 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1536 hbox1 = gtk_hbox_new (FALSE, 32);
1537 gtk_widget_show (hbox1);
1538 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1540 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1542 hbox_scr = gtk_hbox_new (FALSE, 8);
1543 gtk_widget_show (hbox_scr);
1544 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1546 label_scr = gtk_label_new (_("Step"));
1547 gtk_widget_show (label_scr);
1548 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1550 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1551 spinbtn_scrollstep = gtk_spin_button_new
1552 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1553 gtk_widget_show (spinbtn_scrollstep);
1554 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1556 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1557 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1560 label_scr = gtk_label_new (_("pixel(s)"));
1561 gtk_widget_show (label_scr);
1562 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1564 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1566 message.chkbtn_enablecol = chkbtn_enablecol;
1567 message.button_edit_col = button_edit_col;
1568 message.chkbtn_mbalnum = chkbtn_mbalnum;
1569 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1570 message.chkbtn_disphdr = chkbtn_disphdr;
1571 message.spinbtn_linespc = spinbtn_linespc;
1572 message.chkbtn_headspc = chkbtn_headspc;
1574 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1575 message.spinbtn_scrollstep = spinbtn_scrollstep;
1576 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1577 message.chkbtn_halfpage = chkbtn_halfpage;
1581 static void prefs_privacy_create(void)
1586 GtkWidget *checkbtn_gpgme_warning;
1587 GtkWidget *checkbtn_default_encrypt;
1588 GtkWidget *checkbtn_default_sign;
1589 GtkWidget *checkbtn_auto_check_signatures;
1590 GtkWidget *checkbtn_passphrase_grab;
1592 GtkWidget *menuitem;
1594 GtkWidget *optmenu_menu;
1596 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1597 gtk_widget_show (vbox1);
1598 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1599 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1601 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1602 gtk_widget_show (vbox2);
1603 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1606 (vbox2, checkbtn_gpgme_warning,
1607 _("Display warning on startup if GnuPG does not work"));
1609 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1610 _("Encrypt message by default"));
1612 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1613 _("Sign message by default"));
1615 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1616 _("Automatically check signatures"));
1619 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1620 _("Grab input while entering a passphrase"));
1623 hbox1 = gtk_hbox_new (FALSE, 8);
1624 gtk_widget_show (hbox1);
1625 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1627 /* create default signkey box */
1628 label = gtk_label_new (_("Default Sign Key"));
1629 gtk_widget_show (label);
1630 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1631 optmenu = gtk_option_menu_new ();
1632 gtk_widget_show (optmenu);
1633 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1634 optmenu_menu = gtk_menu_new ();
1636 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1637 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1638 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1639 /* FIXME: disabled because not implemented */
1640 gtk_widget_set_sensitive(optmenu, FALSE);
1642 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1643 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1644 privacy.checkbtn_default_sign = checkbtn_default_sign;
1645 privacy.checkbtn_auto_check_signatures
1646 = checkbtn_auto_check_signatures;
1647 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1648 privacy.optmenu_default_signkey = optmenu;
1652 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1656 GtkWidget *menuitem;
1659 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1660 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1661 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1662 g_free(*((gchar **)pparam->data));
1663 *((gchar **)pparam->data) = g_strdup(charset);
1667 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1671 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1673 GtkWidget *menuitem;
1677 g_return_if_fail(optmenu != NULL);
1678 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1680 menu = gtk_option_menu_get_menu(optmenu);
1681 for (cur = GTK_MENU_SHELL(menu)->children;
1682 cur != NULL; cur = cur->next) {
1683 menuitem = GTK_WIDGET(cur->data);
1684 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1685 if (!strcmp(charset, *((gchar **)pparam->data))) {
1686 gtk_option_menu_set_history(optmenu, n);
1692 gtk_option_menu_set_history(optmenu, 0);
1693 prefs_common_charset_set_data_from_optmenu(pparam);
1696 #endif /* USE_GPGME */
1698 static void prefs_interface_create(void)
1703 GtkWidget *checkbtn_emacs;
1704 GtkWidget *checkbtn_openunread;
1705 GtkWidget *checkbtn_openinbox;
1706 GtkWidget *checkbtn_immedexec;
1707 GtkWidget *checkbtn_addaddrbyclick;
1710 GtkWidget *frame_exit;
1711 GtkWidget *vbox_exit;
1713 GtkWidget *checkbtn_confonexit;
1714 GtkWidget *checkbtn_cleanonexit;
1715 GtkWidget *checkbtn_askonclean;
1716 GtkWidget *checkbtn_warnqueued;
1717 GtkWidget *checkbtn_returnreceipt;
1719 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1720 gtk_widget_show (vbox1);
1721 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1722 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1724 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1725 gtk_widget_show (vbox2);
1726 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1728 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1729 _("Emulate the behavior of mouse operation of\n"
1730 "Emacs-based mailer"));
1731 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1735 (vbox2, checkbtn_openunread,
1736 _("Open first unread message when entering a folder"));
1739 (vbox2, checkbtn_openinbox,
1740 _("Go to inbox after receiving new mail"));
1742 vbox3 = gtk_vbox_new (FALSE, 0);
1743 gtk_widget_show (vbox3);
1744 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1747 (vbox3, checkbtn_immedexec,
1748 _("Execute immediately when moving or deleting messages"));
1750 hbox1 = gtk_hbox_new (FALSE, 0);
1751 gtk_widget_show (hbox1);
1752 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1754 label = gtk_label_new
1755 (_("(Messages will be just marked till execution\n"
1756 " if this is turned off)"));
1757 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1758 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1761 (vbox2, checkbtn_addaddrbyclick,
1762 _("Add address to destination when double-clicked"));
1764 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1766 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1767 gtk_widget_show (vbox_exit);
1768 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1769 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1771 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1772 _("Confirm on exit"));
1774 hbox1 = gtk_hbox_new (FALSE, 32);
1775 gtk_widget_show (hbox1);
1776 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1778 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1779 _("Empty trash on exit"));
1780 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1781 _("Ask before emptying"));
1782 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1784 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1785 _("Warn if there are queued messages"));
1787 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1788 _("Send return receipt on request"));
1790 interface.checkbtn_emacs = checkbtn_emacs;
1791 interface.checkbtn_openunread = checkbtn_openunread;
1792 interface.checkbtn_openinbox = checkbtn_openinbox;
1793 interface.checkbtn_immedexec = checkbtn_immedexec;
1794 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1795 interface.checkbtn_confonexit = checkbtn_confonexit;
1796 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1797 interface.checkbtn_askonclean = checkbtn_askonclean;
1798 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1799 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1802 static void prefs_other_create(void)
1807 GtkWidget *uri_frame;
1808 GtkWidget *uri_label;
1809 GtkWidget *uri_combo;
1810 GtkWidget *uri_entry;
1812 GtkWidget *print_frame;
1813 GtkWidget *printcmd_label;
1814 GtkWidget *printcmd_entry;
1816 GtkWidget *exteditor_frame;
1817 GtkWidget *exteditor_label;
1818 GtkWidget *exteditor_combo;
1819 GtkWidget *exteditor_entry;
1821 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1822 gtk_widget_show (vbox1);
1823 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1824 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1826 PACK_FRAME(vbox1, uri_frame,
1827 _("External Web browser (%s will be replaced with URI)"));
1829 hbox1 = gtk_hbox_new (FALSE, 8);
1830 gtk_widget_show (hbox1);
1831 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1832 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1834 uri_label = gtk_label_new (_("Command"));
1835 gtk_widget_show(uri_label);
1836 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1838 uri_combo = gtk_combo_new ();
1839 gtk_widget_show (uri_combo);
1840 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1841 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1842 "netscape -remote 'openURL(%s,raise)'",
1843 "gnome-moz-remote --raise --newwin '%s'",
1844 "kterm -e w3m '%s'",
1845 "kterm -e lynx '%s'",
1848 uri_entry = GTK_COMBO (uri_combo)->entry;
1850 PACK_FRAME(vbox1, print_frame,
1851 _("Printing (%s will be replaced with file name)"));
1853 hbox1 = gtk_hbox_new (FALSE, 8);
1854 gtk_widget_show (hbox1);
1855 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
1856 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1858 printcmd_label = gtk_label_new (_("Command"));
1859 gtk_widget_show (printcmd_label);
1860 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
1862 printcmd_entry = gtk_entry_new ();
1863 gtk_widget_show (printcmd_entry);
1864 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
1866 PACK_FRAME(vbox1, exteditor_frame,
1867 _("External editor (%s will be replaced with file name)"));
1869 hbox1 = gtk_hbox_new (FALSE, 8);
1870 gtk_widget_show (hbox1);
1871 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
1872 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1874 exteditor_label = gtk_label_new (_("Command"));
1875 gtk_widget_show (exteditor_label);
1876 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
1878 exteditor_combo = gtk_combo_new ();
1879 gtk_widget_show (exteditor_combo);
1880 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
1881 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
1883 "mgedit --no-fork %s",
1889 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
1891 other.uri_combo = uri_combo;
1892 other.uri_entry = uri_entry;
1893 other.printcmd_entry = printcmd_entry;
1895 other.exteditor_combo = exteditor_combo;
1896 other.exteditor_entry = exteditor_entry;
1899 void prefs_quote_colors_dialog(void)
1901 if (!quote_color_win)
1902 prefs_quote_colors_dialog_create();
1903 gtk_widget_show(quote_color_win);
1906 gtk_widget_hide(quote_color_win);
1908 textview_update_message_colors();
1909 main_window_reflect_prefs_all();
1912 static void prefs_quote_colors_dialog_create(void)
1917 GtkWidget *quotelevel1_label;
1918 GtkWidget *quotelevel2_label;
1919 GtkWidget *quotelevel3_label;
1920 GtkWidget *uri_label;
1923 //GtkWidget *cancel_btn;
1924 GtkWidget *recycle_colors_btn;
1925 GtkWidget *frame_colors;
1927 window = gtk_window_new(GTK_WINDOW_DIALOG);
1928 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
1929 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
1930 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
1931 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
1932 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
1934 vbox = gtk_vbox_new (FALSE, VSPACING);
1935 gtk_container_add (GTK_CONTAINER (window), vbox);
1936 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
1937 PACK_FRAME(vbox, frame_colors, _("Colors"));
1939 table = gtk_table_new (4, 2, FALSE);
1940 gtk_container_add (GTK_CONTAINER (frame_colors), table);
1941 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
1942 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1943 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1945 /* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */
1947 color_buttons.quote_level1_btn = gtk_button_new();
1948 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1,
1949 (GtkAttachOptions) (0),
1950 (GtkAttachOptions) (0), 0, 0);
1951 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
1952 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
1954 color_buttons.quote_level2_btn = gtk_button_new();
1955 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2,
1956 (GtkAttachOptions) (0),
1957 (GtkAttachOptions) (0), 0, 0);
1958 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
1959 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
1961 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
1962 gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3,
1963 (GtkAttachOptions) (0),
1964 (GtkAttachOptions) (0), 0, 0);
1965 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
1966 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
1968 color_buttons.uri_btn = gtk_button_new_with_label ("");
1969 gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4,
1970 (GtkAttachOptions) (0),
1971 (GtkAttachOptions) (0), 0, 0);
1972 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
1973 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
1975 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
1976 gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
1977 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1978 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
1979 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
1981 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
1982 gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
1983 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1984 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
1985 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
1987 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
1988 gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
1989 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1990 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
1991 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
1993 uri_label = gtk_label_new (_("URI link"));
1994 gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4,
1995 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1996 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
1997 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
1999 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2000 _("Recycle quote colors"));
2002 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2003 NULL, NULL, NULL, NULL);
2004 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2006 gtk_widget_grab_default(ok_btn);
2007 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2008 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2009 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2010 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2012 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2013 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2014 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2015 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2016 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2017 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2018 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2019 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2020 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2021 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2023 /* show message button colors and recycle options */
2024 set_button_bg_color(color_buttons.quote_level1_btn,
2025 prefs_common.quote_level1_col);
2026 set_button_bg_color(color_buttons.quote_level2_btn,
2027 prefs_common.quote_level2_col);
2028 set_button_bg_color(color_buttons.quote_level3_btn,
2029 prefs_common.quote_level3_col);
2030 set_button_bg_color(color_buttons.uri_btn,
2031 prefs_common.uri_col);
2032 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2033 prefs_common.recycle_quote_colors);
2035 gtk_widget_show_all(vbox);
2036 quote_color_win = window;
2039 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2041 gchar *type = (gchar *)data;
2042 gchar *title = NULL;
2043 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2045 GtkColorSelectionDialog *dialog;
2047 if(g_strcasecmp(type, "LEVEL1") == 0) {
2048 title = _("Pick color for quotation level 1");
2049 rgbvalue = prefs_common.quote_level1_col;
2050 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2051 title = _("Pick color for quotation level 2");
2052 rgbvalue = prefs_common.quote_level2_col;
2053 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2054 title = _("Pick color for quotation level 3");
2055 rgbvalue = prefs_common.quote_level3_col;
2056 } else if(g_strcasecmp(type, "URI") == 0) {
2057 title = _("Pick color for URI");
2058 rgbvalue = prefs_common.uri_col;
2059 } else { /* Should never be called */
2060 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2064 color_dialog = gtk_color_selection_dialog_new(title);
2065 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2066 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2067 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2069 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button),
2070 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2071 gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button),
2072 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2074 /* preselect the previous color in the color selection dialog */
2075 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2076 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2077 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2078 dialog = (GtkColorSelectionDialog *)color_dialog;
2079 gtk_color_selection_set_color
2080 ((GtkColorSelection *)dialog->colorsel, color);
2082 gtk_widget_show(color_dialog);
2085 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2087 GtkColorSelection *colorsel = (GtkColorSelection *)
2088 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2090 gint red, green, blue, rgbvalue;
2091 gchar *type = (gchar *)data;
2093 gtk_color_selection_get_color(colorsel, color);
2095 red = (gint) (color[0] * 255.0);
2096 green = (gint) (color[1] * 255.0);
2097 blue = (gint) (color[2] * 255.0);
2098 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2101 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2102 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2103 fprintf(stderr, "Color is %x\n", rgbvalue);
2106 if (g_strcasecmp(type, "LEVEL1") == 0) {
2107 prefs_common.quote_level1_col = rgbvalue;
2108 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2109 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2110 prefs_common.quote_level2_col = rgbvalue;
2111 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2112 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2113 prefs_common.quote_level3_col = rgbvalue;
2114 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2115 } else if (g_strcasecmp(type, "URI") == 0) {
2116 prefs_common.uri_col = rgbvalue;
2117 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2119 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2121 gtk_widget_hide(color_dialog);
2124 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2126 gtk_widget_hide(color_dialog);
2129 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2134 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2135 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2136 newstyle->bg[GTK_STATE_NORMAL] = color;
2137 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2138 newstyle->bg[GTK_STATE_ACTIVE] = color;
2140 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2143 static void prefs_enable_message_color_toggled(void)
2147 is_active = gtk_toggle_button_get_active
2148 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2149 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2150 prefs_common.enable_color = is_active;
2153 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2157 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2158 prefs_common.recycle_quote_colors = is_active;
2161 static void prefs_quote_description(void)
2163 if (!quote_desc_win)
2164 prefs_quote_description_create();
2166 gtk_widget_show(quote_desc_win);
2168 gtk_widget_hide(quote_desc_win);
2171 static void prefs_quote_description_create(void)
2179 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2180 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2181 _("Description of symbols"));
2182 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2183 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2184 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2185 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2187 vbox = gtk_vbox_new(FALSE, 8);
2188 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2190 hbox = gtk_hbox_new(FALSE, 4);
2191 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2193 label = gtk_label_new
2204 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2205 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2207 label = gtk_label_new
2210 "Full Name of Sender\n"
2211 "First Name of Sender\n"
2212 "Initial of Sender\n"
2218 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2219 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2221 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2222 NULL, NULL, NULL, NULL);
2223 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2225 gtk_widget_grab_default(ok_btn);
2226 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2227 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2229 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2230 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2232 gtk_widget_show_all(vbox);
2235 /* functions for setting items of SummaryView */
2237 static struct _SummaryDisplayItem
2241 GtkWidget *chkbtn[N_SUMMARY_COLS];
2244 GtkWidget *cancel_btn;
2247 #define SET_ACTIVE(column, var) \
2248 gtk_toggle_button_set_active \
2249 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2251 #define GET_ACTIVE(column, var) \
2252 prefs_common.var = gtk_toggle_button_get_active \
2253 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2255 void prefs_summary_display_item_set(void)
2257 static gboolean cancelled;
2259 if (!summarydispitem.window)
2260 prefs_summary_display_item_dialog_create(&cancelled);
2261 gtk_widget_grab_focus(summarydispitem.ok_btn);
2262 gtk_widget_show(summarydispitem.window);
2263 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2265 SET_ACTIVE(S_COL_MARK, show_mark);
2266 SET_ACTIVE(S_COL_UNREAD, show_unread);
2267 SET_ACTIVE(S_COL_MIME, show_mime);
2268 SET_ACTIVE(S_COL_NUMBER, show_number);
2269 SET_ACTIVE(S_COL_SCORE, show_score);
2270 SET_ACTIVE(S_COL_SIZE, show_size);
2271 SET_ACTIVE(S_COL_DATE, show_date);
2272 SET_ACTIVE(S_COL_FROM, show_from);
2273 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2276 gtk_widget_hide(summarydispitem.window);
2278 if (cancelled != TRUE) {
2279 GET_ACTIVE(S_COL_MARK, show_mark);
2280 GET_ACTIVE(S_COL_UNREAD, show_unread);
2281 GET_ACTIVE(S_COL_MIME, show_mime);
2282 GET_ACTIVE(S_COL_NUMBER, show_number);
2283 GET_ACTIVE(S_COL_SCORE, show_score);
2284 GET_ACTIVE(S_COL_SIZE, show_size);
2285 GET_ACTIVE(S_COL_DATE, show_date);
2286 GET_ACTIVE(S_COL_FROM, show_from);
2287 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2289 main_window_reflect_prefs_all();
2293 #define SET_CHECK_BUTTON(column, label) \
2295 summarydispitem.chkbtn[column] = \
2296 gtk_check_button_new_with_label(label); \
2297 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2298 summarydispitem.chkbtn[column], \
2302 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2306 GtkWidget *chkbtn_vbox;
2309 GtkWidget *cancel_btn;
2311 window = gtk_window_new(GTK_WINDOW_DIALOG);
2312 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2313 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2314 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2315 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2316 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2317 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2318 GTK_SIGNAL_FUNC(display_item_delete_event),
2320 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2321 GTK_SIGNAL_FUNC(display_item_key_pressed),
2324 vbox = gtk_vbox_new(FALSE, 8);
2325 gtk_container_add(GTK_CONTAINER(window), vbox);
2327 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2328 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2330 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2331 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2332 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2333 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2334 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2335 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2336 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2337 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2338 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2340 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2341 &cancel_btn, _("Cancel"), NULL, NULL);
2342 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2343 gtk_widget_grab_default(ok_btn);
2345 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2346 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2347 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2348 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2350 gtk_widget_show_all(vbox);
2352 summarydispitem.window = window;
2353 summarydispitem.ok_btn = ok_btn;
2354 summarydispitem.cancel_btn = cancel_btn;
2357 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2363 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2369 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2370 gboolean *cancelled)
2378 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2379 gboolean *cancelled)
2381 if (event && event->keyval == GDK_Escape) {
2387 static void prefs_font_select(GtkButton *button)
2389 if (!font_sel_win) {
2390 font_sel_win = gtk_font_selection_dialog_new
2391 (_("Font selection"));
2392 gtk_window_position(GTK_WINDOW(font_sel_win),
2393 GTK_WIN_POS_CENTER);
2394 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2395 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2398 (GTK_OBJECT(font_sel_win), "key_press_event",
2399 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2402 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2404 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2406 gtk_signal_connect_object
2407 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2409 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2410 GTK_OBJECT(font_sel_win));
2413 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2414 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2415 gtk_widget_grab_focus
2416 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2417 gtk_widget_show(font_sel_win);
2420 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2424 if (event && event->keyval == GDK_Escape)
2425 gtk_widget_hide(font_sel_win);
2428 static void prefs_font_selection_ok(GtkButton *button)
2432 fontname = gtk_font_selection_dialog_get_font_name
2433 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2436 gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname);
2440 gtk_widget_hide(font_sel_win);
2443 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2446 GtkWidget *menuitem;
2449 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2450 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2451 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2452 g_free(*((gchar **)pparam->data));
2453 *((gchar **)pparam->data) = g_strdup(charset);
2456 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2459 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2461 GtkWidget *menuitem;
2465 g_return_if_fail(optmenu != NULL);
2466 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2468 menu = gtk_option_menu_get_menu(optmenu);
2469 for (cur = GTK_MENU_SHELL(menu)->children;
2470 cur != NULL; cur = cur->next) {
2471 menuitem = GTK_WIDGET(cur->data);
2472 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2473 if (!strcmp(charset, *((gchar **)pparam->data))) {
2474 gtk_option_menu_set_history(optmenu, n);
2480 gtk_option_menu_set_history(optmenu, 0);
2481 prefs_common_charset_set_data_from_optmenu(pparam);
2484 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2487 prefs_common_cancel();
2491 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2494 if (event && event->keyval == GDK_Escape)
2495 prefs_common_cancel();
2498 static void prefs_common_ok(void)
2500 prefs_common_apply();
2501 gtk_widget_hide(dialog.window);
2502 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2503 gtk_widget_hide(quote_desc_win);
2505 inc_autocheck_timer_set();
2508 static void prefs_common_apply(void)
2510 prefs_set_data_from_dialog(param);
2511 main_window_reflect_prefs_all();
2512 prefs_common_save_config();
2515 static void prefs_common_cancel(void)
2517 gtk_widget_hide(dialog.window);
2518 inc_autocheck_timer_set();