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;
86 GtkWidget *checkbtn_returnreceipt;
89 static struct Compose {
90 GtkWidget *checkbtn_quote;
91 GtkWidget *entry_quotemark;
92 GtkWidget *text_quotefmt;
93 GtkWidget *checkbtn_autosig;
94 GtkWidget *entry_sigsep;
96 GtkWidget *entry_fw_quotemark;
97 GtkWidget *text_fw_quotefmt;
99 GtkWidget *spinbtn_linewrap;
100 GtkObject *spinbtn_linewrap_adj;
101 GtkWidget *checkbtn_wrapquote;
102 GtkWidget *checkbtn_wrapatsend;
104 GtkWidget * checkbtn_forward_as_attachment;
107 static struct Display {
108 GtkWidget *entry_textfont;
109 GtkWidget *button_textfont;
111 GtkWidget *entry_smallfont;
112 GtkWidget *entry_normalfont;
113 GtkWidget *entry_boldfont;
115 GtkWidget *chkbtn_folder_unread;
117 GtkWidget *chkbtn_transhdr;
119 GtkWidget *chkbtn_swapfrom;
120 GtkWidget *chkbtn_hscrollbar;
121 GtkWidget *chkbtn_useaddrbook;
123 GtkWidget *entry_datefmt;
126 static struct Message {
127 GtkWidget *chkbtn_enablecol;
128 GtkWidget *button_edit_col;
129 GtkWidget *chkbtn_mbalnum;
130 GtkWidget *chkbtn_disphdrpane;
131 GtkWidget *chkbtn_disphdr;
132 GtkWidget *spinbtn_linespc;
133 GtkObject *spinbtn_linespc_adj;
134 GtkWidget *chkbtn_headspc;
136 GtkWidget *chkbtn_smoothscroll;
137 GtkWidget *spinbtn_scrollstep;
138 GtkObject *spinbtn_scrollstep_adj;
139 GtkWidget *chkbtn_halfpage;
143 static struct Privacy {
144 GtkWidget *checkbtn_default_encrypt;
145 GtkWidget *checkbtn_default_sign;
146 GtkWidget *checkbtn_auto_check_signatures;
147 GtkWidget *checkbtn_gpg_signature_popup;
148 GtkWidget *checkbtn_passphrase_grab;
149 GtkWidget *checkbtn_gpg_warning;
150 GtkWidget *optmenu_default_signkey;
154 static struct Interface {
155 GtkWidget *checkbtn_emacs;
156 GtkWidget *checkbtn_openunread;
157 GtkWidget *checkbtn_openinbox;
158 GtkWidget *checkbtn_immedexec;
159 GtkWidget *checkbtn_confonexit;
160 GtkWidget *checkbtn_cleanonexit;
161 GtkWidget *checkbtn_askonclean;
162 GtkWidget *checkbtn_warnqueued;
163 GtkWidget *checkbtn_addaddrbyclick;
166 static struct Other {
167 GtkWidget *uri_combo;
168 GtkWidget *uri_entry;
169 GtkWidget *printcmd_entry;
170 GtkWidget *exteditor_combo;
171 GtkWidget *exteditor_entry;
174 static struct MessageColorButtons {
175 GtkWidget *quote_level1_btn;
176 GtkWidget *quote_level2_btn;
177 GtkWidget *quote_level3_btn;
181 static GtkWidget *quote_desc_win;
182 static GtkWidget *font_sel_win;
183 static GtkWidget *quote_color_win;
184 static GtkWidget *color_dialog;
186 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
187 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
189 static void prefs_common_default_signkey_set_data_from_optmenu
191 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
195 parameter name, default value, pointer to the prefs variable, data type,
196 pointer to the widget pointer,
197 pointer to the function for data setting,
198 pointer to the function for widget setting
201 static PrefParam param[] = {
203 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
204 &receive.checkbtn_incext,
205 prefs_set_data_from_toggle, prefs_set_toggle},
206 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
207 &receive.entry_incext,
208 prefs_set_data_from_entry, prefs_set_entry},
210 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
211 &receive.checkbtn_local,
212 prefs_set_data_from_toggle, prefs_set_toggle},
213 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
214 &receive.checkbtn_filter_on_inc,
215 prefs_set_data_from_toggle, prefs_set_toggle},
216 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
217 &receive.entry_spool,
218 prefs_set_data_from_entry, prefs_set_entry},
220 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
221 &receive.checkbtn_autochk,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
224 &receive.spinbtn_autochk,
225 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
226 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
227 &receive.checkbtn_chkonstartup,
228 prefs_set_data_from_toggle, prefs_set_toggle},
230 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
231 &receive.spinbtn_maxarticle,
232 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
235 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
236 &send.checkbtn_sendext,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
239 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
240 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
241 &send.checkbtn_savemsg,
242 prefs_set_data_from_toggle, prefs_set_toggle},
243 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
244 &send.checkbtn_queuemsg,
245 prefs_set_data_from_toggle, prefs_set_toggle},
247 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
248 &send.optmenu_charset,
249 prefs_common_charset_set_data_from_optmenu,
250 prefs_common_charset_set_optmenu},
253 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
254 &compose.checkbtn_quote,
255 prefs_set_data_from_toggle, prefs_set_toggle},
256 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
257 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
258 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
259 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
260 prefs_set_data_from_text, prefs_set_text},
261 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
262 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
263 {"fw_quote_format", "---------- Forwarded message ----------\\n?d(Date: %d\\n)?f(From: %f\\n)?t(To: %t\\n)?c(Cc: %c\\n)?n(Newsgroups: %n\\n)?s(Subject: %s\\n)\\n%Q",
264 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
265 prefs_set_data_from_text, prefs_set_text},
267 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
268 &compose.checkbtn_autosig,
269 prefs_set_data_from_toggle, prefs_set_toggle},
270 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
271 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
273 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
274 &compose.spinbtn_linewrap,
275 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
276 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
277 &compose.checkbtn_wrapquote,
278 prefs_set_data_from_toggle, prefs_set_toggle},
279 {"linewrap_before_sending", "FALSE",
280 &prefs_common.linewrap_at_send, P_BOOL,
281 &compose.checkbtn_wrapatsend,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
284 P_BOOL, &compose.checkbtn_forward_as_attachment,
285 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
291 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
293 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294 &prefs_common.textfont, P_STRING,
295 &display.entry_textfont,
296 prefs_set_data_from_entry, prefs_set_entry},
297 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
298 &prefs_common.smallfont, P_STRING,
299 &display.entry_smallfont,
300 prefs_set_data_from_entry, prefs_set_entry},
301 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
302 &prefs_common.boldfont, P_STRING,
303 &display.entry_boldfont,
304 prefs_set_data_from_entry, prefs_set_entry},
305 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
306 &prefs_common.normalfont, P_STRING,
307 &display.entry_normalfont,
308 prefs_set_data_from_entry, prefs_set_entry},
310 {"display_folder_unread_num", "TRUE",
311 &prefs_common.display_folder_unread, P_BOOL,
312 &display.chkbtn_folder_unread,
313 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
316 &display.chkbtn_transhdr,
317 prefs_set_data_from_toggle, prefs_set_toggle},
319 /* Display: Summary View */
320 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
321 &display.chkbtn_swapfrom,
322 prefs_set_data_from_toggle, prefs_set_toggle},
323 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
324 &display.chkbtn_hscrollbar,
325 prefs_set_data_from_toggle, prefs_set_toggle},
326 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
327 &display.chkbtn_useaddrbook,
328 prefs_set_data_from_toggle, prefs_set_toggle},
329 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
330 P_STRING, &display.entry_datefmt,
331 prefs_set_data_from_entry, prefs_set_entry},
334 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
337 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
339 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
342 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
344 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
346 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
348 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
350 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
352 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
354 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
356 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
358 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
362 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
364 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
366 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
368 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
370 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
372 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
374 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
376 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
378 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
380 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
382 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
384 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
386 {"summary_col_score", "40", &prefs_common.summary_col_score,
387 P_INT, NULL, NULL, NULL},
388 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
390 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
392 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
394 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
395 P_INT, NULL, NULL, NULL},
396 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
398 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
400 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
402 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
404 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
406 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
408 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
410 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
412 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
414 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
416 {"compose_width", "600", &prefs_common.compose_width, P_INT,
418 {"compose_height", "560", &prefs_common.compose_height, P_INT,
422 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
423 &message.chkbtn_enablecol,
424 prefs_set_data_from_toggle, prefs_set_toggle},
426 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
428 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
430 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
432 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
434 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
436 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
437 P_BOOL, NULL, NULL, NULL},
439 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
440 &message.chkbtn_mbalnum,
441 prefs_set_data_from_toggle, prefs_set_toggle},
442 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
443 P_BOOL, &message.chkbtn_disphdrpane,
444 prefs_set_data_from_toggle, prefs_set_toggle},
445 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
446 &message.chkbtn_disphdr,
447 prefs_set_data_from_toggle, prefs_set_toggle},
448 {"line_space", "2", &prefs_common.line_space, P_INT,
449 &message.spinbtn_linespc,
450 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
451 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
452 &message.chkbtn_headspc,
453 prefs_set_data_from_toggle, prefs_set_toggle},
455 {"enable_smooth_scroll", "FALSE",
456 &prefs_common.enable_smooth_scroll, P_BOOL,
457 &message.chkbtn_smoothscroll,
458 prefs_set_data_from_toggle, prefs_set_toggle},
459 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
460 &message.spinbtn_scrollstep,
461 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
462 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
463 &message.chkbtn_halfpage,
464 prefs_set_data_from_toggle, prefs_set_toggle},
466 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
470 {"mime_image_viewer", "display '%s'",
471 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
472 {"mime_audio_player", "play '%s'",
473 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
477 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
478 &privacy.checkbtn_default_encrypt,
479 prefs_set_data_from_toggle, prefs_set_toggle},
480 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
481 &privacy.checkbtn_default_sign,
482 prefs_set_data_from_toggle, prefs_set_toggle},
483 {"auto_check_signatures", "TRUE",
484 &prefs_common.auto_check_signatures, P_BOOL,
485 &privacy.checkbtn_auto_check_signatures,
486 prefs_set_data_from_toggle, prefs_set_toggle},
487 {"gpg_signature_popup", "FALSE",
488 &prefs_common.gpg_signature_popup, P_BOOL,
489 &privacy.checkbtn_gpg_signature_popup,
490 prefs_set_data_from_toggle, prefs_set_toggle},
492 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
493 &privacy.checkbtn_passphrase_grab,
494 prefs_set_data_from_toggle, prefs_set_toggle},
495 #endif /* __MINGW32__ */
496 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
497 &privacy.checkbtn_gpg_warning,
498 prefs_set_data_from_toggle, prefs_set_toggle},
499 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
500 &privacy.optmenu_default_signkey,
501 prefs_common_default_signkey_set_data_from_optmenu,
502 prefs_common_default_signkey_set_optmenu},
503 #endif /* USE_GPGME */
506 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
508 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
511 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
512 &interface.checkbtn_emacs,
513 prefs_set_data_from_toggle, prefs_set_toggle},
514 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
515 P_BOOL, &interface.checkbtn_openunread,
516 prefs_set_data_from_toggle, prefs_set_toggle},
517 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
518 P_BOOL, &interface.checkbtn_openinbox,
519 prefs_set_data_from_toggle, prefs_set_toggle},
520 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
521 &interface.checkbtn_immedexec,
522 prefs_set_data_from_toggle, prefs_set_toggle},
523 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
524 P_BOOL, &interface.checkbtn_addaddrbyclick,
525 prefs_set_data_from_toggle, prefs_set_toggle},
527 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
528 &interface.checkbtn_confonexit,
529 prefs_set_data_from_toggle, prefs_set_toggle},
530 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
531 &send.checkbtn_returnreceipt,
532 prefs_set_data_from_toggle, prefs_set_toggle},
533 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
534 &interface.checkbtn_cleanonexit,
535 prefs_set_data_from_toggle, prefs_set_toggle},
536 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
537 &interface.checkbtn_askonclean,
538 prefs_set_data_from_toggle, prefs_set_toggle},
539 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
540 P_BOOL, &interface.checkbtn_warnqueued,
541 prefs_set_data_from_toggle, prefs_set_toggle},
544 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
545 &prefs_common.uri_cmd, P_STRING,
546 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
547 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
548 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
549 {"ext_editor_command", "gedit %s",
550 &prefs_common.ext_editor_cmd, P_STRING,
551 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
553 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
555 {"important_score", "1", &prefs_common.important_score, P_INT,
558 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
562 #define VSPACING_NARROW 4
563 #define VBOX_BORDER 16
564 #define DEFAULT_ENTRY_WIDTH 80
565 #define PREFSBUFSIZE 1024
567 /* widget creating functions */
568 static void prefs_common_create (void);
569 static void prefs_receive_create (void);
570 static void prefs_send_create (void);
571 static void prefs_compose_create (void);
572 static void prefs_display_create (void);
573 static void prefs_message_create (void);
575 static void prefs_privacy_create (void);
577 static void prefs_interface_create (void);
578 static void prefs_other_create (void);
580 static void prefs_quote_description (void);
581 static void prefs_quote_description_create (void);
582 static void prefs_quote_colors_dialog (void);
583 static void prefs_quote_colors_dialog_create (void);
584 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
587 static void quote_color_set_dialog (GtkWidget *widget,
589 static void quote_colors_set_dialog_ok (GtkWidget *widget,
591 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
593 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
596 static void set_button_bg_color (GtkWidget *widget,
598 static void prefs_enable_message_color_toggled (void);
599 static void prefs_recycle_colors_toggled (GtkWidget *widget);
601 /* functions for setting items of SummaryView */
602 static void prefs_summary_display_item_dialog_create
603 (gboolean *cancelled);
604 static void display_item_ok (GtkWidget *widget,
605 gboolean *cancelled);
606 static void display_item_cancel (GtkWidget *widget,
607 gboolean *cancelled);
608 static gint display_item_delete_event (GtkWidget *widget,
610 gboolean *cancelled);
611 static void display_item_key_pressed (GtkWidget *widget,
613 gboolean *cancelled);
615 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
616 static void prefs_font_selection_key_pressed (GtkWidget *widget,
619 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
621 static gint prefs_common_deleted (GtkWidget *widget,
624 static void prefs_common_key_pressed (GtkWidget *widget,
627 static void prefs_common_ok (void);
628 static void prefs_common_apply (void);
629 static void prefs_common_cancel (void);
631 static void compose_prefs_fmt_open(void);
632 static void compose_prefs_fmt_create(void);
634 void prefs_common_read_config(void)
636 prefs_read_config(param, "Common", COMMON_RC);
639 void prefs_common_save_config(void)
641 prefs_save_config(param, "Common", COMMON_RC);
644 void prefs_common_open(void)
646 if (prefs_rc_is_readonly(COMMON_RC))
649 inc_autocheck_timer_remove();
651 if (!dialog.window) {
652 prefs_common_create();
655 manage_window_set_transient(GTK_WINDOW(dialog.window));
656 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
657 gtk_widget_grab_focus(dialog.ok_btn);
659 prefs_set_dialog(param);
661 gtk_widget_show(dialog.window);
664 static void prefs_common_create(void)
668 debug_print(_("Creating common preferences window...\n"));
670 prefs_dialog_create(&dialog);
671 gtk_window_set_title (GTK_WINDOW(dialog.window),
672 _("Common Preferences"));
673 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
674 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
675 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
676 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
677 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
678 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
679 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
680 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
681 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
682 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
683 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
684 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
685 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
686 GTK_SIGNAL_FUNC(prefs_common_cancel),
687 GTK_OBJECT(dialog.window));
689 /* create all widgets on notebook */
690 prefs_receive_create();
691 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
693 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
694 prefs_compose_create();
695 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
696 prefs_display_create();
697 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
698 prefs_message_create();
699 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
701 prefs_privacy_create();
702 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
704 prefs_interface_create();
705 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
706 prefs_other_create();
707 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
709 compose_prefs_fmt_create();
711 gtk_widget_show_all(dialog.window);
714 static void prefs_receive_create(void)
718 GtkWidget *frame_incext;
719 GtkWidget *checkbtn_incext;
721 GtkWidget *label_incext;
722 GtkWidget *entry_incext;
723 GtkWidget *button_incext;
725 GtkWidget *frame_spool;
726 GtkWidget *checkbtn_local;
727 GtkWidget *checkbtn_filter_on_inc;
728 GtkWidget *label_spool;
729 GtkWidget *entry_spool;
731 GtkWidget *hbox_autochk;
732 GtkWidget *checkbtn_autochk;
733 GtkWidget *label_autochk1;
734 GtkObject *spinbtn_autochk_adj;
735 GtkWidget *spinbtn_autochk;
736 GtkWidget *label_autochk2;
737 GtkWidget *checkbtn_chkonstartup;
739 GtkWidget *frame_news;
740 GtkWidget *label_maxarticle;
741 GtkWidget *spinbtn_maxarticle;
742 GtkObject *spinbtn_maxarticle_adj;
744 vbox1 = gtk_vbox_new (FALSE, VSPACING);
745 gtk_widget_show (vbox1);
746 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
747 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
749 PACK_FRAME(vbox1, frame_incext, _("External program"));
751 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
752 gtk_widget_show (vbox2);
753 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
754 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
756 /* Use of external incorporation program */
757 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
758 _("Use external program for incorporation"));
760 hbox = gtk_hbox_new (FALSE, 8);
761 gtk_widget_show (hbox);
762 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
763 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
765 label_incext = gtk_label_new (_("Program path"));
766 gtk_widget_show (label_incext);
767 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
769 entry_incext = gtk_entry_new ();
770 gtk_widget_show (entry_incext);
771 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
773 button_incext = gtk_button_new_with_label ("... ");
774 gtk_widget_show (button_incext);
775 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
777 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
779 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
780 gtk_widget_show (vbox2);
781 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
782 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
784 hbox = gtk_hbox_new (FALSE, 32);
785 gtk_widget_show (hbox);
786 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
788 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
789 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
790 _("Filter on incorporation"));
791 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
793 hbox = gtk_hbox_new (FALSE, 8);
794 gtk_widget_show (hbox);
795 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
796 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
798 label_spool = gtk_label_new (_("Spool directory"));
799 gtk_widget_show (label_spool);
800 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
802 entry_spool = gtk_entry_new ();
803 gtk_widget_show (entry_spool);
804 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
806 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
807 gtk_widget_show (vbox2);
808 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
811 hbox_autochk = gtk_hbox_new (FALSE, 8);
812 gtk_widget_show (hbox_autochk);
813 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
815 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
816 _("Auto-check new mail"));
818 label_autochk1 = gtk_label_new (_("each"));
819 gtk_widget_show (label_autochk1);
820 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
822 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
823 spinbtn_autochk = gtk_spin_button_new
824 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
825 gtk_widget_show (spinbtn_autochk);
826 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
827 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
828 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
830 label_autochk2 = gtk_label_new (_("minute(s)"));
831 gtk_widget_show (label_autochk2);
832 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
834 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
835 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
836 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
838 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
839 _("Check new mail on startup"));
841 PACK_FRAME(vbox1, frame_news, _("News"));
843 hbox = gtk_hbox_new (FALSE, 8);
844 gtk_widget_show (hbox);
845 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
846 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
848 label_maxarticle = gtk_label_new
849 (_("Maximum article number to download\n"
850 "(unlimited if 0 is specified)"));
851 gtk_widget_show (label_maxarticle);
852 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
853 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
855 spinbtn_maxarticle_adj =
856 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
857 spinbtn_maxarticle = gtk_spin_button_new
858 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
859 gtk_widget_show (spinbtn_maxarticle);
860 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
862 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
863 gtk_spin_button_set_numeric
864 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
866 receive.checkbtn_incext = checkbtn_incext;
867 receive.entry_incext = entry_incext;
868 receive.button_incext = button_incext;
870 receive.checkbtn_local = checkbtn_local;
871 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
872 receive.entry_spool = entry_spool;
874 receive.checkbtn_autochk = checkbtn_autochk;
875 receive.spinbtn_autochk = spinbtn_autochk;
876 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
878 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
880 receive.spinbtn_maxarticle = spinbtn_maxarticle;
881 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
884 static void prefs_send_create(void)
888 GtkWidget *frame_sendext;
889 GtkWidget *vbox_sendext;
890 GtkWidget *checkbtn_sendext;
892 GtkWidget *label_sendext;
893 GtkWidget *entry_sendext;
894 GtkWidget *button_sendext;
895 GtkWidget *checkbtn_savemsg;
896 GtkWidget *checkbtn_queuemsg;
897 GtkWidget *label_outcharset;
899 GtkWidget *optmenu_menu;
901 GtkWidget *checkbtn_returnreceipt;
903 vbox1 = gtk_vbox_new (FALSE, VSPACING);
904 gtk_widget_show (vbox1);
905 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
906 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
908 PACK_FRAME(vbox1, frame_sendext, _("External program"));
910 gtk_widget_set_sensitive(frame_sendext, FALSE);
912 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
913 gtk_widget_show (vbox_sendext);
914 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
915 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
917 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
918 _("Use external program for sending"));
920 hbox1 = gtk_hbox_new (FALSE, 8);
921 gtk_widget_show (hbox1);
922 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
923 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
925 label_sendext = gtk_label_new (_("Program path"));
926 gtk_widget_show (label_sendext);
927 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
929 entry_sendext = gtk_entry_new ();
930 gtk_widget_show (entry_sendext);
931 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
933 button_sendext = gtk_button_new_with_label ("... ");
934 gtk_widget_show (button_sendext);
935 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
937 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
938 gtk_widget_show (vbox2);
939 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
941 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
942 _("Save sent messages to outbox"));
943 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
944 _("Queue messages that fail to send"));
945 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
946 _("Send return receipt on request"));
948 hbox1 = gtk_hbox_new (FALSE, 8);
949 gtk_widget_show (hbox1);
950 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
952 label_outcharset = gtk_label_new (_("Outgoing codeset"));
953 gtk_widget_show (label_outcharset);
954 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
956 optmenu = gtk_option_menu_new ();
957 gtk_widget_show (optmenu);
958 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
960 optmenu_menu = gtk_menu_new ();
962 #define SET_MENUITEM(str, charset) \
964 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
967 SET_MENUITEM(_("Automatic"), CS_AUTO);
968 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
970 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
972 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
974 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
975 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
976 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
977 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
978 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
979 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
980 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
981 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
982 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
983 #endif /* HAVE_LIBJCONV */
984 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
986 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
987 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
990 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
991 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
993 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
994 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
996 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
997 #endif /* HAVE_LIBJCONV */
999 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1001 send.checkbtn_sendext = checkbtn_sendext;
1002 send.entry_sendext = entry_sendext;
1003 send.button_sendext = button_sendext;
1005 send.checkbtn_savemsg = checkbtn_savemsg;
1006 send.checkbtn_queuemsg = checkbtn_queuemsg;
1007 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1009 send.optmenu_charset = optmenu;
1012 static void prefs_compose_create(void)
1017 GtkWidget *frame_quote;
1018 GtkWidget *vbox_quote;
1019 GtkWidget *checkbtn_quote;
1021 GtkWidget *label_quotemark;
1022 GtkWidget *entry_quotemark;
1024 GtkWidget *label_quotefmt;
1025 GtkWidget *btn_quotedesc;
1026 GtkWidget *scrolledwin_quotefmt;
1027 GtkWidget *text_quotefmt;
1032 GtkWidget *btn_quotefmt;
1034 GtkWidget *frame_sig;
1035 GtkWidget *vbox_sig;
1036 GtkWidget *checkbtn_autosig;
1037 GtkWidget *label_sigsep;
1038 GtkWidget *entry_sigsep;
1040 GtkWidget *vbox_linewrap;
1043 GtkWidget *label_linewrap;
1044 GtkObject *spinbtn_linewrap_adj;
1045 GtkWidget *spinbtn_linewrap;
1046 GtkWidget *checkbtn_wrapquote;
1047 GtkWidget *checkbtn_wrapatsend;
1049 GtkWidget *checkbtn_forward_as_attachment;
1051 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1052 gtk_widget_show (vbox1);
1053 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1054 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1057 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1059 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1060 gtk_widget_show (vbox_quote);
1061 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1062 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1064 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1065 _("Quote message when replying"));
1067 hbox1 = gtk_hbox_new (FALSE, 8);
1068 gtk_widget_show (hbox1);
1069 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1071 label_quotemark = gtk_label_new (_("Quotation mark"));
1072 gtk_widget_show (label_quotemark);
1073 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1075 entry_quotemark = gtk_entry_new ();
1076 gtk_widget_show (entry_quotemark);
1077 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1078 gtk_widget_set_usize (entry_quotemark, 64, -1);
1080 hbox2 = gtk_hbox_new (FALSE, 0);
1081 gtk_widget_show (hbox2);
1082 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1084 label_quotefmt = gtk_label_new (_("Quotation format:"));
1085 gtk_widget_show (label_quotefmt);
1086 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1089 gtk_button_new_with_label (_(" Quote format "));
1090 gtk_widget_show (btn_quotedesc);
1091 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1092 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1093 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), &cancelled);
1095 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1096 gtk_widget_show (scrolledwin_quotefmt);
1097 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1098 gtk_scrolled_window_set_policy
1099 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1100 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1102 text_quotefmt = gtk_text_new (NULL, NULL);
1103 gtk_widget_show (text_quotefmt);
1104 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1105 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1106 gtk_widget_set_usize(text_quotefmt, -1, 60);
1109 hbox1 = gtk_hbox_new (FALSE, 32);
1110 gtk_widget_show (hbox1);
1111 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1113 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1114 gtk_widget_show (btn_quotefmt);
1115 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1116 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1117 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1119 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1121 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1122 gtk_widget_show (vbox_sig);
1123 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1124 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1126 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1127 _("Insert signature automatically"));
1129 hbox1 = gtk_hbox_new (FALSE, 8);
1130 gtk_widget_show (hbox1);
1131 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1133 label_sigsep = gtk_label_new (_("Signature separator"));
1134 gtk_widget_show (label_sigsep);
1135 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1137 entry_sigsep = gtk_entry_new ();
1138 gtk_widget_show (entry_sigsep);
1139 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1140 gtk_widget_set_usize (entry_sigsep, 64, -1);
1143 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1144 gtk_widget_show (vbox_linewrap);
1145 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1147 hbox3 = gtk_hbox_new (FALSE, 8);
1148 gtk_widget_show (hbox3);
1149 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1151 label_linewrap = gtk_label_new (_("Wrap messages at"));
1152 gtk_widget_show (label_linewrap);
1153 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1155 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1156 spinbtn_linewrap = gtk_spin_button_new
1157 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1158 gtk_widget_show (spinbtn_linewrap);
1159 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1160 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1161 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1163 label_linewrap = gtk_label_new (_("characters"));
1164 gtk_widget_show (label_linewrap);
1165 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1167 hbox4 = gtk_hbox_new (FALSE, 32);
1168 gtk_widget_show (hbox4);
1169 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1171 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1173 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1175 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1176 _("Forward as attachment"));
1180 compose.checkbtn_quote = checkbtn_quote;
1181 compose.entry_quotemark = entry_quotemark;
1182 compose.text_quotefmt = text_quotefmt;
1184 compose.checkbtn_autosig = checkbtn_autosig;
1185 compose.entry_sigsep = entry_sigsep;
1187 compose.spinbtn_linewrap = spinbtn_linewrap;
1188 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1189 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1190 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1192 compose.checkbtn_forward_as_attachment =
1193 checkbtn_forward_as_attachment;
1196 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1199 GtkWidget *datefmt_sample = NULL;
1201 g_return_if_fail(widget != NULL);
1202 g_return_if_fail(*widget != NULL);
1203 g_return_if_fail(display.entry_datefmt != NULL);
1205 datefmt_sample = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(*widget), "datefmt_sample");
1206 g_return_if_fail(datefmt_sample != NULL);
1208 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1209 g_free(prefs_common.date_format);
1210 prefs_common.date_format = text;
1211 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
1213 gtk_widget_destroy(*widget);
1217 static void date_format_cancel_btn_clicked(GtkButton *button,
1220 g_return_if_fail(widget != NULL);
1221 g_return_if_fail(*widget != NULL);
1223 gtk_widget_destroy(*widget);
1227 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1229 g_return_val_if_fail(widget != NULL, FALSE);
1230 g_return_val_if_fail(*widget != NULL, FALSE);
1235 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1238 struct tm *cal_time;
1241 cur_time = time(NULL);
1242 cal_time = localtime(&cur_time);
1244 text = gtk_editable_get_chars(editable, 0, -1);
1246 strftime(buffer, sizeof buffer, text, cal_time);
1248 gtk_label_set_text(example, buffer);
1251 static void date_format_select_row(GtkWidget *date_format_list, gint row,
1252 gint column, GdkEventButton *event,
1253 GtkWidget *date_format)
1259 GtkWidget *datefmt_sample = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(date_format), "datefmt_sample");
1261 g_return_if_fail(date_format_list != NULL);
1262 g_return_if_fail(date_format != NULL);
1263 g_return_if_fail(datefmt_sample != NULL);
1265 /* only on double click */
1266 if (event->type != GDK_2BUTTON_PRESS)
1269 /* get format from clist */
1270 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
1272 curs_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1273 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1275 /* insert the format into the text entry */
1276 new_format = g_malloc(strlen(old_format) + 3);
1278 strncpy(new_format, old_format, curs_pos);
1279 new_format[curs_pos] = '\0';
1280 strcat(new_format, format);
1281 strcat(new_format, &old_format[curs_pos]);
1283 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1284 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), curs_pos + 2);
1289 static GtkWidget *create_date_format(GtkButton *button, void *data)
1291 static GtkWidget *date_format = NULL;
1293 GtkWidget *scrolledwindow1;
1294 GtkWidget *date_format_list;
1305 GtkWidget *confirm_area;
1307 GtkWidget *cancel_btn;
1308 GtkWidget *datefmt_sample = NULL;
1314 { "%a", _("the full abbreviated weekday name") },
1315 { "%A", _("the full weekday name") },
1316 { "%b", _("the abbreviated month name") },
1317 { "%B", _("the full month name") },
1318 { "%c", _("the preferred date and time for the current locale") },
1319 { "%C", _("the century number (year/100)") },
1320 { "%d", _("the day of the month as a decimal number") },
1321 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1322 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1323 { "%j", _("the day of the year as a decimal number") },
1324 { "%m", _("the month as a decimal number") },
1325 { "%M", _("the minute as a decimal number") },
1326 { "%p", _("either AM or PM") },
1327 { "%S", _("the second as a decimal number") },
1328 { "%w", _("the day of the week as a decimal number") },
1329 { "%x", _("the preferred date for the current locale") },
1330 { "%y", _("the last two digits of a year") },
1331 { "%Y", _("the year as a decimal number") },
1332 { "%Z", _("the time zone or name or abbreviation") }
1335 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1337 if (date_format) return date_format;
1339 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1340 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1341 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1342 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 280);
1344 vbox1 = gtk_vbox_new(FALSE, 10);
1345 gtk_widget_show(vbox1);
1346 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1348 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1349 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1),
1350 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1351 gtk_widget_show(scrolledwindow1);
1352 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1354 date_format_list = gtk_clist_new(2);
1355 gtk_widget_show(date_format_list);
1356 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1357 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1358 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1359 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1361 label3 = gtk_label_new(_("Date Format"));
1362 gtk_widget_show(label3);
1363 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1365 label4 = gtk_label_new(_("Date Format Description"));
1366 gtk_widget_show(label4);
1367 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1369 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1371 /* phoney casting necessary because of gtk... */
1372 text[0] = (gchar *) time_format[tmp].fmt;
1373 text[1] = (gchar *) time_format[tmp].txt;
1375 gtk_clist_append(GTK_CLIST(date_format_list), text);
1378 table2 = gtk_table_new(1, 1, TRUE);
1379 gtk_widget_show(table2);
1380 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1382 vbox2 = gtk_vbox_new(FALSE, 0);
1383 gtk_widget_show(vbox2);
1384 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1385 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1386 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1388 vbox3 = gtk_vbox_new(TRUE, 4);
1389 gtk_widget_show(vbox3);
1390 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1392 hbox2 = gtk_hbox_new(FALSE, 0);
1393 gtk_widget_show(hbox2);
1394 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1396 label5 = gtk_label_new(_("Date format"));
1397 gtk_widget_show(label5);
1398 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1399 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1401 datefmt_sample = gtk_entry_new_with_max_length(300);
1402 gtk_widget_show(datefmt_sample);
1403 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1405 /* we need the "sample" entry box; add it as data so callbacks can
1406 * get the entry box */
1407 gtk_object_set_data(GTK_OBJECT(date_format), "datefmt_sample", datefmt_sample);
1409 hbox1 = gtk_hbox_new(FALSE, 0);
1410 gtk_widget_show(hbox1);
1411 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1413 label6 = gtk_label_new(_("Example"));
1414 gtk_widget_show(label6);
1415 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1416 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1418 label7 = gtk_label_new("");
1419 gtk_widget_show(label7);
1420 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1421 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1423 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
1424 &cancel_btn, _("Cancel"), NULL, NULL);
1425 gtk_widget_grab_default(ok_btn);
1427 gtk_widget_show(confirm_area);
1429 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
1431 /* set the current format */
1432 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1433 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1436 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1437 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
1440 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
1441 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
1444 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1445 GTK_SIGNAL_FUNC(date_format_on_delete),
1448 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1449 GTK_SIGNAL_FUNC(date_format_entry_on_change),
1452 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1453 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1455 gtk_widget_show(date_format);
1457 gtk_signal_connect(GTK_OBJECT(date_format_list), "select_row",
1458 GTK_SIGNAL_FUNC(date_format_select_row),
1464 static void prefs_display_create(void)
1467 GtkWidget *frame_font;
1469 GtkWidget *label_textfont;
1470 GtkWidget *entry_textfont;
1471 GtkWidget *button_textfont;
1472 GtkWidget *chkbtn_folder_unread;
1473 GtkWidget *chkbtn_transhdr;
1474 GtkWidget *frame_summary;
1476 GtkWidget *chkbtn_swapfrom;
1477 GtkWidget *chkbtn_hscrollbar;
1478 GtkWidget *chkbtn_useaddrbook;
1480 GtkWidget *label_datefmt;
1481 GtkWidget *label_datefmt_btn;
1482 GtkWidget *tmplabel, *tmpentry, *tmpbutton;
1483 GtkWidget *entry_datefmt;
1484 GtkTooltips *tooltips_datefmt;
1485 GtkWidget *button_dispitem;
1487 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1488 gtk_widget_show (vbox1);
1489 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1490 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1492 PACK_FRAME(vbox1, frame_font, _("Font"));
1494 table1 = gtk_table_new (1, 3, FALSE);
1495 gtk_widget_show (table1);
1496 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1497 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1498 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1499 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1501 label_textfont = gtk_label_new (_("Text"));
1502 gtk_widget_show (label_textfont);
1503 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1504 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1506 entry_textfont = gtk_entry_new ();
1507 gtk_widget_show (entry_textfont);
1508 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1509 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1511 button_textfont = gtk_button_new_with_label ("... ");
1512 gtk_widget_show (button_textfont);
1513 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1515 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1516 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1518 tmplabel = gtk_label_new (_("Small"));
1519 gtk_widget_show (tmplabel);
1520 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1521 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1523 tmpentry = gtk_entry_new ();
1524 gtk_widget_show (tmpentry);
1525 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1526 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1528 tmpbutton = gtk_button_new_with_label ("... ");
1529 gtk_widget_show (tmpbutton);
1530 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1532 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1533 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1534 display.entry_smallfont = tmpentry;
1536 tmplabel = gtk_label_new (_("Normal"));
1537 gtk_widget_show (tmplabel);
1538 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1539 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1541 tmpentry = gtk_entry_new ();
1542 gtk_widget_show (tmpentry);
1543 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1544 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1546 tmpbutton = gtk_button_new_with_label ("... ");
1547 gtk_widget_show (tmpbutton);
1548 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1550 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1551 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1552 display.entry_normalfont = tmpentry;
1554 tmplabel = gtk_label_new (_("Bold"));
1555 gtk_widget_show (tmplabel);
1556 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1557 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1559 tmpentry = gtk_entry_new ();
1560 gtk_widget_show (tmpentry);
1561 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1562 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1564 tmpbutton = gtk_button_new_with_label ("... ");
1565 gtk_widget_show (tmpbutton);
1566 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1568 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1569 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1570 display.entry_boldfont = tmpentry;
1572 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1573 gtk_widget_show (vbox2);
1574 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1577 (vbox2, chkbtn_transhdr,
1578 _("Translate header name (such as `From:', `Subject:')"));
1580 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1581 _("Display unread number next to folder name"));
1583 /* ---- Summary ---- */
1585 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1587 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1588 gtk_widget_show (vbox2);
1589 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1590 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1593 (vbox2, chkbtn_swapfrom,
1594 _("Display recipient on `From' column if sender is yourself"));
1596 (vbox2, chkbtn_useaddrbook,
1597 _("Display sender using address book"));
1599 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1601 hbox1 = gtk_hbox_new (FALSE, 8);
1602 gtk_widget_show (hbox1);
1603 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1605 label_datefmt = gtk_label_new (_("Date format"));
1606 gtk_widget_show (label_datefmt);
1607 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1609 entry_datefmt = gtk_entry_new ();
1610 gtk_widget_show (entry_datefmt);
1611 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1613 label_datefmt_btn = gtk_button_new_with_label(_("Customize"));
1614 gtk_widget_show(label_datefmt_btn);
1615 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt_btn, FALSE, FALSE, 0);
1616 gtk_signal_connect(GTK_OBJECT(label_datefmt_btn), "clicked",
1617 GTK_SIGNAL_FUNC(create_date_format), NULL);
1619 hbox1 = gtk_hbox_new (FALSE, 8);
1620 gtk_widget_show (hbox1);
1621 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1623 button_dispitem = gtk_button_new_with_label
1624 (_(" Set display item of summary... "));
1625 gtk_widget_show (button_dispitem);
1626 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1627 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1628 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1631 display.entry_textfont = entry_textfont;
1632 display.button_textfont = button_textfont;
1634 display.chkbtn_folder_unread = chkbtn_folder_unread;
1635 display.chkbtn_transhdr = chkbtn_transhdr;
1637 display.chkbtn_swapfrom = chkbtn_swapfrom;
1638 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1639 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1640 display.entry_datefmt = entry_datefmt;
1643 static void prefs_message_create(void)
1648 GtkWidget *chkbtn_enablecol;
1649 GtkWidget *button_edit_col;
1650 GtkWidget *chkbtn_mbalnum;
1651 GtkWidget *chkbtn_disphdrpane;
1652 GtkWidget *chkbtn_disphdr;
1653 GtkWidget *button_edit_disphdr;
1654 GtkWidget *hbox_linespc;
1655 GtkWidget *label_linespc;
1656 GtkObject *spinbtn_linespc_adj;
1657 GtkWidget *spinbtn_linespc;
1658 GtkWidget *chkbtn_headspc;
1660 GtkWidget *frame_scr;
1661 GtkWidget *vbox_scr;
1662 GtkWidget *chkbtn_smoothscroll;
1663 GtkWidget *hbox_scr;
1664 GtkWidget *label_scr;
1665 GtkObject *spinbtn_scrollstep_adj;
1666 GtkWidget *spinbtn_scrollstep;
1667 GtkWidget *chkbtn_halfpage;
1669 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1670 gtk_widget_show (vbox1);
1671 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1672 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1674 hbox1 = gtk_hbox_new (FALSE, 8);
1675 gtk_widget_show (hbox1);
1676 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1678 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1679 _("Enable coloration of message"));
1680 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1681 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1684 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1685 gtk_widget_show (button_edit_col);
1686 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1687 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1688 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1690 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1692 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1693 gtk_widget_show (vbox2);
1694 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1697 (vbox2, chkbtn_mbalnum,
1698 _("Display 2-byte alphabet and numeric with 1-byte character"));
1699 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1700 _("Display header pane above message view"));
1702 hbox1 = gtk_hbox_new (FALSE, 8);
1703 gtk_widget_show (hbox1);
1704 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1706 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1707 _("Display short headers on message view"));
1709 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1710 gtk_widget_show (button_edit_disphdr);
1711 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1713 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1714 GTK_SIGNAL_FUNC (prefs_display_header_open),
1717 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1719 hbox1 = gtk_hbox_new (FALSE, 32);
1720 gtk_widget_show (hbox1);
1721 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1723 hbox_linespc = gtk_hbox_new (FALSE, 8);
1724 gtk_widget_show (hbox1);
1725 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1727 label_linespc = gtk_label_new (_("Line space"));
1728 gtk_widget_show (label_linespc);
1729 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1732 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1733 spinbtn_linespc = gtk_spin_button_new
1734 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1735 gtk_widget_show (spinbtn_linespc);
1736 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1738 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1739 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1741 label_linespc = gtk_label_new (_("pixel(s)"));
1742 gtk_widget_show (label_linespc);
1743 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1746 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1748 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1750 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1751 gtk_widget_show (vbox_scr);
1752 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1753 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1755 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1757 hbox1 = gtk_hbox_new (FALSE, 32);
1758 gtk_widget_show (hbox1);
1759 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1761 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1763 hbox_scr = gtk_hbox_new (FALSE, 8);
1764 gtk_widget_show (hbox_scr);
1765 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1767 label_scr = gtk_label_new (_("Step"));
1768 gtk_widget_show (label_scr);
1769 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1771 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1772 spinbtn_scrollstep = gtk_spin_button_new
1773 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1774 gtk_widget_show (spinbtn_scrollstep);
1775 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1777 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1778 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1781 label_scr = gtk_label_new (_("pixel(s)"));
1782 gtk_widget_show (label_scr);
1783 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1785 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1787 message.chkbtn_enablecol = chkbtn_enablecol;
1788 message.button_edit_col = button_edit_col;
1789 message.chkbtn_mbalnum = chkbtn_mbalnum;
1790 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1791 message.chkbtn_disphdr = chkbtn_disphdr;
1792 message.spinbtn_linespc = spinbtn_linespc;
1793 message.chkbtn_headspc = chkbtn_headspc;
1795 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1796 message.spinbtn_scrollstep = spinbtn_scrollstep;
1797 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1798 message.chkbtn_halfpage = chkbtn_halfpage;
1802 static void prefs_privacy_create(void)
1807 GtkWidget *checkbtn_default_encrypt;
1808 GtkWidget *checkbtn_default_sign;
1809 GtkWidget *checkbtn_auto_check_signatures;
1810 GtkWidget *checkbtn_gpg_signature_popup;
1811 GtkWidget *checkbtn_passphrase_grab;
1812 GtkWidget *checkbtn_gpg_warning;
1814 GtkWidget *menuitem;
1816 GtkWidget *optmenu_menu;
1818 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1819 gtk_widget_show (vbox1);
1820 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1821 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1823 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1824 gtk_widget_show (vbox2);
1825 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1827 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1828 _("Encrypt message by default"));
1830 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1831 _("Sign message by default"));
1833 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1834 _("Automatically check signatures"));
1836 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1837 _("Show signature check result in a popup window"));
1840 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1841 _("Grab input while entering a passphrase"));
1845 (vbox2, checkbtn_gpg_warning,
1846 _("Display warning on startup if GnuPG doesn't work"));
1848 hbox1 = gtk_hbox_new (FALSE, 8);
1849 gtk_widget_show (hbox1);
1850 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1852 /* create default signkey box */
1853 label = gtk_label_new (_("Default Sign Key"));
1854 gtk_widget_show (label);
1855 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1856 optmenu = gtk_option_menu_new ();
1857 gtk_widget_show (optmenu);
1858 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1859 optmenu_menu = gtk_menu_new ();
1861 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1862 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1863 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1864 /* FIXME: disabled because not implemented */
1865 gtk_widget_set_sensitive(optmenu, FALSE);
1867 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1868 privacy.checkbtn_default_sign = checkbtn_default_sign;
1869 privacy.checkbtn_auto_check_signatures
1870 = checkbtn_auto_check_signatures;
1871 privacy.checkbtn_gpg_signature_popup
1872 = checkbtn_gpg_signature_popup;
1873 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1874 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1875 privacy.optmenu_default_signkey = optmenu;
1879 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1883 GtkWidget *menuitem;
1886 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1887 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1888 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1889 g_free(*((gchar **)pparam->data));
1890 *((gchar **)pparam->data) = g_strdup(charset);
1894 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1898 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1900 GtkWidget *menuitem;
1904 g_return_if_fail(optmenu != NULL);
1905 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1907 menu = gtk_option_menu_get_menu(optmenu);
1908 for (cur = GTK_MENU_SHELL(menu)->children;
1909 cur != NULL; cur = cur->next) {
1910 menuitem = GTK_WIDGET(cur->data);
1911 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1912 if (!strcmp(charset, *((gchar **)pparam->data))) {
1913 gtk_option_menu_set_history(optmenu, n);
1919 gtk_option_menu_set_history(optmenu, 0);
1920 prefs_common_charset_set_data_from_optmenu(pparam);
1923 #endif /* USE_GPGME */
1925 static void prefs_interface_create(void)
1930 GtkWidget *checkbtn_emacs;
1931 GtkWidget *checkbtn_openunread;
1932 GtkWidget *checkbtn_openinbox;
1933 GtkWidget *checkbtn_immedexec;
1934 GtkWidget *checkbtn_addaddrbyclick;
1937 GtkWidget *frame_exit;
1938 GtkWidget *vbox_exit;
1940 GtkWidget *checkbtn_confonexit;
1941 GtkWidget *checkbtn_cleanonexit;
1942 GtkWidget *checkbtn_askonclean;
1943 GtkWidget *checkbtn_warnqueued;
1945 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1946 gtk_widget_show (vbox1);
1947 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1948 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1950 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1951 gtk_widget_show (vbox2);
1952 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1954 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1955 _("Emulate the behavior of mouse operation of\n"
1956 "Emacs-based mailer"));
1957 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1961 (vbox2, checkbtn_openunread,
1962 _("Open first unread message when entering a folder"));
1965 (vbox2, checkbtn_openinbox,
1966 _("Go to inbox after receiving new mail"));
1968 vbox3 = gtk_vbox_new (FALSE, 0);
1969 gtk_widget_show (vbox3);
1970 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1973 (vbox3, checkbtn_immedexec,
1974 _("Execute immediately when moving or deleting messages"));
1976 hbox1 = gtk_hbox_new (FALSE, 0);
1977 gtk_widget_show (hbox1);
1978 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1980 label = gtk_label_new
1981 (_("(Messages will be just marked till execution\n"
1982 " if this is turned off)"));
1983 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1984 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1987 (vbox2, checkbtn_addaddrbyclick,
1988 _("Add address to destination when double-clicked"));
1990 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1992 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1993 gtk_widget_show (vbox_exit);
1994 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1995 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1997 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1998 _("Confirm on exit"));
2000 hbox1 = gtk_hbox_new (FALSE, 32);
2001 gtk_widget_show (hbox1);
2002 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2004 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2005 _("Empty trash on exit"));
2006 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2007 _("Ask before emptying"));
2008 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2010 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2011 _("Warn if there are queued messages"));
2013 interface.checkbtn_emacs = checkbtn_emacs;
2014 interface.checkbtn_openunread = checkbtn_openunread;
2015 interface.checkbtn_openinbox = checkbtn_openinbox;
2016 interface.checkbtn_immedexec = checkbtn_immedexec;
2017 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2018 interface.checkbtn_confonexit = checkbtn_confonexit;
2019 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2020 interface.checkbtn_askonclean = checkbtn_askonclean;
2021 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2024 static void prefs_other_create(void)
2029 GtkWidget *uri_frame;
2030 GtkWidget *uri_label;
2031 GtkWidget *uri_combo;
2032 GtkWidget *uri_entry;
2034 GtkWidget *print_frame;
2035 GtkWidget *printcmd_label;
2036 GtkWidget *printcmd_entry;
2038 GtkWidget *exteditor_frame;
2039 GtkWidget *exteditor_label;
2040 GtkWidget *exteditor_combo;
2041 GtkWidget *exteditor_entry;
2043 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2044 gtk_widget_show (vbox1);
2045 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2046 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2048 PACK_FRAME(vbox1, uri_frame,
2049 _("External Web browser (%s will be replaced with URI)"));
2051 hbox1 = gtk_hbox_new (FALSE, 8);
2052 gtk_widget_show (hbox1);
2053 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2054 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2056 uri_label = gtk_label_new (_("Command"));
2057 gtk_widget_show(uri_label);
2058 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2060 uri_combo = gtk_combo_new ();
2061 gtk_widget_show (uri_combo);
2062 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2063 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2064 "netscape -remote 'openURL(%s,raise)'",
2066 "gnome-moz-remote --raise --newwin '%s'",
2067 "kterm -e w3m '%s'",
2068 "kterm -e lynx '%s'",
2071 uri_entry = GTK_COMBO (uri_combo)->entry;
2073 PACK_FRAME(vbox1, print_frame,
2074 _("Printing (%s will be replaced with file name)"));
2076 hbox1 = gtk_hbox_new (FALSE, 8);
2077 gtk_widget_show (hbox1);
2078 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2079 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2081 printcmd_label = gtk_label_new (_("Command"));
2082 gtk_widget_show (printcmd_label);
2083 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2085 printcmd_entry = gtk_entry_new ();
2086 gtk_widget_show (printcmd_entry);
2087 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2089 PACK_FRAME(vbox1, exteditor_frame,
2090 _("External editor (%s will be replaced with file name)"));
2092 hbox1 = gtk_hbox_new (FALSE, 8);
2093 gtk_widget_show (hbox1);
2094 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2095 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2097 exteditor_label = gtk_label_new (_("Command"));
2098 gtk_widget_show (exteditor_label);
2099 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2101 exteditor_combo = gtk_combo_new ();
2102 gtk_widget_show (exteditor_combo);
2103 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2104 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2106 "mgedit --no-fork %s",
2112 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2114 other.uri_combo = uri_combo;
2115 other.uri_entry = uri_entry;
2116 other.printcmd_entry = printcmd_entry;
2118 other.exteditor_combo = exteditor_combo;
2119 other.exteditor_entry = exteditor_entry;
2122 void prefs_quote_colors_dialog(void)
2124 if (!quote_color_win)
2125 prefs_quote_colors_dialog_create();
2126 gtk_widget_show(quote_color_win);
2127 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2130 gtk_widget_hide(quote_color_win);
2132 textview_update_message_colors();
2133 main_window_reflect_prefs_all();
2136 static void prefs_quote_colors_dialog_create(void)
2141 GtkWidget *quotelevel1_label;
2142 GtkWidget *quotelevel2_label;
2143 GtkWidget *quotelevel3_label;
2144 GtkWidget *uri_label;
2147 //GtkWidget *cancel_btn;
2148 GtkWidget *recycle_colors_btn;
2149 GtkWidget *frame_colors;
2151 window = gtk_window_new(GTK_WINDOW_DIALOG);
2152 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2153 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2154 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2155 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2156 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2158 vbox = gtk_vbox_new (FALSE, VSPACING);
2159 gtk_container_add (GTK_CONTAINER (window), vbox);
2160 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2161 PACK_FRAME(vbox, frame_colors, _("Colors"));
2163 table = gtk_table_new (4, 2, FALSE);
2164 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2165 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2166 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2167 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
2169 color_buttons.quote_level1_btn = gtk_button_new();
2170 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2171 0, 1, 0, 1, 0, 0, 0, 0);
2172 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2173 gtk_container_set_border_width
2174 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2176 color_buttons.quote_level2_btn = gtk_button_new();
2177 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2178 0, 1, 1, 2, 0, 0, 0, 0);
2179 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2180 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2182 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2183 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2184 0, 1, 2, 3, 0, 0, 0, 0);
2185 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2186 gtk_container_set_border_width
2187 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2189 color_buttons.uri_btn = gtk_button_new_with_label ("");
2190 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2191 0, 1, 3, 4, 0, 0, 0, 0);
2192 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2193 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2195 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2196 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2197 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2198 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2199 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2201 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2202 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2203 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2204 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2205 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2207 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2208 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2209 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2210 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2211 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2213 uri_label = gtk_label_new (_("URI link"));
2214 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2215 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2216 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2217 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2219 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2220 _("Recycle quote colors"));
2222 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2223 NULL, NULL, NULL, NULL);
2224 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2226 gtk_widget_grab_default(ok_btn);
2227 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2228 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2229 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2230 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2231 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2232 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2233 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2234 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2237 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2238 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2239 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2240 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2241 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2242 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2243 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2244 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2245 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2246 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2247 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2248 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2250 /* show message button colors and recycle options */
2251 set_button_bg_color(color_buttons.quote_level1_btn,
2252 prefs_common.quote_level1_col);
2253 set_button_bg_color(color_buttons.quote_level2_btn,
2254 prefs_common.quote_level2_col);
2255 set_button_bg_color(color_buttons.quote_level3_btn,
2256 prefs_common.quote_level3_col);
2257 set_button_bg_color(color_buttons.uri_btn,
2258 prefs_common.uri_col);
2259 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2260 prefs_common.recycle_quote_colors);
2262 gtk_widget_show_all(vbox);
2263 quote_color_win = window;
2266 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2267 GdkEventKey *event, gpointer data)
2269 if (event && event->keyval == GDK_Escape)
2273 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2275 gchar *type = (gchar *)data;
2276 gchar *title = NULL;
2277 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2279 GtkColorSelectionDialog *dialog;
2281 if(g_strcasecmp(type, "LEVEL1") == 0) {
2282 title = _("Pick color for quotation level 1");
2283 rgbvalue = prefs_common.quote_level1_col;
2284 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2285 title = _("Pick color for quotation level 2");
2286 rgbvalue = prefs_common.quote_level2_col;
2287 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2288 title = _("Pick color for quotation level 3");
2289 rgbvalue = prefs_common.quote_level3_col;
2290 } else if(g_strcasecmp(type, "URI") == 0) {
2291 title = _("Pick color for URI");
2292 rgbvalue = prefs_common.uri_col;
2293 } else { /* Should never be called */
2294 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2298 color_dialog = gtk_color_selection_dialog_new(title);
2299 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2300 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2301 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2302 manage_window_set_transient(GTK_WINDOW(color_dialog));
2304 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2305 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2306 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2307 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2308 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2309 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2312 /* preselect the previous color in the color selection dialog */
2313 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2314 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2315 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2316 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2317 gtk_color_selection_set_color
2318 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2320 gtk_widget_show(color_dialog);
2323 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2325 GtkColorSelection *colorsel = (GtkColorSelection *)
2326 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2328 gint red, green, blue, rgbvalue;
2329 gchar *type = (gchar *)data;
2331 gtk_color_selection_get_color(colorsel, color);
2333 red = (gint) (color[0] * 255.0);
2334 green = (gint) (color[1] * 255.0);
2335 blue = (gint) (color[2] * 255.0);
2336 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2339 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2340 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2341 fprintf(stderr, "Color is %x\n", rgbvalue);
2344 if (g_strcasecmp(type, "LEVEL1") == 0) {
2345 prefs_common.quote_level1_col = rgbvalue;
2346 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2347 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2348 prefs_common.quote_level2_col = rgbvalue;
2349 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2350 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2351 prefs_common.quote_level3_col = rgbvalue;
2352 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2353 } else if (g_strcasecmp(type, "URI") == 0) {
2354 prefs_common.uri_col = rgbvalue;
2355 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2357 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2359 gtk_widget_destroy(color_dialog);
2362 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2364 gtk_widget_destroy(color_dialog);
2367 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2371 gtk_widget_destroy(color_dialog);
2374 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2379 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2380 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2381 newstyle->bg[GTK_STATE_NORMAL] = color;
2382 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2383 newstyle->bg[GTK_STATE_ACTIVE] = color;
2385 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2388 static void prefs_enable_message_color_toggled(void)
2392 is_active = gtk_toggle_button_get_active
2393 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2394 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2395 prefs_common.enable_color = is_active;
2398 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2402 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2403 prefs_common.recycle_quote_colors = is_active;
2406 static void prefs_quote_description(void)
2408 if (!quote_desc_win)
2409 prefs_quote_description_create();
2411 gtk_widget_show(quote_desc_win);
2413 gtk_widget_hide(quote_desc_win);
2416 static void prefs_quote_description_create(void)
2424 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2425 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2426 _("Description of symbols"));
2427 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2428 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2429 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2430 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2432 vbox = gtk_vbox_new(FALSE, 8);
2433 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2435 hbox = gtk_hbox_new(FALSE, 4);
2436 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2438 label = gtk_label_new
2442 "%N\n" /* full name */
2443 "%F\n" /* first name */
2444 "%I\n" /* sender's initial */
2445 "%s\n" /* subject line */
2448 "%n\n" /* newsgroups */
2449 "%i\n" /* message id */
2450 "%r\n" /* references */
2461 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2462 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2464 label = gtk_label_new
2465 (_("DESCRIPTION\n\n"
2468 "Full Name of Sender\n"
2469 "First Name of Sender\n"
2470 "Initial of Sender\n"
2478 "Display the information\n"
2479 "If the information x is set, displays expr\n"
2482 "Quoted message body\n"
2483 "Message body without signature\n"
2484 "Quoted message body without signature\n"
2487 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2488 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2490 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2491 NULL, NULL, NULL, NULL);
2492 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2494 gtk_widget_grab_default(ok_btn);
2495 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2496 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2498 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2499 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2501 gtk_widget_show_all(vbox);
2504 /* functions for setting items of SummaryView */
2506 static struct _SummaryDisplayItem
2510 GtkWidget *chkbtn[N_SUMMARY_COLS];
2513 GtkWidget *cancel_btn;
2516 #define SET_ACTIVE(column, var) \
2517 gtk_toggle_button_set_active \
2518 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2520 #define GET_ACTIVE(column, var) \
2521 prefs_common.var = gtk_toggle_button_get_active \
2522 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2524 void prefs_summary_display_item_set(void)
2526 static gboolean cancelled;
2528 if (!summarydispitem.window)
2529 prefs_summary_display_item_dialog_create(&cancelled);
2530 gtk_widget_grab_focus(summarydispitem.ok_btn);
2531 gtk_widget_show(summarydispitem.window);
2532 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2534 SET_ACTIVE(S_COL_MARK, show_mark);
2535 SET_ACTIVE(S_COL_UNREAD, show_unread);
2536 SET_ACTIVE(S_COL_MIME, show_mime);
2537 SET_ACTIVE(S_COL_NUMBER, show_number);
2538 SET_ACTIVE(S_COL_SCORE, show_score);
2539 SET_ACTIVE(S_COL_SIZE, show_size);
2540 SET_ACTIVE(S_COL_DATE, show_date);
2541 SET_ACTIVE(S_COL_FROM, show_from);
2542 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2545 gtk_widget_hide(summarydispitem.window);
2547 if (cancelled != TRUE) {
2548 GET_ACTIVE(S_COL_MARK, show_mark);
2549 GET_ACTIVE(S_COL_UNREAD, show_unread);
2550 GET_ACTIVE(S_COL_MIME, show_mime);
2551 GET_ACTIVE(S_COL_NUMBER, show_number);
2552 GET_ACTIVE(S_COL_SCORE, show_score);
2553 GET_ACTIVE(S_COL_SIZE, show_size);
2554 GET_ACTIVE(S_COL_DATE, show_date);
2555 GET_ACTIVE(S_COL_FROM, show_from);
2556 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2558 main_window_reflect_prefs_all();
2562 #define SET_CHECK_BUTTON(column, label) \
2564 summarydispitem.chkbtn[column] = \
2565 gtk_check_button_new_with_label(label); \
2566 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2567 summarydispitem.chkbtn[column], \
2571 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2575 GtkWidget *chkbtn_vbox;
2578 GtkWidget *cancel_btn;
2580 window = gtk_window_new(GTK_WINDOW_DIALOG);
2581 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2582 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2583 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2584 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2585 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2586 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2587 GTK_SIGNAL_FUNC(display_item_delete_event),
2589 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2590 GTK_SIGNAL_FUNC(display_item_key_pressed),
2593 vbox = gtk_vbox_new(FALSE, 8);
2594 gtk_container_add(GTK_CONTAINER(window), vbox);
2596 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2597 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2599 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2600 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2601 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2602 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2603 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2604 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2605 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2606 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2607 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2609 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2610 &cancel_btn, _("Cancel"), NULL, NULL);
2611 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2612 gtk_widget_grab_default(ok_btn);
2614 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2615 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2616 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2617 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2619 gtk_widget_show_all(vbox);
2621 summarydispitem.window = window;
2622 summarydispitem.ok_btn = ok_btn;
2623 summarydispitem.cancel_btn = cancel_btn;
2626 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2632 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2638 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2639 gboolean *cancelled)
2647 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2648 gboolean *cancelled)
2650 if (event && event->keyval == GDK_Escape) {
2656 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
2660 g_return_if_fail(entry != NULL);
2662 if (!font_sel_win) {
2663 font_sel_win = gtk_font_selection_dialog_new
2664 (_("Font selection"));
2665 gtk_window_position(GTK_WINDOW(font_sel_win),
2666 GTK_WIN_POS_CENTER);
2667 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2668 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2671 (GTK_OBJECT(font_sel_win), "key_press_event",
2672 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2675 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2677 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2679 gtk_signal_connect_object
2680 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2682 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2683 GTK_OBJECT(font_sel_win));
2686 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
2687 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
2689 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2690 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2691 gtk_widget_grab_focus
2692 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2693 gtk_widget_show(font_sel_win);
2696 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2700 if (event && event->keyval == GDK_Escape)
2701 gtk_widget_hide(font_sel_win);
2704 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
2708 fontname = gtk_font_selection_dialog_get_font_name
2709 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2712 gtk_entry_set_text(entry, fontname);
2716 gtk_widget_hide(font_sel_win);
2719 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2722 GtkWidget *menuitem;
2725 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2726 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2727 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2728 g_free(*((gchar **)pparam->data));
2729 *((gchar **)pparam->data) = g_strdup(charset);
2732 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2735 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2737 GtkWidget *menuitem;
2741 g_return_if_fail(optmenu != NULL);
2742 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2744 menu = gtk_option_menu_get_menu(optmenu);
2745 for (cur = GTK_MENU_SHELL(menu)->children;
2746 cur != NULL; cur = cur->next) {
2747 menuitem = GTK_WIDGET(cur->data);
2748 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2749 if (!strcmp(charset, *((gchar **)pparam->data))) {
2750 gtk_option_menu_set_history(optmenu, n);
2756 gtk_option_menu_set_history(optmenu, 0);
2757 prefs_common_charset_set_data_from_optmenu(pparam);
2760 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2763 prefs_common_cancel();
2767 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2770 if (event && event->keyval == GDK_Escape)
2771 prefs_common_cancel();
2774 static void prefs_common_ok(void)
2776 prefs_common_apply();
2777 gtk_widget_hide(dialog.window);
2778 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2779 gtk_widget_hide(quote_desc_win);
2781 inc_autocheck_timer_set();
2784 static void prefs_common_apply(void)
2786 prefs_set_data_from_dialog(param);
2787 main_window_reflect_prefs_all();
2788 prefs_common_save_config();
2791 static void prefs_common_cancel(void)
2793 gtk_widget_hide(dialog.window);
2794 inc_autocheck_timer_set();
2798 static struct _ComposePrefs
2802 GtkWidget *close_btn;
2805 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
2806 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
2807 static void compose_prefs_close(GtkWidget *widget);
2808 static void compose_prefs_fmt_create(void);
2810 static void compose_prefs_fmt_open(void)
2812 if (composeprefs.window == NULL)
2813 compose_prefs_fmt_create();
2814 gtk_widget_show(composeprefs.window);
2818 static void compose_prefs_fmt_create(void)
2821 GtkWidget *close_btn;
2823 GtkWidget *frame_quote;
2824 GtkWidget *vbox_quote;
2826 GtkWidget *checkbtn_quote;
2827 GtkWidget *label_quotemark;
2828 GtkWidget *entry_quotemark;
2829 GtkWidget *scrolledwin_quotefmt;
2830 GtkWidget *text_quotefmt;
2831 GtkWidget *label_quotefmt;
2832 GtkWidget *btn_quotedesc;
2834 GtkWidget *label_fw_quotemark;
2835 GtkWidget *entry_fw_quotemark;
2836 GtkWidget *label_fw_quotefmt;
2837 GtkWidget *text_fw_quotefmt;
2839 window = gtk_window_new(GTK_WINDOW_DIALOG);
2840 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2841 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
2842 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2843 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2844 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2845 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2846 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
2848 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2849 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
2852 vbox_quote = gtk_vbox_new(FALSE, 8);
2853 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
2855 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
2856 _("Quote message when replying"));
2858 hbox1 = gtk_hbox_new (FALSE, 8);
2859 gtk_widget_show (hbox1);
2860 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2862 label_quotemark = gtk_label_new (_("Quotation mark"));
2863 gtk_widget_show (label_quotemark);
2864 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
2866 entry_quotemark = gtk_entry_new ();
2867 gtk_widget_show (entry_quotemark);
2868 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
2869 gtk_widget_set_usize (entry_quotemark, 64, -1);
2871 hbox1 = gtk_hbox_new (FALSE, 0);
2872 gtk_widget_show (hbox1);
2873 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2875 label_quotefmt = gtk_label_new (_("Quotation format:"));
2876 gtk_widget_show (label_quotefmt);
2877 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
2879 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2880 gtk_widget_show (scrolledwin_quotefmt);
2881 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2882 gtk_scrolled_window_set_policy
2883 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2884 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2886 text_quotefmt = gtk_text_new (NULL, NULL);
2887 gtk_widget_show (text_quotefmt);
2888 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2889 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2890 gtk_widget_set_usize(text_quotefmt, 400, 60);
2892 hbox1 = gtk_hbox_new (FALSE, 8);
2893 gtk_widget_show (hbox1);
2894 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2896 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
2897 gtk_widget_show (label_fw_quotemark);
2898 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
2900 entry_fw_quotemark = gtk_entry_new ();
2901 gtk_widget_show (entry_fw_quotemark);
2902 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
2903 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2905 hbox1 = gtk_hbox_new (FALSE, 0);
2906 gtk_widget_show (hbox1);
2907 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2909 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
2910 gtk_widget_show (label_fw_quotefmt);
2911 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
2913 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2914 gtk_widget_show (scrolledwin_quotefmt);
2915 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2916 gtk_scrolled_window_set_policy
2917 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2918 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2920 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2921 gtk_widget_show (text_fw_quotefmt);
2922 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
2923 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2924 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
2926 hbox1 = gtk_hbox_new (FALSE, 0);
2927 gtk_widget_show (hbox1);
2928 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2931 gtk_button_new_with_label (_(" Description of symbols "));
2932 gtk_widget_show (btn_quotedesc);
2933 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
2936 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2937 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
2940 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
2941 NULL, NULL, NULL, NULL);
2942 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
2943 gtk_widget_grab_default(close_btn);
2945 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
2946 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
2948 gtk_widget_show_all(vbox_quote);
2950 composeprefs.window = window;
2951 composeprefs.close_btn = close_btn;
2953 compose.checkbtn_quote = checkbtn_quote;
2954 compose.entry_quotemark = entry_quotemark;
2955 compose.text_quotefmt = text_quotefmt;
2956 compose.entry_fw_quotemark = entry_fw_quotemark;
2957 compose.text_fw_quotefmt = text_fw_quotefmt;
2960 static void compose_prefs_close(GtkWidget *widget)
2962 gtk_widget_hide(composeprefs.window);
2965 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
2967 gtk_widget_hide(composeprefs.window);
2972 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
2974 if (event && event->keyval == GDK_Escape) {
2975 gtk_widget_hide(composeprefs.window);