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 {
102 GtkWidget *entry_textfont;
103 GtkWidget *button_textfont;
105 GtkWidget *entry_smallfont;
106 GtkWidget *entry_normalfont;
107 GtkWidget *entry_boldfont;
109 GtkWidget *chkbtn_folder_unread;
111 GtkWidget *chkbtn_transhdr;
113 GtkWidget *chkbtn_swapfrom;
114 GtkWidget *chkbtn_hscrollbar;
115 GtkWidget *chkbtn_useaddrbook;
118 static struct Message {
119 GtkWidget *chkbtn_enablecol;
120 GtkWidget *button_edit_col;
121 GtkWidget *chkbtn_mbalnum;
122 GtkWidget *chkbtn_disphdrpane;
123 GtkWidget *chkbtn_disphdr;
124 GtkWidget *spinbtn_linespc;
125 GtkObject *spinbtn_linespc_adj;
126 GtkWidget *chkbtn_headspc;
128 GtkWidget *chkbtn_smoothscroll;
129 GtkWidget *spinbtn_scrollstep;
130 GtkObject *spinbtn_scrollstep_adj;
131 GtkWidget *chkbtn_halfpage;
135 static struct Privacy {
136 GtkWidget *checkbtn_gpgme_warning;
137 GtkWidget *checkbtn_default_encrypt;
138 GtkWidget *checkbtn_default_sign;
139 GtkWidget *checkbtn_auto_check_signatures;
140 GtkWidget *checkbtn_passphrase_grab;
141 GtkWidget *checkbtn_signature_popup;
142 GtkWidget *optmenu_default_signkey;
146 static struct Interface {
147 GtkWidget *checkbtn_emacs;
148 GtkWidget *checkbtn_openunread;
149 GtkWidget *checkbtn_openinbox;
150 GtkWidget *checkbtn_immedexec;
151 GtkWidget *checkbtn_confonexit;
152 GtkWidget *checkbtn_cleanonexit;
153 GtkWidget *checkbtn_askonclean;
154 GtkWidget *checkbtn_warnqueued;
155 GtkWidget *checkbtn_returnreceipt;
156 GtkWidget *checkbtn_addaddrbyclick;
159 static struct Other {
160 GtkWidget *uri_combo;
161 GtkWidget *uri_entry;
162 GtkWidget *printcmd_entry;
163 GtkWidget *exteditor_combo;
164 GtkWidget *exteditor_entry;
167 static struct MessageColorButtons {
168 GtkWidget *quote_level1_btn;
169 GtkWidget *quote_level2_btn;
170 GtkWidget *quote_level3_btn;
174 static GtkWidget *quote_desc_win;
175 static GtkWidget *font_sel_win;
176 static GtkWidget *quote_color_win;
177 static GtkWidget *color_dialog;
178 static GtkWidget *entry_datefmt;
179 static GtkWidget *datefmt_sample;
181 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
182 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
184 static void prefs_common_default_signkey_set_data_from_optmenu
186 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
190 parameter name, default value, pointer to the prefs variable, data type,
191 pointer to the widget pointer,
192 pointer to the function for data setting,
193 pointer to the function for widget setting
196 static PrefParam param[] = {
198 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
199 &receive.checkbtn_incext,
200 prefs_set_data_from_toggle, prefs_set_toggle},
201 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
202 &receive.entry_incext,
203 prefs_set_data_from_entry, prefs_set_entry},
205 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
206 &receive.checkbtn_local,
207 prefs_set_data_from_toggle, prefs_set_toggle},
208 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
209 &receive.checkbtn_filter_on_inc,
210 prefs_set_data_from_toggle, prefs_set_toggle},
211 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
212 &receive.entry_spool,
213 prefs_set_data_from_entry, prefs_set_entry},
215 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
216 &receive.checkbtn_autochk,
217 prefs_set_data_from_toggle, prefs_set_toggle},
218 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
219 &receive.spinbtn_autochk,
220 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
221 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
222 &receive.checkbtn_chkonstartup,
223 prefs_set_data_from_toggle, prefs_set_toggle},
225 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
226 &receive.spinbtn_maxarticle,
227 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
230 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
231 &send.checkbtn_sendext,
232 prefs_set_data_from_toggle, prefs_set_toggle},
233 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
234 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
235 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
236 &send.checkbtn_savemsg,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
239 &send.checkbtn_queuemsg,
240 prefs_set_data_from_toggle, prefs_set_toggle},
242 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
243 &send.optmenu_charset,
244 prefs_common_charset_set_data_from_optmenu,
245 prefs_common_charset_set_optmenu},
248 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
249 &compose.checkbtn_quote,
250 prefs_set_data_from_toggle, prefs_set_toggle},
251 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
252 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
253 {"quote_format", "On %d\\n%f wrote:\\n\\n",
254 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
255 prefs_set_data_from_text, prefs_set_text},
257 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
258 &compose.checkbtn_autosig,
259 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
261 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
263 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
264 &compose.spinbtn_linewrap,
265 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
266 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
267 &compose.checkbtn_wrapquote,
268 prefs_set_data_from_toggle, prefs_set_toggle},
269 {"linewrap_before_sending", "FALSE",
270 &prefs_common.linewrap_at_send, P_BOOL,
271 &compose.checkbtn_wrapatsend,
272 prefs_set_data_from_toggle, prefs_set_toggle},
274 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
278 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
280 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
281 &prefs_common.textfont, P_STRING,
282 &display.entry_textfont,
283 prefs_set_data_from_entry, prefs_set_entry},
284 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
285 &prefs_common.smallfont, P_STRING,
286 &display.entry_smallfont,
287 prefs_set_data_from_entry, prefs_set_entry},
288 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
289 &prefs_common.boldfont, P_STRING,
290 &display.entry_boldfont,
291 prefs_set_data_from_entry, prefs_set_entry},
292 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
293 &prefs_common.normalfont, P_STRING,
294 &display.entry_normalfont,
295 prefs_set_data_from_entry, prefs_set_entry},
297 {"display_folder_unread_num", "TRUE",
298 &prefs_common.display_folder_unread, P_BOOL,
299 &display.chkbtn_folder_unread,
300 prefs_set_data_from_toggle, prefs_set_toggle},
302 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
303 &display.chkbtn_transhdr,
304 prefs_set_data_from_toggle, prefs_set_toggle},
306 /* Display: Summary View */
307 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
308 &display.chkbtn_swapfrom,
309 prefs_set_data_from_toggle, prefs_set_toggle},
310 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
311 &display.chkbtn_hscrollbar,
312 prefs_set_data_from_toggle, prefs_set_toggle},
313 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
314 &display.chkbtn_useaddrbook,
315 prefs_set_data_from_toggle, prefs_set_toggle},
316 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
317 P_STRING, &entry_datefmt,
318 prefs_set_data_from_entry, prefs_set_entry},
320 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
322 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
324 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
327 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
329 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
331 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
333 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
335 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
337 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
339 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
341 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
343 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
347 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
349 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
351 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
353 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
355 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
357 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
359 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
361 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
363 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
365 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
367 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
369 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
371 {"summary_col_score", "40", &prefs_common.summary_col_score,
372 P_INT, NULL, NULL, NULL},
373 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
375 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
377 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
379 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
380 P_INT, NULL, NULL, NULL},
381 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
383 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
385 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
387 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
389 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
391 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
393 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
395 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
397 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
399 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
401 {"compose_width", "600", &prefs_common.compose_width, P_INT,
403 {"compose_height", "560", &prefs_common.compose_height, P_INT,
407 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
408 &message.chkbtn_enablecol,
409 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
413 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
415 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
417 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
419 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
421 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
422 P_BOOL, NULL, NULL, NULL},
424 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
425 &message.chkbtn_mbalnum,
426 prefs_set_data_from_toggle, prefs_set_toggle},
427 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
428 P_BOOL, &message.chkbtn_disphdrpane,
429 prefs_set_data_from_toggle, prefs_set_toggle},
430 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
431 &message.chkbtn_disphdr,
432 prefs_set_data_from_toggle, prefs_set_toggle},
433 {"line_space", "2", &prefs_common.line_space, P_INT,
434 &message.spinbtn_linespc,
435 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
436 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
437 &message.chkbtn_headspc,
438 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"enable_smooth_scroll", "FALSE",
441 &prefs_common.enable_smooth_scroll, P_BOOL,
442 &message.chkbtn_smoothscroll,
443 prefs_set_data_from_toggle, prefs_set_toggle},
444 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
445 &message.spinbtn_scrollstep,
446 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
447 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
448 &message.chkbtn_halfpage,
449 prefs_set_data_from_toggle, prefs_set_toggle},
451 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
455 {"mime_image_viewer", "display '%s'",
456 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
457 {"mime_audio_player", "play '%s'",
458 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
462 {"gpgme_warning", "TRUE", &prefs_common.gpgme_warning, P_BOOL,
463 &privacy.checkbtn_gpgme_warning,
464 prefs_set_data_from_toggle, prefs_set_toggle},
465 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
466 &privacy.checkbtn_default_encrypt,
467 prefs_set_data_from_toggle, prefs_set_toggle},
468 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
469 &privacy.checkbtn_default_sign,
470 prefs_set_data_from_toggle, prefs_set_toggle},
471 {"auto_check_signatures", "TRUE",
472 &prefs_common.auto_check_signatures, P_BOOL,
473 &privacy.checkbtn_auto_check_signatures,
474 prefs_set_data_from_toggle, prefs_set_toggle},
475 {"signature_popup", "FALSE",
476 &prefs_common.signature_popup, P_BOOL,
477 &privacy.checkbtn_signature_popup,
478 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
481 &privacy.checkbtn_passphrase_grab,
482 prefs_set_data_from_toggle, prefs_set_toggle},
483 #endif /* __MINGW32__ */
484 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
485 &privacy.optmenu_default_signkey,
486 prefs_common_default_signkey_set_data_from_optmenu,
487 prefs_common_default_signkey_set_optmenu},
488 #endif /* USE_GPGME */
491 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
493 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
496 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
497 &interface.checkbtn_emacs,
498 prefs_set_data_from_toggle, prefs_set_toggle},
499 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
500 P_BOOL, &interface.checkbtn_openunread,
501 prefs_set_data_from_toggle, prefs_set_toggle},
502 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
503 P_BOOL, &interface.checkbtn_openinbox,
504 prefs_set_data_from_toggle, prefs_set_toggle},
505 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
506 &interface.checkbtn_immedexec,
507 prefs_set_data_from_toggle, prefs_set_toggle},
508 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
509 P_BOOL, &interface.checkbtn_addaddrbyclick,
510 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
513 &interface.checkbtn_confonexit,
514 prefs_set_data_from_toggle, prefs_set_toggle},
515 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
516 &interface.checkbtn_returnreceipt,
517 prefs_set_data_from_toggle, prefs_set_toggle},
518 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
519 &interface.checkbtn_cleanonexit,
520 prefs_set_data_from_toggle, prefs_set_toggle},
521 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
522 &interface.checkbtn_askonclean,
523 prefs_set_data_from_toggle, prefs_set_toggle},
524 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
525 P_BOOL, &interface.checkbtn_warnqueued,
526 prefs_set_data_from_toggle, prefs_set_toggle},
529 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
530 &prefs_common.uri_cmd, P_STRING,
531 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
532 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
533 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
534 {"ext_editor_command", "gedit %s",
535 &prefs_common.ext_editor_cmd, P_STRING,
536 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
538 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
542 #define VSPACING_NARROW 4
543 #define VBOX_BORDER 16
544 #define DEFAULT_ENTRY_WIDTH 80
545 #define PREFSBUFSIZE 1024
547 /* widget creating functions */
548 static void prefs_common_create (void);
549 static void prefs_receive_create (void);
550 static void prefs_send_create (void);
551 static void prefs_compose_create (void);
552 static void prefs_display_create (void);
553 static void prefs_message_create (void);
555 static void prefs_privacy_create (void);
557 static void prefs_interface_create (void);
558 static void prefs_other_create (void);
560 static void prefs_quote_description (void);
561 static void prefs_quote_description_create (void);
562 static void prefs_quote_colors_dialog (void);
563 static void prefs_quote_colors_dialog_create (void);
564 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
567 static void quote_color_set_dialog (GtkWidget *widget,
569 static void quote_colors_set_dialog_ok (GtkWidget *widget,
571 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
573 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
576 static void set_button_bg_color (GtkWidget *widget,
578 static void prefs_enable_message_color_toggled (void);
579 static void prefs_recycle_colors_toggled (GtkWidget *widget);
581 /* functions for setting items of SummaryView */
582 static void prefs_summary_display_item_dialog_create
583 (gboolean *cancelled);
584 static void display_item_ok (GtkWidget *widget,
585 gboolean *cancelled);
586 static void display_item_cancel (GtkWidget *widget,
587 gboolean *cancelled);
588 static gint display_item_delete_event (GtkWidget *widget,
590 gboolean *cancelled);
591 static void display_item_key_pressed (GtkWidget *widget,
593 gboolean *cancelled);
595 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
596 static void prefs_font_selection_key_pressed (GtkWidget *widget,
599 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
601 static gint prefs_common_deleted (GtkWidget *widget,
604 static void prefs_common_key_pressed (GtkWidget *widget,
607 static void prefs_common_ok (void);
608 static void prefs_common_apply (void);
609 static void prefs_common_cancel (void);
611 void prefs_common_read_config(void)
613 prefs_read_config(param, "Common", COMMON_RC);
616 void prefs_common_save_config(void)
618 prefs_save_config(param, "Common", COMMON_RC);
621 void prefs_common_open(void)
623 inc_autocheck_timer_remove();
625 if (!dialog.window) {
626 prefs_common_create();
629 manage_window_set_transient(GTK_WINDOW(dialog.window));
630 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
631 gtk_widget_grab_focus(dialog.ok_btn);
633 prefs_set_dialog(param);
635 gtk_widget_show(dialog.window);
638 static void prefs_common_create(void)
642 debug_print(_("Creating common preferences window...\n"));
644 prefs_dialog_create(&dialog);
645 gtk_window_set_title (GTK_WINDOW(dialog.window),
646 _("Common Preferences"));
647 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
648 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
649 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
650 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
651 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
652 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
653 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
654 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
655 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
656 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
657 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
658 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
659 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
660 GTK_SIGNAL_FUNC(prefs_common_cancel),
661 GTK_OBJECT(dialog.window));
663 /* create all widgets on notebook */
664 prefs_receive_create();
665 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
667 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
668 prefs_compose_create();
669 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
670 prefs_display_create();
671 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
672 prefs_message_create();
673 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
675 prefs_privacy_create();
676 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
678 prefs_interface_create();
679 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
680 prefs_other_create();
681 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
683 gtk_widget_show_all(dialog.window);
686 static void prefs_receive_create(void)
690 GtkWidget *frame_incext;
691 GtkWidget *checkbtn_incext;
693 GtkWidget *label_incext;
694 GtkWidget *entry_incext;
695 GtkWidget *button_incext;
697 GtkWidget *frame_spool;
698 GtkWidget *checkbtn_local;
699 GtkWidget *checkbtn_filter_on_inc;
700 GtkWidget *label_spool;
701 GtkWidget *entry_spool;
703 GtkWidget *hbox_autochk;
704 GtkWidget *checkbtn_autochk;
705 GtkWidget *label_autochk1;
706 GtkObject *spinbtn_autochk_adj;
707 GtkWidget *spinbtn_autochk;
708 GtkWidget *label_autochk2;
709 GtkWidget *checkbtn_chkonstartup;
711 GtkWidget *frame_news;
712 GtkWidget *label_maxarticle;
713 GtkWidget *spinbtn_maxarticle;
714 GtkObject *spinbtn_maxarticle_adj;
716 vbox1 = gtk_vbox_new (FALSE, VSPACING);
717 gtk_widget_show (vbox1);
718 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
719 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
721 PACK_FRAME(vbox1, frame_incext, _("External program"));
723 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
724 gtk_widget_show (vbox2);
725 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
726 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
728 /* Use of external incorporation program */
729 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
730 _("Use external program for incorporation"));
732 hbox = gtk_hbox_new (FALSE, 8);
733 gtk_widget_show (hbox);
734 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
735 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
737 label_incext = gtk_label_new (_("Program path"));
738 gtk_widget_show (label_incext);
739 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
741 entry_incext = gtk_entry_new ();
742 gtk_widget_show (entry_incext);
743 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
745 button_incext = gtk_button_new_with_label ("... ");
746 gtk_widget_show (button_incext);
747 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
749 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
751 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
752 gtk_widget_show (vbox2);
753 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
754 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
756 hbox = gtk_hbox_new (FALSE, 32);
757 gtk_widget_show (hbox);
758 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
760 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
761 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
762 _("Filter on incorporation"));
763 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
765 hbox = gtk_hbox_new (FALSE, 8);
766 gtk_widget_show (hbox);
767 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
768 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
770 label_spool = gtk_label_new (_("Spool directory"));
771 gtk_widget_show (label_spool);
772 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
774 entry_spool = gtk_entry_new ();
775 gtk_widget_show (entry_spool);
776 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
778 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
779 gtk_widget_show (vbox2);
780 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
783 hbox_autochk = gtk_hbox_new (FALSE, 8);
784 gtk_widget_show (hbox_autochk);
785 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
787 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
788 _("Auto-check new mail"));
790 label_autochk1 = gtk_label_new (_("each"));
791 gtk_widget_show (label_autochk1);
792 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
794 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
795 spinbtn_autochk = gtk_spin_button_new
796 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
797 gtk_widget_show (spinbtn_autochk);
798 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
799 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
800 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
802 label_autochk2 = gtk_label_new (_("minute(s)"));
803 gtk_widget_show (label_autochk2);
804 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
806 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
807 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
808 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
810 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
811 _("Check new mail on startup"));
813 PACK_FRAME(vbox1, frame_news, _("News"));
815 hbox = gtk_hbox_new (FALSE, 8);
816 gtk_widget_show (hbox);
817 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
818 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
820 label_maxarticle = gtk_label_new
821 (_("Maximum article number to download\n"
822 "(unlimited if 0 is specified)"));
823 gtk_widget_show (label_maxarticle);
824 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
825 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
827 spinbtn_maxarticle_adj =
828 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
829 spinbtn_maxarticle = gtk_spin_button_new
830 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
831 gtk_widget_show (spinbtn_maxarticle);
832 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
834 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
835 gtk_spin_button_set_numeric
836 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
838 receive.checkbtn_incext = checkbtn_incext;
839 receive.entry_incext = entry_incext;
840 receive.button_incext = button_incext;
842 receive.checkbtn_local = checkbtn_local;
843 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
844 receive.entry_spool = entry_spool;
846 receive.checkbtn_autochk = checkbtn_autochk;
847 receive.spinbtn_autochk = spinbtn_autochk;
848 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
850 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
852 receive.spinbtn_maxarticle = spinbtn_maxarticle;
853 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
856 static void prefs_send_create(void)
860 GtkWidget *frame_sendext;
861 GtkWidget *vbox_sendext;
862 GtkWidget *checkbtn_sendext;
864 GtkWidget *label_sendext;
865 GtkWidget *entry_sendext;
866 GtkWidget *button_sendext;
867 GtkWidget *checkbtn_savemsg;
868 GtkWidget *checkbtn_queuemsg;
869 GtkWidget *label_outcharset;
871 GtkWidget *optmenu_menu;
874 vbox1 = gtk_vbox_new (FALSE, VSPACING);
875 gtk_widget_show (vbox1);
876 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
877 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
879 PACK_FRAME(vbox1, frame_sendext, _("External program"));
881 gtk_widget_set_sensitive(frame_sendext, FALSE);
883 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
884 gtk_widget_show (vbox_sendext);
885 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
886 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
888 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
889 _("Use external program for sending"));
891 hbox1 = gtk_hbox_new (FALSE, 8);
892 gtk_widget_show (hbox1);
893 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
894 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
896 label_sendext = gtk_label_new (_("Program path"));
897 gtk_widget_show (label_sendext);
898 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
900 entry_sendext = gtk_entry_new ();
901 gtk_widget_show (entry_sendext);
902 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
904 button_sendext = gtk_button_new_with_label ("... ");
905 gtk_widget_show (button_sendext);
906 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
908 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
909 gtk_widget_show (vbox2);
910 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
912 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
913 _("Save sent message to outbox"));
914 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
915 _("Queue message that failed to send"));
917 hbox1 = gtk_hbox_new (FALSE, 8);
918 gtk_widget_show (hbox1);
919 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
921 label_outcharset = gtk_label_new (_("Outgoing codeset"));
922 gtk_widget_show (label_outcharset);
923 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
925 optmenu = gtk_option_menu_new ();
926 gtk_widget_show (optmenu);
927 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
929 optmenu_menu = gtk_menu_new ();
931 #define SET_MENUITEM(str, charset) \
933 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
936 SET_MENUITEM(_("Automatic"), CS_AUTO);
937 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
939 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
941 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
943 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
944 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
945 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
946 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
947 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
948 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
949 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
950 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
951 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
952 #endif /* HAVE_LIBJCONV */
953 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
955 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
956 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
959 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
960 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
962 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
963 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
965 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
966 #endif /* HAVE_LIBJCONV */
968 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
970 send.checkbtn_sendext = checkbtn_sendext;
971 send.entry_sendext = entry_sendext;
972 send.button_sendext = button_sendext;
974 send.checkbtn_savemsg = checkbtn_savemsg;
975 send.checkbtn_queuemsg = checkbtn_queuemsg;
977 send.optmenu_charset = optmenu;
980 static void prefs_compose_create(void)
983 GtkWidget *frame_quote;
984 GtkWidget *vbox_quote;
985 GtkWidget *checkbtn_quote;
987 GtkWidget *label_quotemark;
988 GtkWidget *entry_quotemark;
990 GtkWidget *label_quotefmt;
991 GtkWidget *btn_quotedesc;
992 GtkWidget *scrolledwin_quotefmt;
993 GtkWidget *text_quotefmt;
995 GtkWidget *frame_sig;
997 GtkWidget *checkbtn_autosig;
998 GtkWidget *label_sigsep;
999 GtkWidget *entry_sigsep;
1001 GtkWidget *vbox_linewrap;
1004 GtkWidget *label_linewrap;
1005 GtkObject *spinbtn_linewrap_adj;
1006 GtkWidget *spinbtn_linewrap;
1007 GtkWidget *checkbtn_wrapquote;
1008 GtkWidget *checkbtn_wrapatsend;
1010 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1011 gtk_widget_show (vbox1);
1012 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1013 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1015 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1017 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1018 gtk_widget_show (vbox_quote);
1019 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1020 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1022 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1023 _("Quote message when replying"));
1025 hbox1 = gtk_hbox_new (FALSE, 8);
1026 gtk_widget_show (hbox1);
1027 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1029 label_quotemark = gtk_label_new (_("Quotation mark"));
1030 gtk_widget_show (label_quotemark);
1031 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1033 entry_quotemark = gtk_entry_new ();
1034 gtk_widget_show (entry_quotemark);
1035 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1036 gtk_widget_set_usize (entry_quotemark, 64, -1);
1038 hbox2 = gtk_hbox_new (FALSE, 0);
1039 gtk_widget_show (hbox2);
1040 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1042 label_quotefmt = gtk_label_new (_("Quotation format:"));
1043 gtk_widget_show (label_quotefmt);
1044 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1047 gtk_button_new_with_label (_(" Description of symbols "));
1048 gtk_widget_show (btn_quotedesc);
1049 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1050 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1051 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1053 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1054 gtk_widget_show (scrolledwin_quotefmt);
1055 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1056 gtk_scrolled_window_set_policy
1057 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1058 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1060 text_quotefmt = gtk_text_new (NULL, NULL);
1061 gtk_widget_show (text_quotefmt);
1062 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1063 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1064 gtk_widget_set_usize(text_quotefmt, -1, 60);
1066 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1068 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1069 gtk_widget_show (vbox_sig);
1070 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1071 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1073 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1074 _("Insert signature automatically"));
1076 hbox1 = gtk_hbox_new (FALSE, 8);
1077 gtk_widget_show (hbox1);
1078 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1080 label_sigsep = gtk_label_new (_("Signature separator"));
1081 gtk_widget_show (label_sigsep);
1082 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1084 entry_sigsep = gtk_entry_new ();
1085 gtk_widget_show (entry_sigsep);
1086 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1087 gtk_widget_set_usize (entry_sigsep, 64, -1);
1090 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1091 gtk_widget_show (vbox_linewrap);
1092 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1094 hbox3 = gtk_hbox_new (FALSE, 8);
1095 gtk_widget_show (hbox3);
1096 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1098 label_linewrap = gtk_label_new (_("Wrap messages at"));
1099 gtk_widget_show (label_linewrap);
1100 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1102 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1103 spinbtn_linewrap = gtk_spin_button_new
1104 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1105 gtk_widget_show (spinbtn_linewrap);
1106 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1107 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1108 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1110 label_linewrap = gtk_label_new (_("characters"));
1111 gtk_widget_show (label_linewrap);
1112 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1114 hbox4 = gtk_hbox_new (FALSE, 32);
1115 gtk_widget_show (hbox4);
1116 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1118 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1120 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1122 compose.checkbtn_quote = checkbtn_quote;
1123 compose.entry_quotemark = entry_quotemark;
1124 compose.text_quotefmt = text_quotefmt;
1125 compose.checkbtn_autosig = checkbtn_autosig;
1126 compose.entry_sigsep = entry_sigsep;
1128 compose.spinbtn_linewrap = spinbtn_linewrap;
1129 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1130 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1131 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1135 /* alfons - nice ui for darko */
1137 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1141 g_return_if_fail(widget != NULL);
1142 g_return_if_fail(*widget != NULL);
1143 g_return_if_fail(entry_datefmt != NULL);
1144 g_return_if_fail(datefmt_sample != NULL);
1146 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1147 g_free(prefs_common.date_format);
1148 prefs_common.date_format = text;
1149 gtk_entry_set_text(GTK_ENTRY(entry_datefmt), text);
1151 gtk_widget_destroy(*widget);
1155 static void date_format_cancel_btn_clicked(GtkButton *button,
1158 g_return_if_fail(widget != NULL);
1159 g_return_if_fail(*widget != NULL);
1161 gtk_widget_destroy(*widget);
1165 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1167 g_return_val_if_fail(widget != NULL, FALSE);
1168 g_return_val_if_fail(*widget != NULL, FALSE);
1173 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1176 struct tm *cal_time;
1179 cur_time = time(NULL);
1180 cal_time = localtime(&cur_time);
1182 text = gtk_editable_get_chars(editable, 0, -1);
1184 strftime(buffer, sizeof buffer, text, cal_time);
1186 gtk_label_set_text(example, buffer);
1189 static void date_format_select_row(GtkWidget *date_format_list, gint row,
1190 gint column, GdkEventButton *event,
1198 g_return_if_fail(date_format_list != NULL);
1200 /* only on double click */
1201 if (event->type != GDK_2BUTTON_PRESS)
1204 /* get format from clist */
1205 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
1207 curs_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1208 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1210 /* insert the format into the text entry */
1211 new_format = g_malloc(strlen(old_format) + 3);
1213 strncpy(new_format, old_format, curs_pos);
1214 new_format[curs_pos] = '\0';
1215 strcat(new_format, format);
1216 strcat(new_format, &old_format[curs_pos]);
1218 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1219 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), curs_pos + 2);
1224 static GtkWidget *create_date_format(GtkButton *button, void *data)
1226 static GtkWidget *date_format = NULL;
1228 GtkWidget *scrolledwindow1;
1229 GtkWidget *date_format_list;
1240 GtkWidget *confirm_area;
1242 GtkWidget *cancel_btn;
1248 { "%a", _("the full abbreviated weekday name") },
1249 { "%A", _("the full weekday name") },
1250 { "%b", _("the abbreviated month name") },
1251 { "%B", _("the full month name") },
1252 { "%c", _("the preferred date and time for the current locale") },
1253 { "%C", _("the century number (year/100)") },
1254 { "%d", _("the day of the month as a decimal number") },
1255 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1256 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1257 { "%j", _("the day of the year as a decimal number") },
1258 { "%m", _("the month as a decimal number") },
1259 { "%M", _("the minute as a decimal number") },
1260 { "%p", _("either AM or PM") },
1261 { "%S", _("the second as a decimal number") },
1262 { "%w", _("the day of the week as a decimal number") },
1263 { "%x", _("the preferred date for the current locale") },
1264 { "%y", _("the last two digits of a year") },
1265 { "%Y", _("the year as a decimal number") },
1266 { "%Z", _("the time zone or name or abbreviation") }
1269 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1271 if (date_format) return date_format;
1273 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1274 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1275 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1276 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 280);
1278 vbox1 = gtk_vbox_new(FALSE, 10);
1279 gtk_widget_show(vbox1);
1280 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1282 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1283 gtk_widget_show(scrolledwindow1);
1284 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1286 date_format_list = gtk_clist_new(2);
1287 gtk_widget_show(date_format_list);
1288 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1289 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1290 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1291 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1293 label3 = gtk_label_new(_("Date Format"));
1294 gtk_widget_show(label3);
1295 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1297 label4 = gtk_label_new(_("Date Format Description"));
1298 gtk_widget_show(label4);
1299 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1301 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1303 /* phoney casting necessary because of gtk... */
1304 text[0] = (gchar *) time_format[tmp].fmt;
1305 text[1] = (gchar *) time_format[tmp].txt;
1307 gtk_clist_append(GTK_CLIST(date_format_list), text);
1310 table2 = gtk_table_new(1, 1, TRUE);
1311 gtk_widget_show(table2);
1312 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1314 vbox2 = gtk_vbox_new(FALSE, 0);
1315 gtk_widget_show(vbox2);
1316 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1317 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1318 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1320 vbox3 = gtk_vbox_new(TRUE, 4);
1321 gtk_widget_show(vbox3);
1322 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1324 hbox2 = gtk_hbox_new(FALSE, 0);
1325 gtk_widget_show(hbox2);
1326 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1328 label5 = gtk_label_new(_("Date format"));
1329 gtk_widget_show(label5);
1330 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1331 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1333 datefmt_sample = gtk_entry_new_with_max_length(300);
1334 gtk_widget_show(datefmt_sample);
1335 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1337 hbox1 = gtk_hbox_new(FALSE, 0);
1338 gtk_widget_show(hbox1);
1339 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1341 label6 = gtk_label_new(_("Example"));
1342 gtk_widget_show(label6);
1343 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1344 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1346 label7 = gtk_label_new(_("label7"));
1347 gtk_widget_show(label7);
1348 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1349 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1351 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
1352 &cancel_btn, _("Cancel"), NULL, NULL);
1353 gtk_widget_grab_default(ok_btn);
1355 gtk_widget_show(confirm_area);
1357 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
1359 /* set the current format */
1360 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1361 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1364 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1365 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
1368 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
1369 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
1372 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1373 GTK_SIGNAL_FUNC(date_format_on_delete),
1376 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1377 GTK_SIGNAL_FUNC(date_format_entry_on_change),
1380 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1381 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1383 gtk_widget_show(date_format);
1385 gtk_signal_connect(GTK_OBJECT(date_format_list), "select_row",
1386 GTK_SIGNAL_FUNC(date_format_select_row),
1392 static void prefs_display_create(void)
1395 GtkWidget *frame_font;
1397 GtkWidget *label_textfont;
1398 GtkWidget *entry_textfont;
1399 GtkWidget *button_textfont;
1400 GtkWidget *chkbtn_folder_unread;
1401 GtkWidget *chkbtn_transhdr;
1402 GtkWidget *frame_summary;
1404 GtkWidget *chkbtn_swapfrom;
1405 GtkWidget *chkbtn_hscrollbar;
1406 GtkWidget *chkbtn_useaddrbook;
1408 GtkWidget *label_datefmt;
1409 GtkWidget *label_datefmt_btn;
1410 GtkWidget *button_dispitem;
1411 GtkWidget *tmplabel, *tmpentry, *tmpbutton;
1413 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1414 gtk_widget_show (vbox1);
1415 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1416 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1418 PACK_FRAME(vbox1, frame_font, _("Font"));
1420 table1 = gtk_table_new (4, 3, FALSE);
1421 gtk_widget_show (table1);
1422 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1423 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1424 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1425 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1427 label_textfont = gtk_label_new (_("Text"));
1428 gtk_widget_show (label_textfont);
1429 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1430 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1432 entry_textfont = gtk_entry_new ();
1433 gtk_widget_show (entry_textfont);
1434 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1435 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1437 button_textfont = gtk_button_new_with_label ("... ");
1438 gtk_widget_show (button_textfont);
1439 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1441 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1442 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1444 tmplabel = gtk_label_new (_("Small"));
1445 gtk_widget_show (tmplabel);
1446 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1447 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1449 tmpentry = gtk_entry_new ();
1450 gtk_widget_show (tmpentry);
1451 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1452 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1454 tmpbutton = gtk_button_new_with_label ("... ");
1455 gtk_widget_show (tmpbutton);
1456 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1458 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1459 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1460 display.entry_smallfont = tmpentry;
1462 tmplabel = gtk_label_new (_("Normal"));
1463 gtk_widget_show (tmplabel);
1464 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1465 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1467 tmpentry = gtk_entry_new ();
1468 gtk_widget_show (tmpentry);
1469 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1470 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1472 tmpbutton = gtk_button_new_with_label ("... ");
1473 gtk_widget_show (tmpbutton);
1474 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1476 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1477 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1478 display.entry_normalfont = tmpentry;
1480 tmplabel = gtk_label_new (_("Bold"));
1481 gtk_widget_show (tmplabel);
1482 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1483 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1485 tmpentry = gtk_entry_new ();
1486 gtk_widget_show (tmpentry);
1487 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1488 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1490 tmpbutton = gtk_button_new_with_label ("... ");
1491 gtk_widget_show (tmpbutton);
1492 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1494 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1495 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1496 display.entry_boldfont = tmpentry;
1498 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1499 gtk_widget_show (vbox2);
1500 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1503 (vbox2, chkbtn_transhdr,
1504 _("Translate header name (such as `From:', `Subject:')"));
1506 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1507 _("Display unread number next to folder name"));
1509 /* ---- Summary ---- */
1511 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1513 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1514 gtk_widget_show (vbox2);
1515 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1516 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1519 (vbox2, chkbtn_swapfrom,
1520 _("Display recipient on `From' column if sender is yourself"));
1522 (vbox2, chkbtn_useaddrbook,
1523 _("Display sender using address book"));
1525 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1527 hbox1 = gtk_hbox_new (FALSE, 8);
1528 gtk_widget_show (hbox1);
1529 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1531 label_datefmt = gtk_label_new(_("Date format"));
1532 gtk_widget_show(label_datefmt);
1533 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1535 entry_datefmt = gtk_entry_new ();
1536 gtk_widget_show (entry_datefmt);
1537 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1539 label_datefmt_btn = gtk_button_new_with_label(_("Customize"));
1540 gtk_widget_show(label_datefmt_btn);
1541 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt_btn, FALSE, FALSE, 0);
1542 gtk_signal_connect(GTK_OBJECT(label_datefmt_btn), "clicked",
1543 GTK_SIGNAL_FUNC(create_date_format), NULL);
1545 hbox1 = gtk_hbox_new (FALSE, 8);
1546 gtk_widget_show (hbox1);
1547 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1549 button_dispitem = gtk_button_new_with_label
1550 (_(" Set display item of summary... "));
1551 gtk_widget_show (button_dispitem);
1552 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1553 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1554 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1557 display.entry_textfont = entry_textfont;
1558 display.button_textfont = button_textfont;
1560 display.chkbtn_folder_unread = chkbtn_folder_unread;
1561 display.chkbtn_transhdr = chkbtn_transhdr;
1563 display.chkbtn_swapfrom = chkbtn_swapfrom;
1564 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1565 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1568 static void prefs_message_create(void)
1573 GtkWidget *chkbtn_enablecol;
1574 GtkWidget *button_edit_col;
1575 GtkWidget *chkbtn_mbalnum;
1576 GtkWidget *chkbtn_disphdrpane;
1577 GtkWidget *chkbtn_disphdr;
1578 GtkWidget *button_edit_disphdr;
1579 GtkWidget *hbox_linespc;
1580 GtkWidget *label_linespc;
1581 GtkObject *spinbtn_linespc_adj;
1582 GtkWidget *spinbtn_linespc;
1583 GtkWidget *chkbtn_headspc;
1585 GtkWidget *frame_scr;
1586 GtkWidget *vbox_scr;
1587 GtkWidget *chkbtn_smoothscroll;
1588 GtkWidget *hbox_scr;
1589 GtkWidget *label_scr;
1590 GtkObject *spinbtn_scrollstep_adj;
1591 GtkWidget *spinbtn_scrollstep;
1592 GtkWidget *chkbtn_halfpage;
1594 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1595 gtk_widget_show (vbox1);
1596 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1597 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1599 hbox1 = gtk_hbox_new (FALSE, 8);
1600 gtk_widget_show (hbox1);
1601 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1603 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1604 _("Enable coloration of message"));
1605 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1606 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1609 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1610 gtk_widget_show (button_edit_col);
1611 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1612 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1613 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1615 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1617 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1618 gtk_widget_show (vbox2);
1619 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1622 (vbox2, chkbtn_mbalnum,
1623 _("Display 2-byte alphabet and numeric with 1-byte character"));
1624 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1625 _("Display header pane above message view"));
1627 hbox1 = gtk_hbox_new (FALSE, 8);
1628 gtk_widget_show (hbox1);
1629 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1631 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1632 _("Display short headers on message view"));
1634 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1635 gtk_widget_show (button_edit_disphdr);
1636 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1638 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1639 GTK_SIGNAL_FUNC (prefs_display_header_open),
1642 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1644 hbox1 = gtk_hbox_new (FALSE, 32);
1645 gtk_widget_show (hbox1);
1646 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1648 hbox_linespc = gtk_hbox_new (FALSE, 8);
1649 gtk_widget_show (hbox1);
1650 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1652 label_linespc = gtk_label_new (_("Line space"));
1653 gtk_widget_show (label_linespc);
1654 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1657 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1658 spinbtn_linespc = gtk_spin_button_new
1659 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1660 gtk_widget_show (spinbtn_linespc);
1661 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1663 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1664 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1666 label_linespc = gtk_label_new (_("pixel(s)"));
1667 gtk_widget_show (label_linespc);
1668 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1671 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1673 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1675 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1676 gtk_widget_show (vbox_scr);
1677 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1678 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1680 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1682 hbox1 = gtk_hbox_new (FALSE, 32);
1683 gtk_widget_show (hbox1);
1684 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1686 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1688 hbox_scr = gtk_hbox_new (FALSE, 8);
1689 gtk_widget_show (hbox_scr);
1690 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1692 label_scr = gtk_label_new (_("Step"));
1693 gtk_widget_show (label_scr);
1694 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1696 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1697 spinbtn_scrollstep = gtk_spin_button_new
1698 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1699 gtk_widget_show (spinbtn_scrollstep);
1700 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1702 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1703 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1706 label_scr = gtk_label_new (_("pixel(s)"));
1707 gtk_widget_show (label_scr);
1708 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1710 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1712 message.chkbtn_enablecol = chkbtn_enablecol;
1713 message.button_edit_col = button_edit_col;
1714 message.chkbtn_mbalnum = chkbtn_mbalnum;
1715 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1716 message.chkbtn_disphdr = chkbtn_disphdr;
1717 message.spinbtn_linespc = spinbtn_linespc;
1718 message.chkbtn_headspc = chkbtn_headspc;
1720 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1721 message.spinbtn_scrollstep = spinbtn_scrollstep;
1722 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1723 message.chkbtn_halfpage = chkbtn_halfpage;
1727 static void prefs_privacy_create(void)
1732 GtkWidget *checkbtn_gpgme_warning;
1733 GtkWidget *checkbtn_default_encrypt;
1734 GtkWidget *checkbtn_default_sign;
1735 GtkWidget *checkbtn_auto_check_signatures;
1736 GtkWidget *checkbtn_signature_popup;
1737 GtkWidget *checkbtn_passphrase_grab;
1739 GtkWidget *menuitem;
1741 GtkWidget *optmenu_menu;
1743 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1744 gtk_widget_show (vbox1);
1745 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1746 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1748 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1749 gtk_widget_show (vbox2);
1750 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1753 (vbox2, checkbtn_gpgme_warning,
1754 _("Display warning on startup if GnuPG does not work"));
1756 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1757 _("Encrypt message by default"));
1759 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1760 _("Sign message by default"));
1762 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1763 _("Automatically check signatures"));
1765 PACK_CHECK_BUTTON (vbox2, checkbtn_signature_popup,
1766 _("Show signature check result in a popup window"));
1769 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1770 _("Grab input while entering a passphrase"));
1773 hbox1 = gtk_hbox_new (FALSE, 8);
1774 gtk_widget_show (hbox1);
1775 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1777 /* create default signkey box */
1778 label = gtk_label_new (_("Default Sign Key"));
1779 gtk_widget_show (label);
1780 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1781 optmenu = gtk_option_menu_new ();
1782 gtk_widget_show (optmenu);
1783 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1784 optmenu_menu = gtk_menu_new ();
1786 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1787 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1788 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1789 /* FIXME: disabled because not implemented */
1790 gtk_widget_set_sensitive(optmenu, FALSE);
1792 privacy.checkbtn_gpgme_warning = checkbtn_gpgme_warning;
1793 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1794 privacy.checkbtn_default_sign = checkbtn_default_sign;
1795 privacy.checkbtn_auto_check_signatures
1796 = checkbtn_auto_check_signatures;
1797 privacy.checkbtn_signature_popup = checkbtn_signature_popup;
1798 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1799 privacy.optmenu_default_signkey = optmenu;
1803 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1807 GtkWidget *menuitem;
1810 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1811 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1812 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1813 g_free(*((gchar **)pparam->data));
1814 *((gchar **)pparam->data) = g_strdup(charset);
1818 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1822 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1824 GtkWidget *menuitem;
1828 g_return_if_fail(optmenu != NULL);
1829 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1831 menu = gtk_option_menu_get_menu(optmenu);
1832 for (cur = GTK_MENU_SHELL(menu)->children;
1833 cur != NULL; cur = cur->next) {
1834 menuitem = GTK_WIDGET(cur->data);
1835 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1836 if (!strcmp(charset, *((gchar **)pparam->data))) {
1837 gtk_option_menu_set_history(optmenu, n);
1843 gtk_option_menu_set_history(optmenu, 0);
1844 prefs_common_charset_set_data_from_optmenu(pparam);
1847 #endif /* USE_GPGME */
1849 static void prefs_interface_create(void)
1854 GtkWidget *checkbtn_emacs;
1855 GtkWidget *checkbtn_openunread;
1856 GtkWidget *checkbtn_openinbox;
1857 GtkWidget *checkbtn_immedexec;
1858 GtkWidget *checkbtn_addaddrbyclick;
1861 GtkWidget *frame_exit;
1862 GtkWidget *vbox_exit;
1864 GtkWidget *checkbtn_confonexit;
1865 GtkWidget *checkbtn_cleanonexit;
1866 GtkWidget *checkbtn_askonclean;
1867 GtkWidget *checkbtn_warnqueued;
1868 GtkWidget *checkbtn_returnreceipt;
1870 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1871 gtk_widget_show (vbox1);
1872 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1873 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1875 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1876 gtk_widget_show (vbox2);
1877 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1879 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1880 _("Emulate the behavior of mouse operation of\n"
1881 "Emacs-based mailer"));
1882 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1886 (vbox2, checkbtn_openunread,
1887 _("Open first unread message when entering a folder"));
1890 (vbox2, checkbtn_openinbox,
1891 _("Go to inbox after receiving new mail"));
1893 vbox3 = gtk_vbox_new (FALSE, 0);
1894 gtk_widget_show (vbox3);
1895 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1898 (vbox3, checkbtn_immedexec,
1899 _("Execute immediately when moving or deleting messages"));
1901 hbox1 = gtk_hbox_new (FALSE, 0);
1902 gtk_widget_show (hbox1);
1903 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1905 label = gtk_label_new
1906 (_("(Messages will be just marked till execution\n"
1907 " if this is turned off)"));
1908 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1909 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1912 (vbox2, checkbtn_addaddrbyclick,
1913 _("Add address to destination when double-clicked"));
1915 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1917 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1918 gtk_widget_show (vbox_exit);
1919 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1920 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1922 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1923 _("Confirm on exit"));
1925 hbox1 = gtk_hbox_new (FALSE, 32);
1926 gtk_widget_show (hbox1);
1927 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1929 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1930 _("Empty trash on exit"));
1931 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1932 _("Ask before emptying"));
1933 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1935 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1936 _("Warn if there are queued messages"));
1938 PACK_CHECK_BUTTON (vbox_exit, checkbtn_returnreceipt,
1939 _("Send return receipt on request"));
1941 interface.checkbtn_emacs = checkbtn_emacs;
1942 interface.checkbtn_openunread = checkbtn_openunread;
1943 interface.checkbtn_openinbox = checkbtn_openinbox;
1944 interface.checkbtn_immedexec = checkbtn_immedexec;
1945 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1946 interface.checkbtn_confonexit = checkbtn_confonexit;
1947 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
1948 interface.checkbtn_askonclean = checkbtn_askonclean;
1949 interface.checkbtn_warnqueued = checkbtn_warnqueued;
1950 interface.checkbtn_returnreceipt = checkbtn_returnreceipt;
1953 static void prefs_other_create(void)
1958 GtkWidget *uri_frame;
1959 GtkWidget *uri_label;
1960 GtkWidget *uri_combo;
1961 GtkWidget *uri_entry;
1963 GtkWidget *print_frame;
1964 GtkWidget *printcmd_label;
1965 GtkWidget *printcmd_entry;
1967 GtkWidget *exteditor_frame;
1968 GtkWidget *exteditor_label;
1969 GtkWidget *exteditor_combo;
1970 GtkWidget *exteditor_entry;
1972 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1973 gtk_widget_show (vbox1);
1974 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1975 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1977 PACK_FRAME(vbox1, uri_frame,
1978 _("External Web browser (%s will be replaced with URI)"));
1980 hbox1 = gtk_hbox_new (FALSE, 8);
1981 gtk_widget_show (hbox1);
1982 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
1983 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
1985 uri_label = gtk_label_new (_("Command"));
1986 gtk_widget_show(uri_label);
1987 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
1989 uri_combo = gtk_combo_new ();
1990 gtk_widget_show (uri_combo);
1991 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
1992 gtkut_combo_set_items (GTK_COMBO (uri_combo),
1993 "netscape -remote 'openURL(%s,raise)'",
1994 "gnome-moz-remote --raise --newwin '%s'",
1995 "kterm -e w3m '%s'",
1996 "kterm -e lynx '%s'",
1999 uri_entry = GTK_COMBO (uri_combo)->entry;
2001 PACK_FRAME(vbox1, print_frame,
2002 _("Printing (%s will be replaced with file name)"));
2004 hbox1 = gtk_hbox_new (FALSE, 8);
2005 gtk_widget_show (hbox1);
2006 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2007 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2009 printcmd_label = gtk_label_new (_("Command"));
2010 gtk_widget_show (printcmd_label);
2011 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2013 printcmd_entry = gtk_entry_new ();
2014 gtk_widget_show (printcmd_entry);
2015 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2017 PACK_FRAME(vbox1, exteditor_frame,
2018 _("External editor (%s will be replaced with file name)"));
2020 hbox1 = gtk_hbox_new (FALSE, 8);
2021 gtk_widget_show (hbox1);
2022 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2023 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2025 exteditor_label = gtk_label_new (_("Command"));
2026 gtk_widget_show (exteditor_label);
2027 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2029 exteditor_combo = gtk_combo_new ();
2030 gtk_widget_show (exteditor_combo);
2031 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2032 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2034 "mgedit --no-fork %s",
2040 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2042 other.uri_combo = uri_combo;
2043 other.uri_entry = uri_entry;
2044 other.printcmd_entry = printcmd_entry;
2046 other.exteditor_combo = exteditor_combo;
2047 other.exteditor_entry = exteditor_entry;
2050 void prefs_quote_colors_dialog(void)
2052 if (!quote_color_win)
2053 prefs_quote_colors_dialog_create();
2054 gtk_widget_show(quote_color_win);
2055 manage_window_set_transient(GTK_WINDOW(dialog.window));
2058 gtk_widget_hide(quote_color_win);
2060 textview_update_message_colors();
2061 main_window_reflect_prefs_all();
2064 static void prefs_quote_colors_dialog_create(void)
2069 GtkWidget *quotelevel1_label;
2070 GtkWidget *quotelevel2_label;
2071 GtkWidget *quotelevel3_label;
2072 GtkWidget *uri_label;
2075 //GtkWidget *cancel_btn;
2076 GtkWidget *recycle_colors_btn;
2077 GtkWidget *frame_colors;
2079 window = gtk_window_new(GTK_WINDOW_DIALOG);
2080 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2081 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2082 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2083 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2084 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2086 vbox = gtk_vbox_new (FALSE, VSPACING);
2087 gtk_container_add (GTK_CONTAINER (window), vbox);
2088 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2089 PACK_FRAME(vbox, frame_colors, _("Colors"));
2091 table = gtk_table_new (4, 2, FALSE);
2092 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2093 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2094 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2095 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
2097 color_buttons.quote_level1_btn = gtk_button_new();
2098 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2099 0, 1, 0, 1, 0, 0, 0, 0);
2100 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2101 gtk_container_set_border_width
2102 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2104 color_buttons.quote_level2_btn = gtk_button_new();
2105 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2106 0, 1, 1, 2, 0, 0, 0, 0);
2107 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2108 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2110 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2111 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2112 0, 1, 2, 3, 0, 0, 0, 0);
2113 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2114 gtk_container_set_border_width
2115 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2117 color_buttons.uri_btn = gtk_button_new_with_label ("");
2118 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2119 0, 1, 3, 4, 0, 0, 0, 0);
2120 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2121 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2123 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2124 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2125 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2126 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2127 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2129 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2130 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2131 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2132 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2133 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2135 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2136 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2137 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2138 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2139 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2141 uri_label = gtk_label_new (_("URI link"));
2142 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2143 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2144 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2145 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2147 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2148 _("Recycle quote colors"));
2150 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2151 NULL, NULL, NULL, NULL);
2152 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2154 gtk_widget_grab_default(ok_btn);
2155 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2156 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2157 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2158 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2159 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2160 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2161 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2162 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2165 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2166 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2167 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2168 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2169 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2170 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2171 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2172 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2173 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2174 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2175 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2176 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2178 /* show message button colors and recycle options */
2179 set_button_bg_color(color_buttons.quote_level1_btn,
2180 prefs_common.quote_level1_col);
2181 set_button_bg_color(color_buttons.quote_level2_btn,
2182 prefs_common.quote_level2_col);
2183 set_button_bg_color(color_buttons.quote_level3_btn,
2184 prefs_common.quote_level3_col);
2185 set_button_bg_color(color_buttons.uri_btn,
2186 prefs_common.uri_col);
2187 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2188 prefs_common.recycle_quote_colors);
2190 gtk_widget_show_all(vbox);
2191 quote_color_win = window;
2194 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2195 GdkEventKey *event, gpointer data)
2197 if (event && event->keyval == GDK_Escape)
2201 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2203 gchar *type = (gchar *)data;
2204 gchar *title = NULL;
2205 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2207 GtkColorSelectionDialog *dialog;
2209 if(g_strcasecmp(type, "LEVEL1") == 0) {
2210 title = _("Pick color for quotation level 1");
2211 rgbvalue = prefs_common.quote_level1_col;
2212 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2213 title = _("Pick color for quotation level 2");
2214 rgbvalue = prefs_common.quote_level2_col;
2215 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2216 title = _("Pick color for quotation level 3");
2217 rgbvalue = prefs_common.quote_level3_col;
2218 } else if(g_strcasecmp(type, "URI") == 0) {
2219 title = _("Pick color for URI");
2220 rgbvalue = prefs_common.uri_col;
2221 } else { /* Should never be called */
2222 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2226 color_dialog = gtk_color_selection_dialog_new(title);
2227 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2228 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2229 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2230 manage_window_set_transient(GTK_WINDOW(color_dialog));
2232 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2233 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2234 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2235 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2236 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2237 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2240 /* preselect the previous color in the color selection dialog */
2241 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2242 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2243 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2244 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2245 gtk_color_selection_set_color
2246 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2248 gtk_widget_show(color_dialog);
2251 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2253 GtkColorSelection *colorsel = (GtkColorSelection *)
2254 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2256 gint red, green, blue, rgbvalue;
2257 gchar *type = (gchar *)data;
2259 gtk_color_selection_get_color(colorsel, color);
2261 red = (gint) (color[0] * 255.0);
2262 green = (gint) (color[1] * 255.0);
2263 blue = (gint) (color[2] * 255.0);
2264 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2267 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2268 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2269 fprintf(stderr, "Color is %x\n", rgbvalue);
2272 if (g_strcasecmp(type, "LEVEL1") == 0) {
2273 prefs_common.quote_level1_col = rgbvalue;
2274 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2275 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2276 prefs_common.quote_level2_col = rgbvalue;
2277 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2278 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2279 prefs_common.quote_level3_col = rgbvalue;
2280 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2281 } else if (g_strcasecmp(type, "URI") == 0) {
2282 prefs_common.uri_col = rgbvalue;
2283 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2285 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2287 gtk_widget_destroy(color_dialog);
2290 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2292 gtk_widget_destroy(color_dialog);
2295 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2299 gtk_widget_destroy(color_dialog);
2302 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2307 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2308 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2309 newstyle->bg[GTK_STATE_NORMAL] = color;
2310 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2311 newstyle->bg[GTK_STATE_ACTIVE] = color;
2313 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2316 static void prefs_enable_message_color_toggled(void)
2320 is_active = gtk_toggle_button_get_active
2321 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2322 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2323 prefs_common.enable_color = is_active;
2326 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2330 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2331 prefs_common.recycle_quote_colors = is_active;
2334 static void prefs_quote_description(void)
2336 if (!quote_desc_win)
2337 prefs_quote_description_create();
2339 gtk_widget_show(quote_desc_win);
2341 gtk_widget_hide(quote_desc_win);
2344 static void prefs_quote_description_create(void)
2352 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2353 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2354 _("Description of symbols"));
2355 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2356 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2357 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2358 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2360 vbox = gtk_vbox_new(FALSE, 8);
2361 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2363 hbox = gtk_hbox_new(FALSE, 4);
2364 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2366 label = gtk_label_new
2377 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2378 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2380 label = gtk_label_new
2383 "Full Name of Sender\n"
2384 "First Name of Sender\n"
2385 "Initial of Sender\n"
2391 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2392 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2394 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2395 NULL, NULL, NULL, NULL);
2396 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2398 gtk_widget_grab_default(ok_btn);
2399 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2400 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2402 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2403 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2405 gtk_widget_show_all(vbox);
2408 /* functions for setting items of SummaryView */
2410 static struct _SummaryDisplayItem
2414 GtkWidget *chkbtn[N_SUMMARY_COLS];
2417 GtkWidget *cancel_btn;
2420 #define SET_ACTIVE(column, var) \
2421 gtk_toggle_button_set_active \
2422 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2424 #define GET_ACTIVE(column, var) \
2425 prefs_common.var = gtk_toggle_button_get_active \
2426 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2428 void prefs_summary_display_item_set(void)
2430 static gboolean cancelled;
2432 if (!summarydispitem.window)
2433 prefs_summary_display_item_dialog_create(&cancelled);
2434 gtk_widget_grab_focus(summarydispitem.ok_btn);
2435 gtk_widget_show(summarydispitem.window);
2436 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2438 SET_ACTIVE(S_COL_MARK, show_mark);
2439 SET_ACTIVE(S_COL_UNREAD, show_unread);
2440 SET_ACTIVE(S_COL_MIME, show_mime);
2441 SET_ACTIVE(S_COL_NUMBER, show_number);
2442 SET_ACTIVE(S_COL_SCORE, show_score);
2443 SET_ACTIVE(S_COL_SIZE, show_size);
2444 SET_ACTIVE(S_COL_DATE, show_date);
2445 SET_ACTIVE(S_COL_FROM, show_from);
2446 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2449 gtk_widget_hide(summarydispitem.window);
2451 if (cancelled != TRUE) {
2452 GET_ACTIVE(S_COL_MARK, show_mark);
2453 GET_ACTIVE(S_COL_UNREAD, show_unread);
2454 GET_ACTIVE(S_COL_MIME, show_mime);
2455 GET_ACTIVE(S_COL_NUMBER, show_number);
2456 GET_ACTIVE(S_COL_SCORE, show_score);
2457 GET_ACTIVE(S_COL_SIZE, show_size);
2458 GET_ACTIVE(S_COL_DATE, show_date);
2459 GET_ACTIVE(S_COL_FROM, show_from);
2460 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2462 main_window_reflect_prefs_all();
2466 #define SET_CHECK_BUTTON(column, label) \
2468 summarydispitem.chkbtn[column] = \
2469 gtk_check_button_new_with_label(label); \
2470 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2471 summarydispitem.chkbtn[column], \
2475 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2479 GtkWidget *chkbtn_vbox;
2482 GtkWidget *cancel_btn;
2484 window = gtk_window_new(GTK_WINDOW_DIALOG);
2485 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2486 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2487 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2488 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2489 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2490 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2491 GTK_SIGNAL_FUNC(display_item_delete_event),
2493 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2494 GTK_SIGNAL_FUNC(display_item_key_pressed),
2497 vbox = gtk_vbox_new(FALSE, 8);
2498 gtk_container_add(GTK_CONTAINER(window), vbox);
2500 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2501 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2503 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2504 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2505 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2506 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2507 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2508 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2509 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2510 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2511 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2513 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2514 &cancel_btn, _("Cancel"), NULL, NULL);
2515 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2516 gtk_widget_grab_default(ok_btn);
2518 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2519 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2520 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2521 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2523 gtk_widget_show_all(vbox);
2525 summarydispitem.window = window;
2526 summarydispitem.ok_btn = ok_btn;
2527 summarydispitem.cancel_btn = cancel_btn;
2530 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2536 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2542 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2543 gboolean *cancelled)
2551 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2552 gboolean *cancelled)
2554 if (event && event->keyval == GDK_Escape) {
2560 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
2562 if (!font_sel_win) {
2563 font_sel_win = gtk_font_selection_dialog_new
2564 (_("Font selection"));
2565 gtk_window_position(GTK_WINDOW(font_sel_win),
2566 GTK_WIN_POS_CENTER);
2567 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2568 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2571 (GTK_OBJECT(font_sel_win), "key_press_event",
2572 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2575 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2577 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2579 gtk_signal_connect_object
2580 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2582 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2583 GTK_OBJECT(font_sel_win));
2586 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2587 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2588 gtk_widget_grab_focus
2589 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2590 gtk_widget_show(font_sel_win);
2593 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2597 if (event && event->keyval == GDK_Escape)
2598 gtk_widget_hide(font_sel_win);
2601 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
2605 fontname = gtk_font_selection_dialog_get_font_name
2606 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2609 gtk_entry_set_text(entry, fontname);
2613 gtk_widget_hide(font_sel_win);
2616 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2619 GtkWidget *menuitem;
2622 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2623 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2624 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2625 g_free(*((gchar **)pparam->data));
2626 *((gchar **)pparam->data) = g_strdup(charset);
2629 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2632 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2634 GtkWidget *menuitem;
2638 g_return_if_fail(optmenu != NULL);
2639 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2641 menu = gtk_option_menu_get_menu(optmenu);
2642 for (cur = GTK_MENU_SHELL(menu)->children;
2643 cur != NULL; cur = cur->next) {
2644 menuitem = GTK_WIDGET(cur->data);
2645 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2646 if (!strcmp(charset, *((gchar **)pparam->data))) {
2647 gtk_option_menu_set_history(optmenu, n);
2653 gtk_option_menu_set_history(optmenu, 0);
2654 prefs_common_charset_set_data_from_optmenu(pparam);
2657 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2660 prefs_common_cancel();
2664 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2667 if (event && event->keyval == GDK_Escape)
2668 prefs_common_cancel();
2671 static void prefs_common_ok(void)
2673 prefs_common_apply();
2674 gtk_widget_hide(dialog.window);
2675 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2676 gtk_widget_hide(quote_desc_win);
2678 inc_autocheck_timer_set();
2681 static void prefs_common_apply(void)
2683 prefs_set_data_from_dialog(param);
2684 main_window_reflect_prefs_all();
2685 prefs_common_save_config();
2688 static void prefs_common_cancel(void)
2690 gtk_widget_hide(dialog.window);
2691 inc_autocheck_timer_set();