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;
105 static struct Display {
106 GtkWidget *entry_textfont;
107 GtkWidget *button_textfont;
109 GtkWidget *entry_smallfont;
110 GtkWidget *entry_normalfont;
111 GtkWidget *entry_boldfont;
113 GtkWidget *chkbtn_folder_unread;
115 GtkWidget *chkbtn_transhdr;
117 GtkWidget *chkbtn_swapfrom;
118 GtkWidget *chkbtn_hscrollbar;
119 GtkWidget *chkbtn_useaddrbook;
121 GtkWidget *entry_datefmt;
124 static struct Message {
125 GtkWidget *chkbtn_enablecol;
126 GtkWidget *button_edit_col;
127 GtkWidget *chkbtn_mbalnum;
128 GtkWidget *chkbtn_disphdrpane;
129 GtkWidget *chkbtn_disphdr;
130 GtkWidget *spinbtn_linespc;
131 GtkObject *spinbtn_linespc_adj;
132 GtkWidget *chkbtn_headspc;
134 GtkWidget *chkbtn_smoothscroll;
135 GtkWidget *spinbtn_scrollstep;
136 GtkObject *spinbtn_scrollstep_adj;
137 GtkWidget *chkbtn_halfpage;
141 static struct Privacy {
142 GtkWidget *checkbtn_default_encrypt;
143 GtkWidget *checkbtn_default_sign;
144 GtkWidget *checkbtn_auto_check_signatures;
145 GtkWidget *checkbtn_gpg_signature_popup;
146 GtkWidget *checkbtn_passphrase_grab;
147 GtkWidget *checkbtn_gpg_warning;
148 GtkWidget *optmenu_default_signkey;
152 static struct Interface {
153 GtkWidget *checkbtn_emacs;
154 GtkWidget *checkbtn_openunread;
155 GtkWidget *checkbtn_openinbox;
156 GtkWidget *checkbtn_immedexec;
157 GtkWidget *checkbtn_confonexit;
158 GtkWidget *checkbtn_cleanonexit;
159 GtkWidget *checkbtn_askonclean;
160 GtkWidget *checkbtn_warnqueued;
161 GtkWidget *checkbtn_addaddrbyclick;
164 static struct Other {
165 GtkWidget *uri_combo;
166 GtkWidget *uri_entry;
167 GtkWidget *printcmd_entry;
168 GtkWidget *exteditor_combo;
169 GtkWidget *exteditor_entry;
172 static struct MessageColorButtons {
173 GtkWidget *quote_level1_btn;
174 GtkWidget *quote_level2_btn;
175 GtkWidget *quote_level3_btn;
179 static GtkWidget *quote_desc_win;
180 static GtkWidget *font_sel_win;
181 static GtkWidget *quote_color_win;
182 static GtkWidget *color_dialog;
184 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
185 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
187 static void prefs_common_default_signkey_set_data_from_optmenu
189 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
193 parameter name, default value, pointer to the prefs variable, data type,
194 pointer to the widget pointer,
195 pointer to the function for data setting,
196 pointer to the function for widget setting
199 static PrefParam param[] = {
201 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
202 &receive.checkbtn_incext,
203 prefs_set_data_from_toggle, prefs_set_toggle},
204 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING,
205 &receive.entry_incext,
206 prefs_set_data_from_entry, prefs_set_entry},
208 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
209 &receive.checkbtn_local,
210 prefs_set_data_from_toggle, prefs_set_toggle},
211 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
212 &receive.checkbtn_filter_on_inc,
213 prefs_set_data_from_toggle, prefs_set_toggle},
214 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
215 &receive.entry_spool,
216 prefs_set_data_from_entry, prefs_set_entry},
218 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
219 &receive.checkbtn_autochk,
220 prefs_set_data_from_toggle, prefs_set_toggle},
221 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
222 &receive.spinbtn_autochk,
223 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
224 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
225 &receive.checkbtn_chkonstartup,
226 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
229 &receive.spinbtn_maxarticle,
230 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
233 {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL,
234 &send.checkbtn_sendext,
235 prefs_set_data_from_toggle, prefs_set_toggle},
236 {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING,
237 &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry},
238 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
239 &send.checkbtn_savemsg,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
242 &send.checkbtn_queuemsg,
243 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
246 &send.optmenu_charset,
247 prefs_common_charset_set_data_from_optmenu,
248 prefs_common_charset_set_optmenu},
251 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
252 &compose.checkbtn_quote,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
255 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
256 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
257 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
258 prefs_set_data_from_text, prefs_set_text},
259 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
260 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
261 {"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",
262 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
263 prefs_set_data_from_text, prefs_set_text},
265 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
266 &compose.checkbtn_autosig,
267 prefs_set_data_from_toggle, prefs_set_toggle},
268 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
269 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
271 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
272 &compose.spinbtn_linewrap,
273 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
274 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
275 &compose.checkbtn_wrapquote,
276 prefs_set_data_from_toggle, prefs_set_toggle},
277 {"linewrap_before_sending", "FALSE",
278 &prefs_common.linewrap_at_send, P_BOOL,
279 &compose.checkbtn_wrapatsend,
280 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
286 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
288 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
289 &prefs_common.textfont, P_STRING,
290 &display.entry_textfont,
291 prefs_set_data_from_entry, prefs_set_entry},
292 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
293 &prefs_common.smallfont, P_STRING,
294 &display.entry_smallfont,
295 prefs_set_data_from_entry, prefs_set_entry},
296 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
297 &prefs_common.boldfont, P_STRING,
298 &display.entry_boldfont,
299 prefs_set_data_from_entry, prefs_set_entry},
300 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
301 &prefs_common.normalfont, P_STRING,
302 &display.entry_normalfont,
303 prefs_set_data_from_entry, prefs_set_entry},
305 {"display_folder_unread_num", "TRUE",
306 &prefs_common.display_folder_unread, P_BOOL,
307 &display.chkbtn_folder_unread,
308 prefs_set_data_from_toggle, prefs_set_toggle},
310 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
311 &display.chkbtn_transhdr,
312 prefs_set_data_from_toggle, prefs_set_toggle},
314 /* Display: Summary View */
315 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
316 &display.chkbtn_swapfrom,
317 prefs_set_data_from_toggle, prefs_set_toggle},
318 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
319 &display.chkbtn_hscrollbar,
320 prefs_set_data_from_toggle, prefs_set_toggle},
321 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
322 &display.chkbtn_useaddrbook,
323 prefs_set_data_from_toggle, prefs_set_toggle},
324 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
325 P_STRING, &display.entry_datefmt,
326 prefs_set_data_from_entry, prefs_set_entry},
329 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
332 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
334 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
337 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
339 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
341 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
343 {"show_number", "TRUE", &prefs_common.show_number, P_BOOL,
345 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
347 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
349 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
351 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
353 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
357 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
359 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
361 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
363 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
365 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
367 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
369 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
371 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
373 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
375 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
377 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
379 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
381 {"summary_col_score", "40", &prefs_common.summary_col_score,
382 P_INT, NULL, NULL, NULL},
383 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
385 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
387 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
389 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
390 P_INT, NULL, NULL, NULL},
391 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
393 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
395 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
397 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
399 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
401 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
403 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
405 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
407 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
409 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
411 {"compose_width", "600", &prefs_common.compose_width, P_INT,
413 {"compose_height", "560", &prefs_common.compose_height, P_INT,
417 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
418 &message.chkbtn_enablecol,
419 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
423 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
425 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
427 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
429 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
431 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
432 P_BOOL, NULL, NULL, NULL},
434 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
435 &message.chkbtn_mbalnum,
436 prefs_set_data_from_toggle, prefs_set_toggle},
437 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
438 P_BOOL, &message.chkbtn_disphdrpane,
439 prefs_set_data_from_toggle, prefs_set_toggle},
440 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
441 &message.chkbtn_disphdr,
442 prefs_set_data_from_toggle, prefs_set_toggle},
443 {"line_space", "2", &prefs_common.line_space, P_INT,
444 &message.spinbtn_linespc,
445 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
446 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
447 &message.chkbtn_headspc,
448 prefs_set_data_from_toggle, prefs_set_toggle},
450 {"enable_smooth_scroll", "FALSE",
451 &prefs_common.enable_smooth_scroll, P_BOOL,
452 &message.chkbtn_smoothscroll,
453 prefs_set_data_from_toggle, prefs_set_toggle},
454 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
455 &message.spinbtn_scrollstep,
456 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
457 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
458 &message.chkbtn_halfpage,
459 prefs_set_data_from_toggle, prefs_set_toggle},
461 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
465 {"mime_image_viewer", "display '%s'",
466 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
467 {"mime_audio_player", "play '%s'",
468 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
472 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
473 &privacy.checkbtn_default_encrypt,
474 prefs_set_data_from_toggle, prefs_set_toggle},
475 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
476 &privacy.checkbtn_default_sign,
477 prefs_set_data_from_toggle, prefs_set_toggle},
478 {"auto_check_signatures", "TRUE",
479 &prefs_common.auto_check_signatures, P_BOOL,
480 &privacy.checkbtn_auto_check_signatures,
481 prefs_set_data_from_toggle, prefs_set_toggle},
482 {"gpg_signature_popup", "FALSE",
483 &prefs_common.gpg_signature_popup, P_BOOL,
484 &privacy.checkbtn_gpg_signature_popup,
485 prefs_set_data_from_toggle, prefs_set_toggle},
487 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
488 &privacy.checkbtn_passphrase_grab,
489 prefs_set_data_from_toggle, prefs_set_toggle},
490 #endif /* __MINGW32__ */
491 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
492 &privacy.checkbtn_gpg_warning,
493 prefs_set_data_from_toggle, prefs_set_toggle},
494 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
495 &privacy.optmenu_default_signkey,
496 prefs_common_default_signkey_set_data_from_optmenu,
497 prefs_common_default_signkey_set_optmenu},
498 #endif /* USE_GPGME */
501 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
503 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
506 {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
507 &interface.checkbtn_emacs,
508 prefs_set_data_from_toggle, prefs_set_toggle},
509 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
510 P_BOOL, &interface.checkbtn_openunread,
511 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
513 P_BOOL, &interface.checkbtn_openinbox,
514 prefs_set_data_from_toggle, prefs_set_toggle},
515 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
516 &interface.checkbtn_immedexec,
517 prefs_set_data_from_toggle, prefs_set_toggle},
518 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
519 P_BOOL, &interface.checkbtn_addaddrbyclick,
520 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
523 &interface.checkbtn_confonexit,
524 prefs_set_data_from_toggle, prefs_set_toggle},
525 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
526 &send.checkbtn_returnreceipt,
527 prefs_set_data_from_toggle, prefs_set_toggle},
528 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
529 &interface.checkbtn_cleanonexit,
530 prefs_set_data_from_toggle, prefs_set_toggle},
531 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
532 &interface.checkbtn_askonclean,
533 prefs_set_data_from_toggle, prefs_set_toggle},
534 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
535 P_BOOL, &interface.checkbtn_warnqueued,
536 prefs_set_data_from_toggle, prefs_set_toggle},
539 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
540 &prefs_common.uri_cmd, P_STRING,
541 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
542 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
543 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
544 {"ext_editor_command", "gedit %s",
545 &prefs_common.ext_editor_cmd, P_STRING,
546 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
548 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
550 {"important_score", "1", &prefs_common.important_score, P_INT,
553 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
557 #define VSPACING_NARROW 4
558 #define VBOX_BORDER 16
559 #define DEFAULT_ENTRY_WIDTH 80
560 #define PREFSBUFSIZE 1024
562 /* widget creating functions */
563 static void prefs_common_create (void);
564 static void prefs_receive_create (void);
565 static void prefs_send_create (void);
566 static void prefs_compose_create (void);
567 static void prefs_display_create (void);
568 static void prefs_message_create (void);
570 static void prefs_privacy_create (void);
572 static void prefs_interface_create (void);
573 static void prefs_other_create (void);
575 static void prefs_quote_description (void);
576 static void prefs_quote_description_create (void);
577 static void prefs_quote_colors_dialog (void);
578 static void prefs_quote_colors_dialog_create (void);
579 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
582 static void quote_color_set_dialog (GtkWidget *widget,
584 static void quote_colors_set_dialog_ok (GtkWidget *widget,
586 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
588 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
591 static void set_button_bg_color (GtkWidget *widget,
593 static void prefs_enable_message_color_toggled (void);
594 static void prefs_recycle_colors_toggled (GtkWidget *widget);
596 /* functions for setting items of SummaryView */
597 static void prefs_summary_display_item_dialog_create
598 (gboolean *cancelled);
599 static void display_item_ok (GtkWidget *widget,
600 gboolean *cancelled);
601 static void display_item_cancel (GtkWidget *widget,
602 gboolean *cancelled);
603 static gint display_item_delete_event (GtkWidget *widget,
605 gboolean *cancelled);
606 static void display_item_key_pressed (GtkWidget *widget,
608 gboolean *cancelled);
610 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
611 static void prefs_font_selection_key_pressed (GtkWidget *widget,
614 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
616 static gint prefs_common_deleted (GtkWidget *widget,
619 static void prefs_common_key_pressed (GtkWidget *widget,
622 static void prefs_common_ok (void);
623 static void prefs_common_apply (void);
624 static void prefs_common_cancel (void);
626 static void compose_prefs_fmt_open(void);
627 static void compose_prefs_fmt_create(void);
629 void prefs_common_read_config(void)
631 prefs_read_config(param, "Common", COMMON_RC);
634 void prefs_common_save_config(void)
636 prefs_save_config(param, "Common", COMMON_RC);
639 void prefs_common_open(void)
641 if (prefs_rc_is_readonly(COMMON_RC))
644 inc_autocheck_timer_remove();
646 if (!dialog.window) {
647 prefs_common_create();
650 manage_window_set_transient(GTK_WINDOW(dialog.window));
651 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
652 gtk_widget_grab_focus(dialog.ok_btn);
654 prefs_set_dialog(param);
656 gtk_widget_show(dialog.window);
659 static void prefs_common_create(void)
663 debug_print(_("Creating common preferences window...\n"));
665 prefs_dialog_create(&dialog);
666 gtk_window_set_title (GTK_WINDOW(dialog.window),
667 _("Common Preferences"));
668 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
669 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
670 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
671 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
672 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
673 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
674 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
675 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
676 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
677 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
678 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
679 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
680 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
681 GTK_SIGNAL_FUNC(prefs_common_cancel),
682 GTK_OBJECT(dialog.window));
684 /* create all widgets on notebook */
685 prefs_receive_create();
686 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
688 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
689 prefs_compose_create();
690 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
691 prefs_display_create();
692 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
693 prefs_message_create();
694 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
696 prefs_privacy_create();
697 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
699 prefs_interface_create();
700 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
701 prefs_other_create();
702 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
704 compose_prefs_fmt_create();
706 gtk_widget_show_all(dialog.window);
709 static void prefs_receive_create(void)
713 GtkWidget *frame_incext;
714 GtkWidget *checkbtn_incext;
716 GtkWidget *label_incext;
717 GtkWidget *entry_incext;
718 GtkWidget *button_incext;
720 GtkWidget *frame_spool;
721 GtkWidget *checkbtn_local;
722 GtkWidget *checkbtn_filter_on_inc;
723 GtkWidget *label_spool;
724 GtkWidget *entry_spool;
726 GtkWidget *hbox_autochk;
727 GtkWidget *checkbtn_autochk;
728 GtkWidget *label_autochk1;
729 GtkObject *spinbtn_autochk_adj;
730 GtkWidget *spinbtn_autochk;
731 GtkWidget *label_autochk2;
732 GtkWidget *checkbtn_chkonstartup;
734 GtkWidget *frame_news;
735 GtkWidget *label_maxarticle;
736 GtkWidget *spinbtn_maxarticle;
737 GtkObject *spinbtn_maxarticle_adj;
739 vbox1 = gtk_vbox_new (FALSE, VSPACING);
740 gtk_widget_show (vbox1);
741 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
742 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
744 PACK_FRAME(vbox1, frame_incext, _("External program"));
746 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
747 gtk_widget_show (vbox2);
748 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
749 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
751 /* Use of external incorporation program */
752 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
753 _("Use external program for incorporation"));
755 hbox = gtk_hbox_new (FALSE, 8);
756 gtk_widget_show (hbox);
757 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
758 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
760 label_incext = gtk_label_new (_("Program path"));
761 gtk_widget_show (label_incext);
762 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
764 entry_incext = gtk_entry_new ();
765 gtk_widget_show (entry_incext);
766 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
768 button_incext = gtk_button_new_with_label ("... ");
769 gtk_widget_show (button_incext);
770 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
772 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
774 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
775 gtk_widget_show (vbox2);
776 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
777 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
779 hbox = gtk_hbox_new (FALSE, 32);
780 gtk_widget_show (hbox);
781 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
783 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
784 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
785 _("Filter on incorporation"));
786 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
788 hbox = gtk_hbox_new (FALSE, 8);
789 gtk_widget_show (hbox);
790 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
791 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
793 label_spool = gtk_label_new (_("Spool directory"));
794 gtk_widget_show (label_spool);
795 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
797 entry_spool = gtk_entry_new ();
798 gtk_widget_show (entry_spool);
799 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
801 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
802 gtk_widget_show (vbox2);
803 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
806 hbox_autochk = gtk_hbox_new (FALSE, 8);
807 gtk_widget_show (hbox_autochk);
808 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
810 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
811 _("Auto-check new mail"));
813 label_autochk1 = gtk_label_new (_("each"));
814 gtk_widget_show (label_autochk1);
815 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
817 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
818 spinbtn_autochk = gtk_spin_button_new
819 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
820 gtk_widget_show (spinbtn_autochk);
821 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
822 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
823 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
825 label_autochk2 = gtk_label_new (_("minute(s)"));
826 gtk_widget_show (label_autochk2);
827 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
829 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
830 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
831 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
833 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
834 _("Check new mail on startup"));
836 PACK_FRAME(vbox1, frame_news, _("News"));
838 hbox = gtk_hbox_new (FALSE, 8);
839 gtk_widget_show (hbox);
840 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
841 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
843 label_maxarticle = gtk_label_new
844 (_("Maximum article number to download\n"
845 "(unlimited if 0 is specified)"));
846 gtk_widget_show (label_maxarticle);
847 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
848 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
850 spinbtn_maxarticle_adj =
851 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
852 spinbtn_maxarticle = gtk_spin_button_new
853 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
854 gtk_widget_show (spinbtn_maxarticle);
855 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
857 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
858 gtk_spin_button_set_numeric
859 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
861 receive.checkbtn_incext = checkbtn_incext;
862 receive.entry_incext = entry_incext;
863 receive.button_incext = button_incext;
865 receive.checkbtn_local = checkbtn_local;
866 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
867 receive.entry_spool = entry_spool;
869 receive.checkbtn_autochk = checkbtn_autochk;
870 receive.spinbtn_autochk = spinbtn_autochk;
871 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
873 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
875 receive.spinbtn_maxarticle = spinbtn_maxarticle;
876 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
879 static void prefs_send_create(void)
883 GtkWidget *frame_sendext;
884 GtkWidget *vbox_sendext;
885 GtkWidget *checkbtn_sendext;
887 GtkWidget *label_sendext;
888 GtkWidget *entry_sendext;
889 GtkWidget *button_sendext;
890 GtkWidget *checkbtn_savemsg;
891 GtkWidget *checkbtn_queuemsg;
892 GtkWidget *label_outcharset;
894 GtkWidget *optmenu_menu;
896 GtkWidget *checkbtn_returnreceipt;
898 vbox1 = gtk_vbox_new (FALSE, VSPACING);
899 gtk_widget_show (vbox1);
900 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
901 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
903 PACK_FRAME(vbox1, frame_sendext, _("External program"));
905 gtk_widget_set_sensitive(frame_sendext, FALSE);
907 vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW);
908 gtk_widget_show (vbox_sendext);
909 gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext);
910 gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8);
912 PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext,
913 _("Use external program for sending"));
915 hbox1 = gtk_hbox_new (FALSE, 8);
916 gtk_widget_show (hbox1);
917 gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0);
918 SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1);
920 label_sendext = gtk_label_new (_("Program path"));
921 gtk_widget_show (label_sendext);
922 gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0);
924 entry_sendext = gtk_entry_new ();
925 gtk_widget_show (entry_sendext);
926 gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0);
928 button_sendext = gtk_button_new_with_label ("... ");
929 gtk_widget_show (button_sendext);
930 gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0);
932 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
933 gtk_widget_show (vbox2);
934 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
936 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
937 _("Save sent messages to outbox"));
938 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
939 _("Queue messages that fail to send"));
940 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
941 _("Send return receipt on request"));
943 hbox1 = gtk_hbox_new (FALSE, 8);
944 gtk_widget_show (hbox1);
945 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
947 label_outcharset = gtk_label_new (_("Outgoing codeset"));
948 gtk_widget_show (label_outcharset);
949 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
951 optmenu = gtk_option_menu_new ();
952 gtk_widget_show (optmenu);
953 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
955 optmenu_menu = gtk_menu_new ();
957 #define SET_MENUITEM(str, charset) \
959 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
962 SET_MENUITEM(_("Automatic"), CS_AUTO);
963 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
965 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
967 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
969 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
970 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
971 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
972 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
973 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
974 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
975 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
976 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
977 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
978 #endif /* HAVE_LIBJCONV */
979 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
981 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
982 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
985 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
986 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
988 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
989 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
991 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
992 #endif /* HAVE_LIBJCONV */
994 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
996 send.checkbtn_sendext = checkbtn_sendext;
997 send.entry_sendext = entry_sendext;
998 send.button_sendext = button_sendext;
1000 send.checkbtn_savemsg = checkbtn_savemsg;
1001 send.checkbtn_queuemsg = checkbtn_queuemsg;
1002 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1004 send.optmenu_charset = optmenu;
1007 static void prefs_compose_create(void)
1012 GtkWidget *frame_quote;
1013 GtkWidget *vbox_quote;
1014 GtkWidget *checkbtn_quote;
1016 GtkWidget *label_quotemark;
1017 GtkWidget *entry_quotemark;
1019 GtkWidget *label_quotefmt;
1020 GtkWidget *btn_quotedesc;
1021 GtkWidget *scrolledwin_quotefmt;
1022 GtkWidget *text_quotefmt;
1027 GtkWidget *btn_quotefmt;
1029 GtkWidget *frame_sig;
1030 GtkWidget *vbox_sig;
1031 GtkWidget *checkbtn_autosig;
1032 GtkWidget *label_sigsep;
1033 GtkWidget *entry_sigsep;
1035 GtkWidget *vbox_linewrap;
1038 GtkWidget *label_linewrap;
1039 GtkObject *spinbtn_linewrap_adj;
1040 GtkWidget *spinbtn_linewrap;
1041 GtkWidget *checkbtn_wrapquote;
1042 GtkWidget *checkbtn_wrapatsend;
1044 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1045 gtk_widget_show (vbox1);
1046 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1047 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1050 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1052 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1053 gtk_widget_show (vbox_quote);
1054 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1055 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1057 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
1058 _("Quote message when replying"));
1060 hbox1 = gtk_hbox_new (FALSE, 8);
1061 gtk_widget_show (hbox1);
1062 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
1064 label_quotemark = gtk_label_new (_("Quotation mark"));
1065 gtk_widget_show (label_quotemark);
1066 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
1068 entry_quotemark = gtk_entry_new ();
1069 gtk_widget_show (entry_quotemark);
1070 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
1071 gtk_widget_set_usize (entry_quotemark, 64, -1);
1073 hbox2 = gtk_hbox_new (FALSE, 0);
1074 gtk_widget_show (hbox2);
1075 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1077 label_quotefmt = gtk_label_new (_("Quotation format:"));
1078 gtk_widget_show (label_quotefmt);
1079 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1082 gtk_button_new_with_label (_(" Quote format "));
1083 gtk_widget_show (btn_quotedesc);
1084 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1085 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1086 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), &cancelled);
1088 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1089 gtk_widget_show (scrolledwin_quotefmt);
1090 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1091 gtk_scrolled_window_set_policy
1092 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1093 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1095 text_quotefmt = gtk_text_new (NULL, NULL);
1096 gtk_widget_show (text_quotefmt);
1097 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1098 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1099 gtk_widget_set_usize(text_quotefmt, -1, 60);
1102 hbox1 = gtk_hbox_new (FALSE, 32);
1103 gtk_widget_show (hbox1);
1104 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1106 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1107 gtk_widget_show (btn_quotefmt);
1108 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1109 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1110 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1112 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1114 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1115 gtk_widget_show (vbox_sig);
1116 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1117 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1119 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1120 _("Insert signature automatically"));
1122 hbox1 = gtk_hbox_new (FALSE, 8);
1123 gtk_widget_show (hbox1);
1124 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1126 label_sigsep = gtk_label_new (_("Signature separator"));
1127 gtk_widget_show (label_sigsep);
1128 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1130 entry_sigsep = gtk_entry_new ();
1131 gtk_widget_show (entry_sigsep);
1132 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1133 gtk_widget_set_usize (entry_sigsep, 64, -1);
1136 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1137 gtk_widget_show (vbox_linewrap);
1138 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1140 hbox3 = gtk_hbox_new (FALSE, 8);
1141 gtk_widget_show (hbox3);
1142 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1144 label_linewrap = gtk_label_new (_("Wrap messages at"));
1145 gtk_widget_show (label_linewrap);
1146 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1148 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1149 spinbtn_linewrap = gtk_spin_button_new
1150 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1151 gtk_widget_show (spinbtn_linewrap);
1152 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1153 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1154 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1156 label_linewrap = gtk_label_new (_("characters"));
1157 gtk_widget_show (label_linewrap);
1158 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1160 hbox4 = gtk_hbox_new (FALSE, 32);
1161 gtk_widget_show (hbox4);
1162 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1164 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1166 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1169 compose.checkbtn_quote = checkbtn_quote;
1170 compose.entry_quotemark = entry_quotemark;
1171 compose.text_quotefmt = text_quotefmt;
1173 compose.checkbtn_autosig = checkbtn_autosig;
1174 compose.entry_sigsep = entry_sigsep;
1176 compose.spinbtn_linewrap = spinbtn_linewrap;
1177 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1178 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1179 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1182 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1185 GtkWidget *datefmt_sample = NULL;
1187 g_return_if_fail(widget != NULL);
1188 g_return_if_fail(*widget != NULL);
1189 g_return_if_fail(display.entry_datefmt != NULL);
1191 datefmt_sample = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(*widget), "datefmt_sample");
1192 g_return_if_fail(datefmt_sample != NULL);
1194 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1195 g_free(prefs_common.date_format);
1196 prefs_common.date_format = text;
1197 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
1199 gtk_widget_destroy(*widget);
1203 static void date_format_cancel_btn_clicked(GtkButton *button,
1206 g_return_if_fail(widget != NULL);
1207 g_return_if_fail(*widget != NULL);
1209 gtk_widget_destroy(*widget);
1213 static gboolean date_format_on_delete(GtkWidget *dialogwidget, gpointer d1, GtkWidget **widget)
1215 g_return_val_if_fail(widget != NULL, FALSE);
1216 g_return_val_if_fail(*widget != NULL, FALSE);
1221 static void date_format_entry_on_change(GtkEditable *editable, GtkLabel *example)
1224 struct tm *cal_time;
1227 cur_time = time(NULL);
1228 cal_time = localtime(&cur_time);
1230 text = gtk_editable_get_chars(editable, 0, -1);
1232 strftime(buffer, sizeof buffer, text, cal_time);
1234 gtk_label_set_text(example, buffer);
1237 static void date_format_select_row(GtkWidget *date_format_list, gint row,
1238 gint column, GdkEventButton *event,
1239 GtkWidget *date_format)
1245 GtkWidget *datefmt_sample = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(date_format), "datefmt_sample");
1247 g_return_if_fail(date_format_list != NULL);
1248 g_return_if_fail(date_format != NULL);
1249 g_return_if_fail(datefmt_sample != NULL);
1251 /* only on double click */
1252 if (event->type != GDK_2BUTTON_PRESS)
1255 /* get format from clist */
1256 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
1258 curs_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1259 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1261 /* insert the format into the text entry */
1262 new_format = g_malloc(strlen(old_format) + 3);
1264 strncpy(new_format, old_format, curs_pos);
1265 new_format[curs_pos] = '\0';
1266 strcat(new_format, format);
1267 strcat(new_format, &old_format[curs_pos]);
1269 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1270 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), curs_pos + 2);
1275 static GtkWidget *create_date_format(GtkButton *button, void *data)
1277 static GtkWidget *date_format = NULL;
1279 GtkWidget *scrolledwindow1;
1280 GtkWidget *date_format_list;
1291 GtkWidget *confirm_area;
1293 GtkWidget *cancel_btn;
1294 GtkWidget *datefmt_sample = NULL;
1300 { "%a", _("the full abbreviated weekday name") },
1301 { "%A", _("the full weekday name") },
1302 { "%b", _("the abbreviated month name") },
1303 { "%B", _("the full month name") },
1304 { "%c", _("the preferred date and time for the current locale") },
1305 { "%C", _("the century number (year/100)") },
1306 { "%d", _("the day of the month as a decimal number") },
1307 { "%H", _("the hour as a decimal number using a 24-hour clock") },
1308 { "%I", _("the hour as a decimal number using a 12-hour clock") },
1309 { "%j", _("the day of the year as a decimal number") },
1310 { "%m", _("the month as a decimal number") },
1311 { "%M", _("the minute as a decimal number") },
1312 { "%p", _("either AM or PM") },
1313 { "%S", _("the second as a decimal number") },
1314 { "%w", _("the day of the week as a decimal number") },
1315 { "%x", _("the preferred date for the current locale") },
1316 { "%y", _("the last two digits of a year") },
1317 { "%Y", _("the year as a decimal number") },
1318 { "%Z", _("the time zone or name or abbreviation") }
1321 const int TIME_FORMAT_ELEMS = sizeof time_format / sizeof time_format[0];
1323 if (date_format) return date_format;
1325 date_format = gtk_window_new(GTK_WINDOW_DIALOG);
1326 gtk_window_set_title(GTK_WINDOW(date_format), _("Date format"));
1327 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1328 gtk_window_set_default_size(GTK_WINDOW(date_format), 440, 280);
1330 vbox1 = gtk_vbox_new(FALSE, 10);
1331 gtk_widget_show(vbox1);
1332 gtk_container_add(GTK_CONTAINER(date_format), vbox1);
1334 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
1335 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1),
1336 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1337 gtk_widget_show(scrolledwindow1);
1338 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
1340 date_format_list = gtk_clist_new(2);
1341 gtk_widget_show(date_format_list);
1342 gtk_container_add(GTK_CONTAINER(scrolledwindow1), date_format_list);
1343 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 0, 80);
1344 gtk_clist_set_column_width(GTK_CLIST(date_format_list), 1, 80);
1345 gtk_clist_column_titles_show(GTK_CLIST(date_format_list));
1347 label3 = gtk_label_new(_("Date Format"));
1348 gtk_widget_show(label3);
1349 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 0, label3);
1351 label4 = gtk_label_new(_("Date Format Description"));
1352 gtk_widget_show(label4);
1353 gtk_clist_set_column_widget(GTK_CLIST(date_format_list), 1, label4);
1355 for (tmp = 0; tmp < TIME_FORMAT_ELEMS; tmp++) {
1357 /* phoney casting necessary because of gtk... */
1358 text[0] = (gchar *) time_format[tmp].fmt;
1359 text[1] = (gchar *) time_format[tmp].txt;
1361 gtk_clist_append(GTK_CLIST(date_format_list), text);
1364 table2 = gtk_table_new(1, 1, TRUE);
1365 gtk_widget_show(table2);
1366 gtk_box_pack_start(GTK_BOX(vbox1), table2, FALSE, TRUE, 0);
1368 vbox2 = gtk_vbox_new(FALSE, 0);
1369 gtk_widget_show(vbox2);
1370 gtk_table_attach(GTK_TABLE(table2), vbox2, 0, 1, 0, 1,
1371 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1372 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1374 vbox3 = gtk_vbox_new(TRUE, 4);
1375 gtk_widget_show(vbox3);
1376 gtk_box_pack_end(GTK_BOX(vbox2), vbox3, FALSE, FALSE, 10);
1378 hbox2 = gtk_hbox_new(FALSE, 0);
1379 gtk_widget_show(hbox2);
1380 gtk_box_pack_start(GTK_BOX(vbox3), hbox2, TRUE, TRUE, 0);
1382 label5 = gtk_label_new(_("Date format"));
1383 gtk_widget_show(label5);
1384 gtk_box_pack_start(GTK_BOX(hbox2), label5, FALSE, FALSE, 0);
1385 gtk_misc_set_padding(GTK_MISC(label5), 8, 0);
1387 datefmt_sample = gtk_entry_new_with_max_length(300);
1388 gtk_widget_show(datefmt_sample);
1389 gtk_box_pack_start(GTK_BOX(hbox2), datefmt_sample, TRUE, TRUE, 40);
1391 /* we need the "sample" entry box; add it as data so callbacks can
1392 * get the entry box */
1393 gtk_object_set_data(GTK_OBJECT(date_format), "datefmt_sample", datefmt_sample);
1395 hbox1 = gtk_hbox_new(FALSE, 0);
1396 gtk_widget_show(hbox1);
1397 gtk_box_pack_start(GTK_BOX(vbox3), hbox1, TRUE, TRUE, 0);
1399 label6 = gtk_label_new(_("Example"));
1400 gtk_widget_show(label6);
1401 gtk_box_pack_start(GTK_BOX(hbox1), label6, FALSE, TRUE, 0);
1402 gtk_misc_set_padding(GTK_MISC(label6), 8, 0);
1404 label7 = gtk_label_new("");
1405 gtk_widget_show(label7);
1406 gtk_box_pack_start(GTK_BOX(hbox1), label7, TRUE, TRUE, 60);
1407 gtk_label_set_justify(GTK_LABEL(label7), GTK_JUSTIFY_LEFT);
1409 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
1410 &cancel_btn, _("Cancel"), NULL, NULL);
1411 gtk_widget_grab_default(ok_btn);
1413 gtk_widget_show(confirm_area);
1415 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
1417 /* set the current format */
1418 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), prefs_common.date_format);
1419 date_format_entry_on_change(GTK_EDITABLE(datefmt_sample),
1422 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
1423 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
1426 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
1427 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
1430 gtk_signal_connect(GTK_OBJECT(date_format), "delete_event",
1431 GTK_SIGNAL_FUNC(date_format_on_delete),
1434 gtk_signal_connect(GTK_OBJECT(datefmt_sample), "changed",
1435 GTK_SIGNAL_FUNC(date_format_entry_on_change),
1438 gtk_window_set_position(GTK_WINDOW(date_format), GTK_WIN_POS_CENTER);
1439 gtk_window_set_modal(GTK_WINDOW(date_format), TRUE);
1441 gtk_widget_show(date_format);
1443 gtk_signal_connect(GTK_OBJECT(date_format_list), "select_row",
1444 GTK_SIGNAL_FUNC(date_format_select_row),
1450 static void prefs_display_create(void)
1453 GtkWidget *frame_font;
1455 GtkWidget *label_textfont;
1456 GtkWidget *entry_textfont;
1457 GtkWidget *button_textfont;
1458 GtkWidget *chkbtn_folder_unread;
1459 GtkWidget *chkbtn_transhdr;
1460 GtkWidget *frame_summary;
1462 GtkWidget *chkbtn_swapfrom;
1463 GtkWidget *chkbtn_hscrollbar;
1464 GtkWidget *chkbtn_useaddrbook;
1466 GtkWidget *label_datefmt;
1467 GtkWidget *label_datefmt_btn;
1468 GtkWidget *tmplabel, *tmpentry, *tmpbutton;
1469 GtkWidget *entry_datefmt;
1470 GtkTooltips *tooltips_datefmt;
1471 GtkWidget *button_dispitem;
1473 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1474 gtk_widget_show (vbox1);
1475 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1476 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1478 PACK_FRAME(vbox1, frame_font, _("Font"));
1480 table1 = gtk_table_new (1, 3, FALSE);
1481 gtk_widget_show (table1);
1482 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1483 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1484 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1485 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1487 label_textfont = gtk_label_new (_("Text"));
1488 gtk_widget_show (label_textfont);
1489 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1490 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1492 entry_textfont = gtk_entry_new ();
1493 gtk_widget_show (entry_textfont);
1494 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1495 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1497 button_textfont = gtk_button_new_with_label ("... ");
1498 gtk_widget_show (button_textfont);
1499 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1501 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1502 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1504 tmplabel = gtk_label_new (_("Small"));
1505 gtk_widget_show (tmplabel);
1506 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1507 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1509 tmpentry = gtk_entry_new ();
1510 gtk_widget_show (tmpentry);
1511 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1512 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1514 tmpbutton = gtk_button_new_with_label ("... ");
1515 gtk_widget_show (tmpbutton);
1516 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1518 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1519 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1520 display.entry_smallfont = tmpentry;
1522 tmplabel = gtk_label_new (_("Normal"));
1523 gtk_widget_show (tmplabel);
1524 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1525 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1527 tmpentry = gtk_entry_new ();
1528 gtk_widget_show (tmpentry);
1529 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1530 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1532 tmpbutton = gtk_button_new_with_label ("... ");
1533 gtk_widget_show (tmpbutton);
1534 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1536 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1537 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1538 display.entry_normalfont = tmpentry;
1540 tmplabel = gtk_label_new (_("Bold"));
1541 gtk_widget_show (tmplabel);
1542 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1543 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1545 tmpentry = gtk_entry_new ();
1546 gtk_widget_show (tmpentry);
1547 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1548 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1550 tmpbutton = gtk_button_new_with_label ("... ");
1551 gtk_widget_show (tmpbutton);
1552 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1554 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1555 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1556 display.entry_boldfont = tmpentry;
1558 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1559 gtk_widget_show (vbox2);
1560 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1563 (vbox2, chkbtn_transhdr,
1564 _("Translate header name (such as `From:', `Subject:')"));
1566 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1567 _("Display unread number next to folder name"));
1569 /* ---- Summary ---- */
1571 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1573 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1574 gtk_widget_show (vbox2);
1575 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1576 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1579 (vbox2, chkbtn_swapfrom,
1580 _("Display recipient on `From' column if sender is yourself"));
1582 (vbox2, chkbtn_useaddrbook,
1583 _("Display sender using address book"));
1585 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1587 hbox1 = gtk_hbox_new (FALSE, 8);
1588 gtk_widget_show (hbox1);
1589 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1591 label_datefmt = gtk_label_new (_("Date format"));
1592 gtk_widget_show (label_datefmt);
1593 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1595 entry_datefmt = gtk_entry_new ();
1596 gtk_widget_show (entry_datefmt);
1597 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1599 label_datefmt_btn = gtk_button_new_with_label(_("Customize"));
1600 gtk_widget_show(label_datefmt_btn);
1601 gtk_box_pack_start(GTK_BOX (hbox1), label_datefmt_btn, FALSE, FALSE, 0);
1602 gtk_signal_connect(GTK_OBJECT(label_datefmt_btn), "clicked",
1603 GTK_SIGNAL_FUNC(create_date_format), NULL);
1605 hbox1 = gtk_hbox_new (FALSE, 8);
1606 gtk_widget_show (hbox1);
1607 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1609 button_dispitem = gtk_button_new_with_label
1610 (_(" Set display item of summary... "));
1611 gtk_widget_show (button_dispitem);
1612 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1613 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1614 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1617 display.entry_textfont = entry_textfont;
1618 display.button_textfont = button_textfont;
1620 display.chkbtn_folder_unread = chkbtn_folder_unread;
1621 display.chkbtn_transhdr = chkbtn_transhdr;
1623 display.chkbtn_swapfrom = chkbtn_swapfrom;
1624 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1625 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1626 display.entry_datefmt = entry_datefmt;
1629 static void prefs_message_create(void)
1634 GtkWidget *chkbtn_enablecol;
1635 GtkWidget *button_edit_col;
1636 GtkWidget *chkbtn_mbalnum;
1637 GtkWidget *chkbtn_disphdrpane;
1638 GtkWidget *chkbtn_disphdr;
1639 GtkWidget *button_edit_disphdr;
1640 GtkWidget *hbox_linespc;
1641 GtkWidget *label_linespc;
1642 GtkObject *spinbtn_linespc_adj;
1643 GtkWidget *spinbtn_linespc;
1644 GtkWidget *chkbtn_headspc;
1646 GtkWidget *frame_scr;
1647 GtkWidget *vbox_scr;
1648 GtkWidget *chkbtn_smoothscroll;
1649 GtkWidget *hbox_scr;
1650 GtkWidget *label_scr;
1651 GtkObject *spinbtn_scrollstep_adj;
1652 GtkWidget *spinbtn_scrollstep;
1653 GtkWidget *chkbtn_halfpage;
1655 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1656 gtk_widget_show (vbox1);
1657 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1658 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1660 hbox1 = gtk_hbox_new (FALSE, 8);
1661 gtk_widget_show (hbox1);
1662 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1664 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1665 _("Enable coloration of message"));
1666 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1667 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1670 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1671 gtk_widget_show (button_edit_col);
1672 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1673 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1674 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1676 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1678 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1679 gtk_widget_show (vbox2);
1680 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1683 (vbox2, chkbtn_mbalnum,
1684 _("Display 2-byte alphabet and numeric with 1-byte character"));
1685 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1686 _("Display header pane above message view"));
1688 hbox1 = gtk_hbox_new (FALSE, 8);
1689 gtk_widget_show (hbox1);
1690 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1692 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1693 _("Display short headers on message view"));
1695 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1696 gtk_widget_show (button_edit_disphdr);
1697 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1699 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1700 GTK_SIGNAL_FUNC (prefs_display_header_open),
1703 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1705 hbox1 = gtk_hbox_new (FALSE, 32);
1706 gtk_widget_show (hbox1);
1707 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1709 hbox_linespc = gtk_hbox_new (FALSE, 8);
1710 gtk_widget_show (hbox1);
1711 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1713 label_linespc = gtk_label_new (_("Line space"));
1714 gtk_widget_show (label_linespc);
1715 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1718 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1719 spinbtn_linespc = gtk_spin_button_new
1720 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1721 gtk_widget_show (spinbtn_linespc);
1722 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1724 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1725 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1727 label_linespc = gtk_label_new (_("pixel(s)"));
1728 gtk_widget_show (label_linespc);
1729 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1732 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1734 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1736 vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW);
1737 gtk_widget_show (vbox_scr);
1738 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1739 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1741 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1743 hbox1 = gtk_hbox_new (FALSE, 32);
1744 gtk_widget_show (hbox1);
1745 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1747 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1749 hbox_scr = gtk_hbox_new (FALSE, 8);
1750 gtk_widget_show (hbox_scr);
1751 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1753 label_scr = gtk_label_new (_("Step"));
1754 gtk_widget_show (label_scr);
1755 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1757 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1758 spinbtn_scrollstep = gtk_spin_button_new
1759 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1760 gtk_widget_show (spinbtn_scrollstep);
1761 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1763 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1764 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1767 label_scr = gtk_label_new (_("pixel(s)"));
1768 gtk_widget_show (label_scr);
1769 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1771 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1773 message.chkbtn_enablecol = chkbtn_enablecol;
1774 message.button_edit_col = button_edit_col;
1775 message.chkbtn_mbalnum = chkbtn_mbalnum;
1776 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1777 message.chkbtn_disphdr = chkbtn_disphdr;
1778 message.spinbtn_linespc = spinbtn_linespc;
1779 message.chkbtn_headspc = chkbtn_headspc;
1781 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1782 message.spinbtn_scrollstep = spinbtn_scrollstep;
1783 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1784 message.chkbtn_halfpage = chkbtn_halfpage;
1788 static void prefs_privacy_create(void)
1793 GtkWidget *checkbtn_default_encrypt;
1794 GtkWidget *checkbtn_default_sign;
1795 GtkWidget *checkbtn_auto_check_signatures;
1796 GtkWidget *checkbtn_gpg_signature_popup;
1797 GtkWidget *checkbtn_passphrase_grab;
1798 GtkWidget *checkbtn_gpg_warning;
1800 GtkWidget *menuitem;
1802 GtkWidget *optmenu_menu;
1804 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1805 gtk_widget_show (vbox1);
1806 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1807 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1809 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1810 gtk_widget_show (vbox2);
1811 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1813 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1814 _("Encrypt message by default"));
1816 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1817 _("Sign message by default"));
1819 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1820 _("Automatically check signatures"));
1822 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1823 _("Show signature check result in a popup window"));
1826 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1827 _("Grab input while entering a passphrase"));
1831 (vbox2, checkbtn_gpg_warning,
1832 _("Display warning on startup if GnuPG doesn't work"));
1834 hbox1 = gtk_hbox_new (FALSE, 8);
1835 gtk_widget_show (hbox1);
1836 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1838 /* create default signkey box */
1839 label = gtk_label_new (_("Default Sign Key"));
1840 gtk_widget_show (label);
1841 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1842 optmenu = gtk_option_menu_new ();
1843 gtk_widget_show (optmenu);
1844 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1845 optmenu_menu = gtk_menu_new ();
1847 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1848 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1849 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1850 /* FIXME: disabled because not implemented */
1851 gtk_widget_set_sensitive(optmenu, FALSE);
1853 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1854 privacy.checkbtn_default_sign = checkbtn_default_sign;
1855 privacy.checkbtn_auto_check_signatures
1856 = checkbtn_auto_check_signatures;
1857 privacy.checkbtn_gpg_signature_popup
1858 = checkbtn_gpg_signature_popup;
1859 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1860 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1861 privacy.optmenu_default_signkey = optmenu;
1865 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1869 GtkWidget *menuitem;
1872 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1873 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1874 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1875 g_free(*((gchar **)pparam->data));
1876 *((gchar **)pparam->data) = g_strdup(charset);
1880 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1884 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1886 GtkWidget *menuitem;
1890 g_return_if_fail(optmenu != NULL);
1891 g_return_if_fail(*((gchar **)pparam->data) != NULL);
1893 menu = gtk_option_menu_get_menu(optmenu);
1894 for (cur = GTK_MENU_SHELL(menu)->children;
1895 cur != NULL; cur = cur->next) {
1896 menuitem = GTK_WIDGET(cur->data);
1897 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1898 if (!strcmp(charset, *((gchar **)pparam->data))) {
1899 gtk_option_menu_set_history(optmenu, n);
1905 gtk_option_menu_set_history(optmenu, 0);
1906 prefs_common_charset_set_data_from_optmenu(pparam);
1909 #endif /* USE_GPGME */
1911 static void prefs_interface_create(void)
1916 GtkWidget *checkbtn_emacs;
1917 GtkWidget *checkbtn_openunread;
1918 GtkWidget *checkbtn_openinbox;
1919 GtkWidget *checkbtn_immedexec;
1920 GtkWidget *checkbtn_addaddrbyclick;
1923 GtkWidget *frame_exit;
1924 GtkWidget *vbox_exit;
1926 GtkWidget *checkbtn_confonexit;
1927 GtkWidget *checkbtn_cleanonexit;
1928 GtkWidget *checkbtn_askonclean;
1929 GtkWidget *checkbtn_warnqueued;
1931 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1932 gtk_widget_show (vbox1);
1933 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1934 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1936 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1937 gtk_widget_show (vbox2);
1938 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1940 PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1941 _("Emulate the behavior of mouse operation of\n"
1942 "Emacs-based mailer"));
1943 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1947 (vbox2, checkbtn_openunread,
1948 _("Open first unread message when entering a folder"));
1951 (vbox2, checkbtn_openinbox,
1952 _("Go to inbox after receiving new mail"));
1954 vbox3 = gtk_vbox_new (FALSE, 0);
1955 gtk_widget_show (vbox3);
1956 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1959 (vbox3, checkbtn_immedexec,
1960 _("Execute immediately when moving or deleting messages"));
1962 hbox1 = gtk_hbox_new (FALSE, 0);
1963 gtk_widget_show (hbox1);
1964 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1966 label = gtk_label_new
1967 (_("(Messages will be just marked till execution\n"
1968 " if this is turned off)"));
1969 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
1970 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1973 (vbox2, checkbtn_addaddrbyclick,
1974 _("Add address to destination when double-clicked"));
1976 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1978 vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW);
1979 gtk_widget_show (vbox_exit);
1980 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1981 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1983 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1984 _("Confirm on exit"));
1986 hbox1 = gtk_hbox_new (FALSE, 32);
1987 gtk_widget_show (hbox1);
1988 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1990 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1991 _("Empty trash on exit"));
1992 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1993 _("Ask before emptying"));
1994 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1996 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1997 _("Warn if there are queued messages"));
1999 interface.checkbtn_emacs = checkbtn_emacs;
2000 interface.checkbtn_openunread = checkbtn_openunread;
2001 interface.checkbtn_openinbox = checkbtn_openinbox;
2002 interface.checkbtn_immedexec = checkbtn_immedexec;
2003 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2004 interface.checkbtn_confonexit = checkbtn_confonexit;
2005 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2006 interface.checkbtn_askonclean = checkbtn_askonclean;
2007 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2010 static void prefs_other_create(void)
2015 GtkWidget *uri_frame;
2016 GtkWidget *uri_label;
2017 GtkWidget *uri_combo;
2018 GtkWidget *uri_entry;
2020 GtkWidget *print_frame;
2021 GtkWidget *printcmd_label;
2022 GtkWidget *printcmd_entry;
2024 GtkWidget *exteditor_frame;
2025 GtkWidget *exteditor_label;
2026 GtkWidget *exteditor_combo;
2027 GtkWidget *exteditor_entry;
2029 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2030 gtk_widget_show (vbox1);
2031 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2032 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2034 PACK_FRAME(vbox1, uri_frame,
2035 _("External Web browser (%s will be replaced with URI)"));
2037 hbox1 = gtk_hbox_new (FALSE, 8);
2038 gtk_widget_show (hbox1);
2039 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2040 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2042 uri_label = gtk_label_new (_("Command"));
2043 gtk_widget_show(uri_label);
2044 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2046 uri_combo = gtk_combo_new ();
2047 gtk_widget_show (uri_combo);
2048 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2049 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2050 "netscape -remote 'openURL(%s,raise)'",
2052 "gnome-moz-remote --raise --newwin '%s'",
2053 "kterm -e w3m '%s'",
2054 "kterm -e lynx '%s'",
2057 uri_entry = GTK_COMBO (uri_combo)->entry;
2059 PACK_FRAME(vbox1, print_frame,
2060 _("Printing (%s will be replaced with file name)"));
2062 hbox1 = gtk_hbox_new (FALSE, 8);
2063 gtk_widget_show (hbox1);
2064 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2065 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2067 printcmd_label = gtk_label_new (_("Command"));
2068 gtk_widget_show (printcmd_label);
2069 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2071 printcmd_entry = gtk_entry_new ();
2072 gtk_widget_show (printcmd_entry);
2073 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2075 PACK_FRAME(vbox1, exteditor_frame,
2076 _("External editor (%s will be replaced with file name)"));
2078 hbox1 = gtk_hbox_new (FALSE, 8);
2079 gtk_widget_show (hbox1);
2080 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2081 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2083 exteditor_label = gtk_label_new (_("Command"));
2084 gtk_widget_show (exteditor_label);
2085 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2087 exteditor_combo = gtk_combo_new ();
2088 gtk_widget_show (exteditor_combo);
2089 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2090 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2092 "mgedit --no-fork %s",
2098 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2100 other.uri_combo = uri_combo;
2101 other.uri_entry = uri_entry;
2102 other.printcmd_entry = printcmd_entry;
2104 other.exteditor_combo = exteditor_combo;
2105 other.exteditor_entry = exteditor_entry;
2108 void prefs_quote_colors_dialog(void)
2110 if (!quote_color_win)
2111 prefs_quote_colors_dialog_create();
2112 gtk_widget_show(quote_color_win);
2113 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2116 gtk_widget_hide(quote_color_win);
2118 textview_update_message_colors();
2119 main_window_reflect_prefs_all();
2122 static void prefs_quote_colors_dialog_create(void)
2127 GtkWidget *quotelevel1_label;
2128 GtkWidget *quotelevel2_label;
2129 GtkWidget *quotelevel3_label;
2130 GtkWidget *uri_label;
2133 //GtkWidget *cancel_btn;
2134 GtkWidget *recycle_colors_btn;
2135 GtkWidget *frame_colors;
2137 window = gtk_window_new(GTK_WINDOW_DIALOG);
2138 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2139 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2140 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2141 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2142 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2144 vbox = gtk_vbox_new (FALSE, VSPACING);
2145 gtk_container_add (GTK_CONTAINER (window), vbox);
2146 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2147 PACK_FRAME(vbox, frame_colors, _("Colors"));
2149 table = gtk_table_new (4, 2, FALSE);
2150 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2151 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2152 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2153 gtk_table_set_col_spacings (GTK_TABLE (table), 4);
2155 color_buttons.quote_level1_btn = gtk_button_new();
2156 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2157 0, 1, 0, 1, 0, 0, 0, 0);
2158 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2159 gtk_container_set_border_width
2160 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2162 color_buttons.quote_level2_btn = gtk_button_new();
2163 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2164 0, 1, 1, 2, 0, 0, 0, 0);
2165 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2166 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2168 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2169 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2170 0, 1, 2, 3, 0, 0, 0, 0);
2171 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2172 gtk_container_set_border_width
2173 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2175 color_buttons.uri_btn = gtk_button_new_with_label ("");
2176 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2177 0, 1, 3, 4, 0, 0, 0, 0);
2178 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2179 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2181 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2182 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2183 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2184 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2185 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2187 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2188 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2189 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2190 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2191 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2193 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2194 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2195 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2196 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2197 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2199 uri_label = gtk_label_new (_("URI link"));
2200 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2201 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2202 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2203 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2205 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2206 _("Recycle quote colors"));
2208 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2209 NULL, NULL, NULL, NULL);
2210 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2212 gtk_widget_grab_default(ok_btn);
2213 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2214 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2215 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2216 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2217 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2218 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2219 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2220 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2223 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2224 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2225 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2226 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2227 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2228 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2229 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2230 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2231 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2232 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2233 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2234 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2236 /* show message button colors and recycle options */
2237 set_button_bg_color(color_buttons.quote_level1_btn,
2238 prefs_common.quote_level1_col);
2239 set_button_bg_color(color_buttons.quote_level2_btn,
2240 prefs_common.quote_level2_col);
2241 set_button_bg_color(color_buttons.quote_level3_btn,
2242 prefs_common.quote_level3_col);
2243 set_button_bg_color(color_buttons.uri_btn,
2244 prefs_common.uri_col);
2245 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2246 prefs_common.recycle_quote_colors);
2248 gtk_widget_show_all(vbox);
2249 quote_color_win = window;
2252 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2253 GdkEventKey *event, gpointer data)
2255 if (event && event->keyval == GDK_Escape)
2259 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2261 gchar *type = (gchar *)data;
2262 gchar *title = NULL;
2263 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2265 GtkColorSelectionDialog *dialog;
2267 if(g_strcasecmp(type, "LEVEL1") == 0) {
2268 title = _("Pick color for quotation level 1");
2269 rgbvalue = prefs_common.quote_level1_col;
2270 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2271 title = _("Pick color for quotation level 2");
2272 rgbvalue = prefs_common.quote_level2_col;
2273 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2274 title = _("Pick color for quotation level 3");
2275 rgbvalue = prefs_common.quote_level3_col;
2276 } else if(g_strcasecmp(type, "URI") == 0) {
2277 title = _("Pick color for URI");
2278 rgbvalue = prefs_common.uri_col;
2279 } else { /* Should never be called */
2280 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2284 color_dialog = gtk_color_selection_dialog_new(title);
2285 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2286 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2287 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2288 manage_window_set_transient(GTK_WINDOW(color_dialog));
2290 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2291 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2292 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2293 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2294 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2295 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2298 /* preselect the previous color in the color selection dialog */
2299 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2300 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2301 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2302 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2303 gtk_color_selection_set_color
2304 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2306 gtk_widget_show(color_dialog);
2309 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2311 GtkColorSelection *colorsel = (GtkColorSelection *)
2312 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2314 gint red, green, blue, rgbvalue;
2315 gchar *type = (gchar *)data;
2317 gtk_color_selection_get_color(colorsel, color);
2319 red = (gint) (color[0] * 255.0);
2320 green = (gint) (color[1] * 255.0);
2321 blue = (gint) (color[2] * 255.0);
2322 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2325 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2326 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2327 fprintf(stderr, "Color is %x\n", rgbvalue);
2330 if (g_strcasecmp(type, "LEVEL1") == 0) {
2331 prefs_common.quote_level1_col = rgbvalue;
2332 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2333 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2334 prefs_common.quote_level2_col = rgbvalue;
2335 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2336 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2337 prefs_common.quote_level3_col = rgbvalue;
2338 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2339 } else if (g_strcasecmp(type, "URI") == 0) {
2340 prefs_common.uri_col = rgbvalue;
2341 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2343 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2345 gtk_widget_destroy(color_dialog);
2348 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2350 gtk_widget_destroy(color_dialog);
2353 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2357 gtk_widget_destroy(color_dialog);
2360 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2365 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2366 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2367 newstyle->bg[GTK_STATE_NORMAL] = color;
2368 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2369 newstyle->bg[GTK_STATE_ACTIVE] = color;
2371 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2374 static void prefs_enable_message_color_toggled(void)
2378 is_active = gtk_toggle_button_get_active
2379 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2380 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2381 prefs_common.enable_color = is_active;
2384 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2388 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2389 prefs_common.recycle_quote_colors = is_active;
2392 static void prefs_quote_description(void)
2394 if (!quote_desc_win)
2395 prefs_quote_description_create();
2397 gtk_widget_show(quote_desc_win);
2399 gtk_widget_hide(quote_desc_win);
2402 static void prefs_quote_description_create(void)
2410 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2411 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2412 _("Description of symbols"));
2413 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2414 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2415 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2416 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2418 vbox = gtk_vbox_new(FALSE, 8);
2419 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2421 hbox = gtk_hbox_new(FALSE, 4);
2422 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2424 label = gtk_label_new
2428 "%N\n" /* full name */
2429 "%F\n" /* first name */
2430 "%I\n" /* sender's initial */
2431 "%s\n" /* subject line */
2434 "%n\n" /* newsgroups */
2435 "%i\n" /* message id */
2436 "%r\n" /* references */
2445 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2446 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2448 label = gtk_label_new
2449 (_("DESCRIPTION\n\n"
2452 "Full Name of Sender\n"
2453 "First Name of Sender\n"
2454 "Initial of Sender\n"
2462 "Display the information\n"
2463 "If the information x is set, displays expr\n"
2466 "Quoted message body\n"
2469 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2470 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2472 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2473 NULL, NULL, NULL, NULL);
2474 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2476 gtk_widget_grab_default(ok_btn);
2477 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2478 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2480 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2481 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2483 gtk_widget_show_all(vbox);
2486 /* functions for setting items of SummaryView */
2488 static struct _SummaryDisplayItem
2492 GtkWidget *chkbtn[N_SUMMARY_COLS];
2495 GtkWidget *cancel_btn;
2498 #define SET_ACTIVE(column, var) \
2499 gtk_toggle_button_set_active \
2500 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
2502 #define GET_ACTIVE(column, var) \
2503 prefs_common.var = gtk_toggle_button_get_active \
2504 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
2506 void prefs_summary_display_item_set(void)
2508 static gboolean cancelled;
2510 if (!summarydispitem.window)
2511 prefs_summary_display_item_dialog_create(&cancelled);
2512 gtk_widget_grab_focus(summarydispitem.ok_btn);
2513 gtk_widget_show(summarydispitem.window);
2514 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
2516 SET_ACTIVE(S_COL_MARK, show_mark);
2517 SET_ACTIVE(S_COL_UNREAD, show_unread);
2518 SET_ACTIVE(S_COL_MIME, show_mime);
2519 SET_ACTIVE(S_COL_NUMBER, show_number);
2520 SET_ACTIVE(S_COL_SCORE, show_score);
2521 SET_ACTIVE(S_COL_SIZE, show_size);
2522 SET_ACTIVE(S_COL_DATE, show_date);
2523 SET_ACTIVE(S_COL_FROM, show_from);
2524 SET_ACTIVE(S_COL_SUBJECT, show_subject);
2527 gtk_widget_hide(summarydispitem.window);
2529 if (cancelled != TRUE) {
2530 GET_ACTIVE(S_COL_MARK, show_mark);
2531 GET_ACTIVE(S_COL_UNREAD, show_unread);
2532 GET_ACTIVE(S_COL_MIME, show_mime);
2533 GET_ACTIVE(S_COL_NUMBER, show_number);
2534 GET_ACTIVE(S_COL_SCORE, show_score);
2535 GET_ACTIVE(S_COL_SIZE, show_size);
2536 GET_ACTIVE(S_COL_DATE, show_date);
2537 GET_ACTIVE(S_COL_FROM, show_from);
2538 GET_ACTIVE(S_COL_SUBJECT, show_subject);
2540 main_window_reflect_prefs_all();
2544 #define SET_CHECK_BUTTON(column, label) \
2546 summarydispitem.chkbtn[column] = \
2547 gtk_check_button_new_with_label(label); \
2548 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
2549 summarydispitem.chkbtn[column], \
2553 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
2557 GtkWidget *chkbtn_vbox;
2560 GtkWidget *cancel_btn;
2562 window = gtk_window_new(GTK_WINDOW_DIALOG);
2563 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2564 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
2565 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2566 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2567 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2568 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2569 GTK_SIGNAL_FUNC(display_item_delete_event),
2571 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2572 GTK_SIGNAL_FUNC(display_item_key_pressed),
2575 vbox = gtk_vbox_new(FALSE, 8);
2576 gtk_container_add(GTK_CONTAINER(window), vbox);
2578 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
2579 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
2581 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
2582 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
2583 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
2584 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
2585 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
2586 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
2587 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
2588 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
2589 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
2591 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2592 &cancel_btn, _("Cancel"), NULL, NULL);
2593 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2594 gtk_widget_grab_default(ok_btn);
2596 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2597 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
2598 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2599 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
2601 gtk_widget_show_all(vbox);
2603 summarydispitem.window = window;
2604 summarydispitem.ok_btn = ok_btn;
2605 summarydispitem.cancel_btn = cancel_btn;
2608 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
2614 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
2620 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
2621 gboolean *cancelled)
2629 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
2630 gboolean *cancelled)
2632 if (event && event->keyval == GDK_Escape) {
2638 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
2642 g_return_if_fail(entry != NULL);
2644 if (!font_sel_win) {
2645 font_sel_win = gtk_font_selection_dialog_new
2646 (_("Font selection"));
2647 gtk_window_position(GTK_WINDOW(font_sel_win),
2648 GTK_WIN_POS_CENTER);
2649 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
2650 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2653 (GTK_OBJECT(font_sel_win), "key_press_event",
2654 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
2657 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
2659 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
2661 gtk_signal_connect_object
2662 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
2664 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
2665 GTK_OBJECT(font_sel_win));
2668 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
2669 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
2671 manage_window_set_transient(GTK_WINDOW(font_sel_win));
2672 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
2673 gtk_widget_grab_focus
2674 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
2675 gtk_widget_show(font_sel_win);
2678 static void prefs_font_selection_key_pressed(GtkWidget *widget,
2682 if (event && event->keyval == GDK_Escape)
2683 gtk_widget_hide(font_sel_win);
2686 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
2690 fontname = gtk_font_selection_dialog_get_font_name
2691 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
2694 gtk_entry_set_text(entry, fontname);
2698 gtk_widget_hide(font_sel_win);
2701 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2704 GtkWidget *menuitem;
2707 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2708 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2709 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2710 g_free(*((gchar **)pparam->data));
2711 *((gchar **)pparam->data) = g_strdup(charset);
2714 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2717 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2719 GtkWidget *menuitem;
2723 g_return_if_fail(optmenu != NULL);
2724 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2726 menu = gtk_option_menu_get_menu(optmenu);
2727 for (cur = GTK_MENU_SHELL(menu)->children;
2728 cur != NULL; cur = cur->next) {
2729 menuitem = GTK_WIDGET(cur->data);
2730 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2731 if (!strcmp(charset, *((gchar **)pparam->data))) {
2732 gtk_option_menu_set_history(optmenu, n);
2738 gtk_option_menu_set_history(optmenu, 0);
2739 prefs_common_charset_set_data_from_optmenu(pparam);
2742 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2745 prefs_common_cancel();
2749 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2752 if (event && event->keyval == GDK_Escape)
2753 prefs_common_cancel();
2756 static void prefs_common_ok(void)
2758 prefs_common_apply();
2759 gtk_widget_hide(dialog.window);
2760 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
2761 gtk_widget_hide(quote_desc_win);
2763 inc_autocheck_timer_set();
2766 static void prefs_common_apply(void)
2768 prefs_set_data_from_dialog(param);
2769 main_window_reflect_prefs_all();
2770 prefs_common_save_config();
2773 static void prefs_common_cancel(void)
2775 gtk_widget_hide(dialog.window);
2776 inc_autocheck_timer_set();
2780 static struct _ComposePrefs
2784 GtkWidget *close_btn;
2787 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
2788 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
2789 static void compose_prefs_close(GtkWidget *widget);
2790 static void compose_prefs_fmt_create(void);
2792 static void compose_prefs_fmt_open(void)
2794 if (composeprefs.window == NULL)
2795 compose_prefs_fmt_create();
2796 gtk_widget_show(composeprefs.window);
2800 static void compose_prefs_fmt_create(void)
2803 GtkWidget *close_btn;
2805 GtkWidget *frame_quote;
2806 GtkWidget *vbox_quote;
2808 GtkWidget *checkbtn_quote;
2809 GtkWidget *label_quotemark;
2810 GtkWidget *entry_quotemark;
2811 GtkWidget *scrolledwin_quotefmt;
2812 GtkWidget *text_quotefmt;
2813 GtkWidget *label_quotefmt;
2814 GtkWidget *btn_quotedesc;
2816 GtkWidget *label_fw_quotemark;
2817 GtkWidget *entry_fw_quotemark;
2818 GtkWidget *label_fw_quotefmt;
2819 GtkWidget *text_fw_quotefmt;
2821 window = gtk_window_new(GTK_WINDOW_DIALOG);
2822 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
2823 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
2824 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2825 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2826 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2827 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2828 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
2830 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2831 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
2834 vbox_quote = gtk_vbox_new(FALSE, 8);
2835 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
2837 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
2838 _("Quote message when replying"));
2840 hbox1 = gtk_hbox_new (FALSE, 8);
2841 gtk_widget_show (hbox1);
2842 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2844 label_quotemark = gtk_label_new (_("Quotation mark"));
2845 gtk_widget_show (label_quotemark);
2846 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
2848 entry_quotemark = gtk_entry_new ();
2849 gtk_widget_show (entry_quotemark);
2850 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
2851 gtk_widget_set_usize (entry_quotemark, 64, -1);
2853 hbox1 = gtk_hbox_new (FALSE, 0);
2854 gtk_widget_show (hbox1);
2855 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2857 label_quotefmt = gtk_label_new (_("Quotation format:"));
2858 gtk_widget_show (label_quotefmt);
2859 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
2861 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2862 gtk_widget_show (scrolledwin_quotefmt);
2863 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2864 gtk_scrolled_window_set_policy
2865 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2866 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2868 text_quotefmt = gtk_text_new (NULL, NULL);
2869 gtk_widget_show (text_quotefmt);
2870 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2871 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2872 gtk_widget_set_usize(text_quotefmt, 400, 60);
2874 hbox1 = gtk_hbox_new (FALSE, 8);
2875 gtk_widget_show (hbox1);
2876 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2878 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
2879 gtk_widget_show (label_fw_quotemark);
2880 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
2882 entry_fw_quotemark = gtk_entry_new ();
2883 gtk_widget_show (entry_fw_quotemark);
2884 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
2885 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2887 hbox1 = gtk_hbox_new (FALSE, 0);
2888 gtk_widget_show (hbox1);
2889 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
2891 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
2892 gtk_widget_show (label_fw_quotefmt);
2893 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
2895 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2896 gtk_widget_show (scrolledwin_quotefmt);
2897 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2898 gtk_scrolled_window_set_policy
2899 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2900 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2902 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2903 gtk_widget_show (text_fw_quotefmt);
2904 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
2905 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2906 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
2908 hbox1 = gtk_hbox_new (FALSE, 0);
2909 gtk_widget_show (hbox1);
2910 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2913 gtk_button_new_with_label (_(" Description of symbols "));
2914 gtk_widget_show (btn_quotedesc);
2915 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
2918 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2919 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
2922 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
2923 NULL, NULL, NULL, NULL);
2924 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
2925 gtk_widget_grab_default(close_btn);
2927 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
2928 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
2930 gtk_widget_show_all(vbox_quote);
2932 composeprefs.window = window;
2933 composeprefs.close_btn = close_btn;
2935 compose.checkbtn_quote = checkbtn_quote;
2936 compose.entry_quotemark = entry_quotemark;
2937 compose.text_quotefmt = text_quotefmt;
2938 compose.entry_fw_quotemark = entry_fw_quotemark;
2939 compose.text_fw_quotefmt = text_fw_quotefmt;
2942 static void compose_prefs_close(GtkWidget *widget)
2944 gtk_widget_hide(composeprefs.window);
2947 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
2949 gtk_widget_hide(composeprefs.window);
2954 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
2956 if (event && event->keyval == GDK_Escape) {
2957 gtk_widget_hide(composeprefs.window);