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 #include "folderview.h"
59 PrefsCommon prefs_common;
61 static PrefsDialog dialog;
63 static struct Receive {
64 GtkWidget *checkbtn_incext;
65 GtkWidget *entry_incext;
66 GtkWidget *button_incext;
68 GtkWidget *checkbtn_local;
69 GtkWidget *checkbtn_filter_on_inc;
70 GtkWidget *entry_spool;
72 GtkWidget *checkbtn_autochk;
73 GtkWidget *spinbtn_autochk;
74 GtkObject *spinbtn_autochk_adj;
76 GtkWidget *checkbtn_chkonstartup;
77 GtkWidget *checkbtn_noerrorpanel;
78 GtkWidget *checkbtn_scan_after_inc;
81 GtkWidget *spinbtn_maxarticle;
82 GtkObject *spinbtn_maxarticle_adj;
86 GtkWidget *checkbtn_extsend;
87 GtkWidget *entry_extsend;
88 GtkWidget *button_extsend;
90 GtkWidget *checkbtn_savemsg;
91 GtkWidget *checkbtn_queuemsg;
93 GtkWidget *optmenu_charset;
95 GtkWidget *checkbtn_returnreceipt;
98 static struct Compose {
99 GtkWidget *checkbtn_quote;
100 GtkWidget *entry_quotemark;
101 GtkWidget *text_quotefmt;
102 GtkWidget *checkbtn_autosig;
103 GtkWidget *entry_sigsep;
105 GtkWidget *entry_fw_quotemark;
106 GtkWidget *text_fw_quotefmt;
108 GtkWidget *checkbtn_autoextedit;
109 GtkWidget *checkbtn_reply_account_autosel;
110 GtkWidget *checkbtn_forward_account_autosel;
111 GtkWidget *checkbtn_reedit_account_autosel;
113 GtkWidget *spinbtn_linewrap;
114 GtkObject *spinbtn_linewrap_adj;
115 GtkWidget *checkbtn_wrapquote;
116 GtkWidget *checkbtn_wrapatsend;
118 GtkWidget * checkbtn_forward_as_attachment;
119 GtkWidget * checkbtn_smart_wrapping;
123 GtkWidget *checkbtn_enable_pspell;
124 GtkWidget *entry_pspell_path;
125 GtkWidget *btn_pspell_path;
126 GtkWidget *optmenu_dictionary;
131 static struct Display {
132 GtkWidget *entry_textfont;
133 GtkWidget *button_textfont;
135 GtkWidget *entry_smallfont;
136 GtkWidget *entry_normalfont;
137 GtkWidget *entry_boldfont;
139 GtkWidget *chkbtn_folder_unread;
141 GtkWidget *chkbtn_transhdr;
143 GtkWidget *chkbtn_swapfrom;
144 GtkWidget *chkbtn_hscrollbar;
145 GtkWidget *chkbtn_useaddrbook;
146 GtkWidget *chkbtn_expand_thread;
147 GtkWidget *chkbtn_bold_unread;
149 GtkWidget *entry_datefmt;
152 static struct Message {
153 GtkWidget *chkbtn_enablecol;
154 GtkWidget *button_edit_col;
155 GtkWidget *chkbtn_mbalnum;
156 GtkWidget *chkbtn_disphdrpane;
157 GtkWidget *chkbtn_disphdr;
158 GtkWidget *spinbtn_linespc;
159 GtkObject *spinbtn_linespc_adj;
160 GtkWidget *chkbtn_headspc;
162 GtkWidget *chkbtn_smoothscroll;
163 GtkWidget *spinbtn_scrollstep;
164 GtkObject *spinbtn_scrollstep_adj;
165 GtkWidget *chkbtn_halfpage;
169 static struct Privacy {
170 GtkWidget *checkbtn_default_encrypt;
171 GtkWidget *checkbtn_default_sign;
172 GtkWidget *checkbtn_auto_check_signatures;
173 GtkWidget *checkbtn_gpg_signature_popup;
174 GtkWidget *checkbtn_passphrase_grab;
175 GtkWidget *checkbtn_gpg_warning;
176 GtkWidget *optmenu_default_signkey;
180 static struct Interface {
181 /* GtkWidget *checkbtn_emacs; */
182 GtkWidget *checkbtn_openunread;
183 GtkWidget *checkbtn_openinbox;
184 GtkWidget *checkbtn_immedexec;
185 GtkWidget *checkbtn_confonexit;
186 GtkWidget *checkbtn_cleanonexit;
187 GtkWidget *checkbtn_askonclean;
188 GtkWidget *checkbtn_warnqueued;
189 GtkWidget *checkbtn_addaddrbyclick;
190 GtkWidget *optmenu_recvdialog;
191 GtkWidget *optmenu_nextunreadmsgdialog;
194 static struct Other {
195 GtkWidget *uri_combo;
196 GtkWidget *uri_entry;
197 GtkWidget *printcmd_entry;
198 GtkWidget *exteditor_combo;
199 GtkWidget *exteditor_entry;
202 static struct MessageColorButtons {
203 GtkWidget *quote_level1_btn;
204 GtkWidget *quote_level2_btn;
205 GtkWidget *quote_level3_btn;
207 GtkWidget *tgt_folder_btn;
210 static GtkWidget *quote_desc_win;
211 static GtkWidget *font_sel_win;
212 static guint font_sel_conn_id;
213 static GtkWidget *quote_color_win;
214 static GtkWidget *color_dialog;
216 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
217 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
219 static void prefs_common_default_signkey_set_data_from_optmenu
221 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
223 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
224 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
225 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
226 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
229 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
230 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
235 parameter name, default value, pointer to the prefs variable, data type,
236 pointer to the widget pointer,
237 pointer to the function for data setting,
238 pointer to the function for widget setting
241 static PrefParam param[] = {
243 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
244 &receive.checkbtn_incext,
245 prefs_set_data_from_toggle, prefs_set_toggle},
246 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
247 &receive.entry_incext,
248 prefs_set_data_from_entry, prefs_set_entry},
250 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
251 &receive.checkbtn_local,
252 prefs_set_data_from_toggle, prefs_set_toggle},
253 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
254 &receive.checkbtn_filter_on_inc,
255 prefs_set_data_from_toggle, prefs_set_toggle},
256 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
257 &receive.entry_spool,
258 prefs_set_data_from_entry, prefs_set_entry},
260 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
261 &receive.checkbtn_autochk,
262 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
264 &receive.spinbtn_autochk,
265 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
266 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
267 &receive.checkbtn_chkonstartup,
268 prefs_set_data_from_toggle, prefs_set_toggle},
269 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
270 &receive.checkbtn_noerrorpanel,
271 prefs_set_data_from_toggle, prefs_set_toggle},
272 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
273 P_BOOL, &receive.checkbtn_scan_after_inc,
274 prefs_set_data_from_toggle, prefs_set_toggle},
275 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
276 &receive.spinbtn_maxarticle,
277 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
280 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
281 &send.checkbtn_extsend,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
284 &prefs_common.extsend_cmd, P_STRING,
285 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
286 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
287 &send.checkbtn_savemsg,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
290 &send.checkbtn_queuemsg,
291 prefs_set_data_from_toggle, prefs_set_toggle},
293 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
294 &send.optmenu_charset,
295 prefs_common_charset_set_data_from_optmenu,
296 prefs_common_charset_set_optmenu},
299 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
300 &compose.checkbtn_quote,
301 prefs_set_data_from_toggle, prefs_set_toggle},
302 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
303 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
304 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
306 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
307 prefs_set_data_from_text, prefs_set_text},
308 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
309 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
310 {"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",
311 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
312 prefs_set_data_from_text, prefs_set_text},
314 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
315 &compose.checkbtn_autosig,
316 prefs_set_data_from_toggle, prefs_set_toggle},
317 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
318 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
320 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
321 &compose.checkbtn_autoextedit,
322 prefs_set_data_from_toggle, prefs_set_toggle},
323 {"reply_account_autoselect", "TRUE",
324 &prefs_common.reply_account_autosel, P_BOOL,
325 &compose.checkbtn_reply_account_autosel,
326 prefs_set_data_from_toggle, prefs_set_toggle},
327 {"forward_account_autoselect", "TRUE",
328 &prefs_common.forward_account_autosel, P_BOOL,
329 &compose.checkbtn_forward_account_autosel,
330 prefs_set_data_from_toggle, prefs_set_toggle},
331 {"reedit_account_autoselect", "TRUE",
332 &prefs_common.reedit_account_autosel, P_BOOL,
333 &compose.checkbtn_reedit_account_autosel,
334 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
337 &compose.spinbtn_linewrap,
338 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
339 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
340 &compose.checkbtn_wrapquote,
341 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"linewrap_before_sending", "FALSE",
343 &prefs_common.linewrap_at_send, P_BOOL,
344 &compose.checkbtn_wrapatsend,
345 prefs_set_data_from_toggle, prefs_set_toggle},
346 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
347 P_BOOL, &compose.checkbtn_forward_as_attachment,
348 prefs_set_data_from_toggle, prefs_set_toggle},
349 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
350 P_BOOL, &compose.checkbtn_smart_wrapping,
351 prefs_set_data_from_toggle, prefs_set_toggle},
353 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
354 P_BOOL, &compose.checkbtn_enable_pspell,
355 prefs_set_data_from_toggle, prefs_set_toggle},
356 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
357 P_STRING, &compose.entry_pspell_path,
358 prefs_set_data_from_entry, prefs_set_entry},
359 {"dictionary", "", &prefs_common.dictionary,
360 P_STRING, &compose.optmenu_dictionary,
361 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
363 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
367 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
369 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
370 &prefs_common.textfont, P_STRING,
371 &display.entry_textfont,
372 prefs_set_data_from_entry, prefs_set_entry},
373 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
374 &prefs_common.smallfont, P_STRING,
375 &display.entry_smallfont,
376 prefs_set_data_from_entry, prefs_set_entry},
377 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
378 &prefs_common.boldfont, P_STRING,
379 &display.entry_boldfont,
380 prefs_set_data_from_entry, prefs_set_entry},
381 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
382 &prefs_common.normalfont, P_STRING,
383 &display.entry_normalfont,
384 prefs_set_data_from_entry, prefs_set_entry},
387 {"display_folder_unread_num", "TRUE",
388 &prefs_common.display_folder_unread, P_BOOL,
389 &display.chkbtn_folder_unread,
390 prefs_set_data_from_toggle, prefs_set_toggle},
392 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
393 &display.chkbtn_transhdr,
394 prefs_set_data_from_toggle, prefs_set_toggle},
396 /* Display: Summary View */
397 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
398 &display.chkbtn_swapfrom,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
401 &display.chkbtn_hscrollbar,
402 prefs_set_data_from_toggle, prefs_set_toggle},
403 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
404 &display.chkbtn_useaddrbook,
405 prefs_set_data_from_toggle, prefs_set_toggle},
406 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
407 P_STRING, &display.entry_datefmt,
408 prefs_set_data_from_entry, prefs_set_entry},
409 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
410 &display.chkbtn_expand_thread,
411 prefs_set_data_from_toggle, prefs_set_toggle},
412 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
413 &display.chkbtn_bold_unread,
414 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
419 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
421 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
424 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
426 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
428 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
430 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
432 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
434 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
436 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
438 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
440 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
444 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
446 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
448 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
450 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
452 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
454 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
456 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
458 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
460 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
462 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
464 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
466 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
468 {"summary_col_score", "40", &prefs_common.summary_col_score,
469 P_INT, NULL, NULL, NULL},
470 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
472 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
474 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
476 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
477 P_INT, NULL, NULL, NULL},
478 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
480 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
482 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
484 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
486 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
488 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
490 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
492 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
494 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
496 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
498 {"compose_width", "600", &prefs_common.compose_width, P_INT,
500 {"compose_height", "560", &prefs_common.compose_height, P_INT,
504 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
505 &message.chkbtn_enablecol,
506 prefs_set_data_from_toggle, prefs_set_toggle},
508 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
510 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
512 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
514 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
516 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
518 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
520 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
521 P_BOOL, NULL, NULL, NULL},
523 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
524 &message.chkbtn_mbalnum,
525 prefs_set_data_from_toggle, prefs_set_toggle},
526 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
527 P_BOOL, &message.chkbtn_disphdrpane,
528 prefs_set_data_from_toggle, prefs_set_toggle},
529 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
530 &message.chkbtn_disphdr,
531 prefs_set_data_from_toggle, prefs_set_toggle},
532 {"line_space", "2", &prefs_common.line_space, P_INT,
533 &message.spinbtn_linespc,
534 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
535 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
536 &message.chkbtn_headspc,
537 prefs_set_data_from_toggle, prefs_set_toggle},
539 {"enable_smooth_scroll", "FALSE",
540 &prefs_common.enable_smooth_scroll, P_BOOL,
541 &message.chkbtn_smoothscroll,
542 prefs_set_data_from_toggle, prefs_set_toggle},
543 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
544 &message.spinbtn_scrollstep,
545 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
546 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
547 &message.chkbtn_halfpage,
548 prefs_set_data_from_toggle, prefs_set_toggle},
550 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
554 {"mime_image_viewer", "display '%s'",
555 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
556 {"mime_audio_player", "play '%s'",
557 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
561 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
562 &privacy.checkbtn_default_encrypt,
563 prefs_set_data_from_toggle, prefs_set_toggle},
564 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
565 &privacy.checkbtn_default_sign,
566 prefs_set_data_from_toggle, prefs_set_toggle},
567 {"auto_check_signatures", "TRUE",
568 &prefs_common.auto_check_signatures, P_BOOL,
569 &privacy.checkbtn_auto_check_signatures,
570 prefs_set_data_from_toggle, prefs_set_toggle},
571 {"gpg_signature_popup", "FALSE",
572 &prefs_common.gpg_signature_popup, P_BOOL,
573 &privacy.checkbtn_gpg_signature_popup,
574 prefs_set_data_from_toggle, prefs_set_toggle},
576 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
577 &privacy.checkbtn_passphrase_grab,
578 prefs_set_data_from_toggle, prefs_set_toggle},
579 #endif /* __MINGW32__ */
580 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
581 &privacy.checkbtn_gpg_warning,
582 prefs_set_data_from_toggle, prefs_set_toggle},
583 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
584 &privacy.optmenu_default_signkey,
585 prefs_common_default_signkey_set_data_from_optmenu,
586 prefs_common_default_signkey_set_optmenu},
587 #endif /* USE_GPGME */
590 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
592 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
595 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
596 NULL, NULL, NULL}, */
598 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
599 P_BOOL, &interface.checkbtn_openunread,
600 prefs_set_data_from_toggle, prefs_set_toggle},
601 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
602 P_BOOL, &interface.checkbtn_openinbox,
603 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
605 &interface.checkbtn_immedexec,
606 prefs_set_data_from_toggle, prefs_set_toggle},
607 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
608 &interface.optmenu_recvdialog,
609 prefs_common_recv_dialog_set_data_from_optmenu,
610 prefs_common_recv_dialog_set_optmenu},
611 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
612 &interface.optmenu_nextunreadmsgdialog,
613 prefs_nextunreadmsgdialog_set_data_from_optmenu,
614 prefs_nextunreadmsgdialog_set_optmenu},
616 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
617 P_BOOL, &interface.checkbtn_addaddrbyclick,
618 prefs_set_data_from_toggle, prefs_set_toggle},
619 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
620 &interface.checkbtn_confonexit,
621 prefs_set_data_from_toggle, prefs_set_toggle},
622 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
623 &send.checkbtn_returnreceipt,
624 prefs_set_data_from_toggle, prefs_set_toggle},
625 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
626 &interface.checkbtn_cleanonexit,
627 prefs_set_data_from_toggle, prefs_set_toggle},
628 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
629 &interface.checkbtn_askonclean,
630 prefs_set_data_from_toggle, prefs_set_toggle},
631 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
632 P_BOOL, &interface.checkbtn_warnqueued,
633 prefs_set_data_from_toggle, prefs_set_toggle},
636 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
637 &prefs_common.uri_cmd, P_STRING,
638 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
639 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
640 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
641 {"ext_editor_command", "gedit %s",
642 &prefs_common.ext_editor_cmd, P_STRING,
643 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
645 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
647 {"important_score", "1", &prefs_common.important_score, P_INT,
650 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
653 /* widget creating functions */
654 static void prefs_common_create (void);
655 static void prefs_receive_create (void);
656 static void prefs_send_create (void);
657 static void prefs_compose_create (void);
658 static void prefs_display_create (void);
659 static void prefs_message_create (void);
661 static void prefs_privacy_create (void);
663 static void prefs_interface_create (void);
664 static void prefs_other_create (void);
666 static void date_format_ok_btn_clicked (GtkButton *button,
668 static void date_format_cancel_btn_clicked (GtkButton *button,
670 static void date_format_key_pressed (GtkWidget *keywidget,
673 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
676 static void date_format_entry_on_change (GtkEditable *editable,
678 static void date_format_select_row (GtkWidget *date_format_list,
681 GdkEventButton *event,
682 GtkWidget *date_format);
683 static GtkWidget *date_format_create (GtkButton *button,
686 static void prefs_quote_description (void);
687 static void prefs_quote_description_create (void);
688 static void prefs_quote_colors_dialog (void);
689 static void prefs_quote_colors_dialog_create (void);
690 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
693 static void quote_color_set_dialog (GtkWidget *widget,
695 static void quote_colors_set_dialog_ok (GtkWidget *widget,
697 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
699 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
702 static void set_button_bg_color (GtkWidget *widget,
704 static void prefs_enable_message_color_toggled (void);
705 static void prefs_recycle_colors_toggled (GtkWidget *widget);
707 /* functions for setting items of SummaryView */
708 static void prefs_summary_display_item_dialog_create
709 (gboolean *cancelled);
710 static void display_item_ok (GtkWidget *widget,
711 gboolean *cancelled);
712 static void display_item_cancel (GtkWidget *widget,
713 gboolean *cancelled);
714 static gint display_item_delete_event (GtkWidget *widget,
716 gboolean *cancelled);
717 static void display_item_key_pressed (GtkWidget *widget,
719 gboolean *cancelled);
721 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
723 static void prefs_font_selection_key_pressed (GtkWidget *widget,
726 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
728 static gint prefs_common_deleted (GtkWidget *widget,
731 static void prefs_common_key_pressed (GtkWidget *widget,
734 static void prefs_common_ok (void);
735 static void prefs_common_apply (void);
736 static void prefs_common_cancel (void);
738 static void compose_prefs_fmt_open(void);
739 static void compose_prefs_fmt_create(void);
741 void prefs_common_read_config(void)
743 prefs_read_config(param, "Common", COMMON_RC);
746 void prefs_common_save_config(void)
748 prefs_save_config(param, "Common", COMMON_RC);
751 void prefs_common_open(void)
753 if (prefs_rc_is_readonly(COMMON_RC))
758 if (!dialog.window) {
759 prefs_common_create();
762 manage_window_set_transient(GTK_WINDOW(dialog.window));
763 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
764 gtk_widget_grab_focus(dialog.ok_btn);
766 prefs_set_dialog(param);
768 gtk_widget_show(dialog.window);
771 static void prefs_common_create(void)
775 debug_print(_("Creating common preferences window...\n"));
777 prefs_dialog_create(&dialog);
778 gtk_window_set_title (GTK_WINDOW(dialog.window),
779 _("Common Preferences"));
780 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
781 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
782 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
783 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
784 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
785 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
786 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
787 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
788 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
789 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
790 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
791 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
792 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
793 GTK_SIGNAL_FUNC(prefs_common_cancel),
794 GTK_OBJECT(dialog.window));
796 /* create all widgets on notebook */
797 prefs_receive_create();
798 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
800 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
801 prefs_compose_create();
802 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
803 prefs_display_create();
804 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
805 prefs_message_create();
806 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
808 prefs_privacy_create();
809 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
811 prefs_interface_create();
812 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
813 prefs_other_create();
814 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
816 compose_prefs_fmt_create();
818 gtk_widget_show_all(dialog.window);
821 static void prefs_receive_create(void)
825 GtkWidget *frame_incext;
826 GtkWidget *checkbtn_incext;
828 GtkWidget *label_incext;
829 GtkWidget *entry_incext;
830 /* GtkWidget *button_incext; */
832 GtkWidget *frame_spool;
833 GtkWidget *checkbtn_local;
834 GtkWidget *checkbtn_filter_on_inc;
835 GtkWidget *label_spool;
836 GtkWidget *entry_spool;
838 GtkWidget *hbox_autochk;
839 GtkWidget *checkbtn_autochk;
840 GtkWidget *label_autochk1;
841 GtkObject *spinbtn_autochk_adj;
842 GtkWidget *spinbtn_autochk;
843 GtkWidget *label_autochk2;
844 GtkWidget *checkbtn_chkonstartup;
845 GtkWidget *checkbtn_noerrorpanel;
846 GtkWidget *checkbtn_scan_after_inc;
849 GtkWidget *frame_news;
850 GtkWidget *label_maxarticle;
851 GtkWidget *spinbtn_maxarticle;
852 GtkObject *spinbtn_maxarticle_adj;
854 vbox1 = gtk_vbox_new (FALSE, VSPACING);
855 gtk_widget_show (vbox1);
856 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
857 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
859 PACK_FRAME(vbox1, frame_incext, _("External program"));
861 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
862 gtk_widget_show (vbox2);
863 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
864 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
866 /* Use of external incorporation program */
867 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
868 _("Use external program for incorporation"));
870 hbox = gtk_hbox_new (FALSE, 8);
871 gtk_widget_show (hbox);
872 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
873 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
875 label_incext = gtk_label_new (_("Program path"));
876 gtk_widget_show (label_incext);
877 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
879 entry_incext = gtk_entry_new ();
880 gtk_widget_show (entry_incext);
881 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
883 button_incext = gtk_button_new_with_label ("... ");
884 gtk_widget_show (button_incext);
885 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
887 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
889 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
890 gtk_widget_show (vbox2);
891 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
892 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
894 hbox = gtk_hbox_new (FALSE, 32);
895 gtk_widget_show (hbox);
896 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
898 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
899 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
900 _("Filter on incorporation"));
901 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
903 hbox = gtk_hbox_new (FALSE, 8);
904 gtk_widget_show (hbox);
905 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
906 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
908 label_spool = gtk_label_new (_("Spool directory"));
909 gtk_widget_show (label_spool);
910 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
912 entry_spool = gtk_entry_new ();
913 gtk_widget_show (entry_spool);
914 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
916 vbox2 = gtk_vbox_new (FALSE, 0);
917 gtk_widget_show (vbox2);
918 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
921 hbox_autochk = gtk_hbox_new (FALSE, 8);
922 gtk_widget_show (hbox_autochk);
923 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
925 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
926 _("Auto-check new mail"));
928 label_autochk1 = gtk_label_new (_("each"));
929 gtk_widget_show (label_autochk1);
930 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
932 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
933 spinbtn_autochk = gtk_spin_button_new
934 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
935 gtk_widget_show (spinbtn_autochk);
936 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
937 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
938 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
940 label_autochk2 = gtk_label_new (_("minute(s)"));
941 gtk_widget_show (label_autochk2);
942 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
944 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
945 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
946 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
948 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
949 _("Check new mail on startup"));
951 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
952 _("No error popup on receive error"));
953 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
954 _("Update all local folders after incorporation"));
957 PACK_FRAME(vbox1, frame_news, _("News"));
959 hbox = gtk_hbox_new (FALSE, 8);
960 gtk_widget_show (hbox);
961 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
962 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
964 label_maxarticle = gtk_label_new
965 (_("Maximum article number to download\n"
966 "(unlimited if 0 is specified)"));
967 gtk_widget_show (label_maxarticle);
968 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
969 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
971 spinbtn_maxarticle_adj =
972 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
973 spinbtn_maxarticle = gtk_spin_button_new
974 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
975 gtk_widget_show (spinbtn_maxarticle);
976 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
978 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
979 gtk_spin_button_set_numeric
980 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
982 receive.checkbtn_incext = checkbtn_incext;
983 receive.entry_incext = entry_incext;
984 /* receive.button_incext = button_incext; */
986 receive.checkbtn_local = checkbtn_local;
987 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
988 receive.entry_spool = entry_spool;
990 receive.checkbtn_autochk = checkbtn_autochk;
991 receive.spinbtn_autochk = spinbtn_autochk;
992 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
994 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
995 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
996 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
999 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1000 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1003 static void prefs_send_create(void)
1007 GtkWidget *frame_extsend;
1008 GtkWidget *vbox_extsend;
1009 GtkWidget *checkbtn_extsend;
1011 GtkWidget *label_extsend;
1012 GtkWidget *entry_extsend;
1013 /* GtkWidget *button_extsend; */
1014 GtkWidget *checkbtn_savemsg;
1015 GtkWidget *checkbtn_queuemsg;
1016 GtkWidget *label_outcharset;
1018 GtkWidget *optmenu_menu;
1019 GtkWidget *menuitem;
1020 GtkWidget *checkbtn_returnreceipt;
1022 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1023 gtk_widget_show (vbox1);
1024 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1025 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1027 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1029 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1030 gtk_widget_show (vbox_extsend);
1031 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1032 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1034 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1035 _("Use external program for sending"));
1037 hbox1 = gtk_hbox_new (FALSE, 8);
1038 gtk_widget_show (hbox1);
1039 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1040 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1042 label_extsend = gtk_label_new (_("Program path"));
1043 gtk_widget_show (label_extsend);
1044 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1046 entry_extsend = gtk_entry_new ();
1047 gtk_widget_show (entry_extsend);
1048 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1051 button_extsend = gtk_button_new_with_label ("... ");
1052 gtk_widget_show (button_extsend);
1053 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1056 vbox2 = gtk_vbox_new (FALSE, 0);
1057 gtk_widget_show (vbox2);
1058 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1060 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1061 _("Save sent messages to outbox"));
1062 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1063 _("Queue messages that fail to send"));
1064 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1065 _("Send return receipt on request"));
1067 hbox1 = gtk_hbox_new (FALSE, 8);
1068 gtk_widget_show (hbox1);
1069 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1071 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1072 gtk_widget_show (label_outcharset);
1073 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1075 optmenu = gtk_option_menu_new ();
1076 gtk_widget_show (optmenu);
1077 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1079 optmenu_menu = gtk_menu_new ();
1081 #define SET_MENUITEM(str, charset) \
1083 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1086 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1087 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1089 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1091 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1092 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1093 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1094 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1095 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1096 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1098 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1100 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1102 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1103 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1105 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1107 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1108 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1110 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1111 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1113 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1114 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1116 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1118 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1120 send.checkbtn_extsend = checkbtn_extsend;
1121 send.entry_extsend = entry_extsend;
1122 /* send.button_extsend = button_extsend; */
1124 send.checkbtn_savemsg = checkbtn_savemsg;
1125 send.checkbtn_queuemsg = checkbtn_queuemsg;
1126 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1128 send.optmenu_charset = optmenu;
1132 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1137 g_return_if_fail(param);
1138 g_return_if_fail(param->data);
1139 g_return_if_fail(param->widget);
1140 g_return_if_fail(*(param->widget));
1142 dict_name = gtkpspell_get_dictionary_menu_active_item
1143 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1144 str = *((gchar **) param->data);
1147 *((gchar **) param->data) = dict_name;
1150 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1153 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1155 GtkWidget *menuitem;
1159 g_return_if_fail(optmenu != NULL);
1160 g_return_if_fail(pparam->data != NULL);
1162 if (*(gchar **) pparam->data) {
1163 menu = gtk_option_menu_get_menu(optmenu);
1164 for (cur = GTK_MENU_SHELL(menu)->children;
1165 cur != NULL; cur = cur->next) {
1166 menuitem = GTK_WIDGET(cur->data);
1167 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1168 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1169 gtk_option_menu_set_history(optmenu, n);
1176 gtk_option_menu_set_history(optmenu, 0);
1177 prefs_dictionary_set_data_from_optmenu(pparam);
1180 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1186 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1187 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1188 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1189 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1192 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1195 gchar *file_path, *tmp;
1196 GtkWidget *new_menu;
1198 file_path = filesel_select_file(_("Select dictionaries location"),
1199 prefs_common.pspell_path);
1200 if (file_path == NULL) {
1204 tmp=g_dirname(file_path);
1206 if (prefs_common.pspell_path)
1207 g_free(prefs_common.pspell_path);
1208 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1210 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1211 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1214 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1215 /* select first one */
1216 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1218 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1219 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1227 static void prefs_compose_create(void)
1234 GtkWidget *frame_quote;
1235 GtkWidget *vbox_quote;
1236 GtkWidget *checkbtn_quote;
1238 GtkWidget *label_quotemark;
1239 GtkWidget *entry_quotemark;
1241 GtkWidget *label_quotefmt;
1242 GtkWidget *btn_quotedesc;
1243 GtkWidget *scrolledwin_quotefmt;
1244 GtkWidget *text_quotefmt;
1249 GtkWidget *btn_quotefmt;
1251 GtkWidget *frame_sig;
1252 GtkWidget *vbox_sig;
1253 GtkWidget *checkbtn_autosig;
1254 GtkWidget *label_sigsep;
1255 GtkWidget *entry_sigsep;
1257 GtkWidget *frame_autosel;
1258 GtkWidget *hbox_autosel;
1259 GtkWidget *vbox_autosel;
1260 GtkWidget *checkbtn_reply_account_autosel;
1261 GtkWidget *checkbtn_forward_account_autosel;
1262 GtkWidget *checkbtn_reedit_account_autosel;
1264 GtkWidget *checkbtn_autoextedit;
1266 GtkWidget *vbox_linewrap;
1271 GtkWidget *label_linewrap;
1272 GtkObject *spinbtn_linewrap_adj;
1273 GtkWidget *spinbtn_linewrap;
1274 GtkWidget *checkbtn_wrapquote;
1275 GtkWidget *checkbtn_wrapatsend;
1277 GtkWidget *checkbtn_forward_as_attachment;
1278 GtkWidget *checkbtn_smart_wrapping;
1281 GtkWidget *frame_spell;
1282 GtkWidget *hbox_spell;
1283 GtkWidget *vbox_spell;
1284 GtkWidget *hbox_pspell_path;
1285 GtkWidget *checkbtn_enable_pspell;
1286 GtkWidget *label_pspell_path;
1287 GtkWidget *entry_pspell_path;
1288 GtkWidget *btn_pspell_path;
1289 GtkWidget *hbox_dictionary;
1290 GtkWidget *label_dictionary;
1291 GtkWidget *optmenu_dictionary;
1293 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1294 gtk_widget_show (vbox1);
1295 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1296 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1299 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1301 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1302 gtk_widget_show (vbox_quote);
1303 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1304 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1306 hbox1 = gtk_hbox_new (FALSE, 32);
1307 gtk_widget_show (hbox1);
1308 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1310 hbox2 = gtk_hbox_new (FALSE, 8);
1311 gtk_widget_show (hbox2);
1312 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1314 label_quotemark = gtk_label_new (_("Quotation mark"));
1315 gtk_widget_show (label_quotemark);
1316 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1318 entry_quotemark = gtk_entry_new ();
1319 gtk_widget_show (entry_quotemark);
1320 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1321 gtk_widget_set_usize (entry_quotemark, 64, -1);
1323 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1324 _("Quote message when replying"));
1326 hbox2 = gtk_hbox_new (FALSE, 0);
1327 gtk_widget_show (hbox2);
1328 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1330 label_quotefmt = gtk_label_new (_("Quotation format:"));
1331 gtk_widget_show (label_quotefmt);
1332 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1335 gtk_button_new_with_label (_(" Description of symbols "));
1337 gtk_widget_show (btn_quotedesc);
1338 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1339 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1340 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1343 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1344 gtk_widget_show (scrolledwin_quotefmt);
1345 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1346 gtk_scrolled_window_set_policy
1347 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1348 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1350 text_quotefmt = gtk_text_new (NULL, NULL);
1351 gtk_widget_show (text_quotefmt);
1352 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1353 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1354 gtk_widget_set_usize(text_quotefmt, -1, 60);
1357 hbox1 = gtk_hbox_new (FALSE, 32);
1358 gtk_widget_show (hbox1);
1359 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1361 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1362 gtk_widget_show (btn_quotefmt);
1363 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1364 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1365 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1367 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1369 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1370 gtk_widget_show (vbox_sig);
1371 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1372 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1374 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1375 _("Insert signature automatically"));
1377 hbox1 = gtk_hbox_new (FALSE, 8);
1378 gtk_widget_show (hbox1);
1379 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1380 label_sigsep = gtk_label_new (_("Signature separator"));
1381 gtk_widget_show (label_sigsep);
1382 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1384 entry_sigsep = gtk_entry_new ();
1385 gtk_widget_show (entry_sigsep);
1386 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1388 gtk_widget_set_usize (entry_sigsep, 64, -1);
1390 /* Automatic (Smart) Account Selection */
1391 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1393 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1394 gtk_widget_show (hbox_autosel);
1395 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1396 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1398 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1399 _("when replying"));
1400 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1401 _("when forwarding"));
1402 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1403 _("when re-editing"));
1405 vbox2 = gtk_vbox_new (FALSE, 0);
1406 gtk_widget_show (vbox2);
1407 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1409 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1410 _("Automatically launch the external editor"));
1412 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1415 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1416 gtk_widget_show (vbox_linewrap);
1417 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1419 hbox3 = gtk_hbox_new (FALSE, 8);
1420 gtk_widget_show (hbox3);
1421 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1424 label_linewrap = gtk_label_new (_("Wrap messages at"));
1425 gtk_widget_show (label_linewrap);
1426 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1428 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1429 spinbtn_linewrap = gtk_spin_button_new
1430 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1431 gtk_widget_show (spinbtn_linewrap);
1432 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1433 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1434 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1436 label_linewrap = gtk_label_new (_("characters"));
1437 gtk_widget_show (label_linewrap);
1438 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1440 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1442 hbox4 = gtk_hbox_new (FALSE, 32);
1443 gtk_widget_show (hbox4);
1444 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1446 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1448 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1450 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1451 _("Forward as attachment"));
1453 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1454 _("Smart wrapping (EXPERIMENTAL)"));
1457 /* spell checker defaults */
1458 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1459 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1460 gtk_widget_show (vbox_spell);
1461 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1462 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1464 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1465 _("Enable spell checker (EXPERIMENTAL)"));
1467 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1468 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1471 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1472 gtk_widget_show(hbox_pspell_path);
1473 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1475 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1476 gtk_widget_show(label_pspell_path);
1477 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1479 entry_pspell_path = gtk_entry_new();
1480 gtk_widget_show(entry_pspell_path);
1481 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1482 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1483 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1485 btn_pspell_path = gtk_button_new_with_label(_("..."));
1486 gtk_widget_show(btn_pspell_path);
1487 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1488 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1490 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1491 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1494 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1495 gtk_widget_show(hbox_dictionary);
1496 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1498 label_dictionary = gtk_label_new(_("Dictionary"));
1499 gtk_widget_show(label_dictionary);
1500 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1502 optmenu_dictionary = gtk_option_menu_new();
1503 gtk_widget_show(optmenu_dictionary);
1504 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1505 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1506 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1507 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1511 compose.checkbtn_quote = checkbtn_quote;
1512 compose.entry_quotemark = entry_quotemark;
1513 compose.text_quotefmt = text_quotefmt;
1515 compose.checkbtn_autosig = checkbtn_autosig;
1516 compose.entry_sigsep = entry_sigsep;
1518 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1519 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1520 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1521 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1523 compose.spinbtn_linewrap = spinbtn_linewrap;
1524 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1525 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1526 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1528 compose.checkbtn_forward_as_attachment =
1529 checkbtn_forward_as_attachment;
1530 compose.checkbtn_smart_wrapping =
1531 checkbtn_smart_wrapping;
1534 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1535 compose.entry_pspell_path = entry_pspell_path;
1536 compose.btn_pspell_path = btn_pspell_path;
1537 compose.optmenu_dictionary = optmenu_dictionary;
1541 static void prefs_display_create(void)
1544 GtkWidget *frame_font;
1546 GtkWidget *label_textfont;
1547 GtkWidget *entry_textfont;
1548 GtkWidget *button_textfont;
1549 GtkWidget *chkbtn_folder_unread;
1550 GtkWidget *chkbtn_transhdr;
1551 GtkWidget *frame_summary;
1553 GtkWidget *chkbtn_swapfrom;
1554 GtkWidget *chkbtn_hscrollbar;
1555 GtkWidget *chkbtn_useaddrbook;
1556 GtkWidget *chkbtn_expand_thread;
1557 GtkWidget *chkbtn_bold_unread;
1560 GtkWidget *label_datefmt;
1561 GtkWidget *button_datefmt;
1562 GtkWidget *entry_datefmt;
1563 GtkWidget *button_dispitem;
1564 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1566 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1567 gtk_widget_show (vbox1);
1568 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1569 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1571 PACK_FRAME(vbox1, frame_font, _("Font"));
1573 table1 = gtk_table_new (4, 3, FALSE);
1575 gtk_widget_show (table1);
1576 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1577 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1578 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1579 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1581 label_textfont = gtk_label_new (_("Text"));
1582 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1583 gtk_widget_show (label_textfont);
1584 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1585 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1587 entry_textfont = gtk_entry_new ();
1588 gtk_widget_show (entry_textfont);
1589 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1590 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1592 button_textfont = gtk_button_new_with_label ("... ");
1594 gtk_widget_show (button_textfont);
1595 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1597 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1598 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1600 tmplabel = gtk_label_new (_("Small"));
1601 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1602 gtk_widget_show (tmplabel);
1603 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1604 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1606 tmpentry = gtk_entry_new ();
1607 gtk_widget_show (tmpentry);
1608 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1609 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1611 tmpbutton = gtk_button_new_with_label (" ... ");
1612 gtk_widget_show (tmpbutton);
1613 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1615 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1616 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1617 display.entry_smallfont = tmpentry;
1619 tmplabel = gtk_label_new (_("Normal"));
1620 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1621 gtk_widget_show (tmplabel);
1622 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1623 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1625 tmpentry = gtk_entry_new ();
1626 gtk_widget_show (tmpentry);
1627 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1628 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1630 tmpbutton = gtk_button_new_with_label (" ... ");
1631 gtk_widget_show (tmpbutton);
1632 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1634 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1635 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1636 display.entry_normalfont = tmpentry;
1638 tmplabel = gtk_label_new (_("Bold"));
1639 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1640 gtk_widget_show (tmplabel);
1641 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1642 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1644 tmpentry = gtk_entry_new ();
1645 gtk_widget_show (tmpentry);
1646 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1647 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1649 tmpbutton = gtk_button_new_with_label (" ... ");
1650 gtk_widget_show (tmpbutton);
1651 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1653 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1654 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1655 display.entry_boldfont = tmpentry;
1657 vbox2 = gtk_vbox_new (FALSE, 0);
1658 gtk_widget_show (vbox2);
1659 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1662 (vbox2, chkbtn_transhdr,
1663 _("Translate header name (such as `From:', `Subject:')"));
1665 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1666 _("Display unread number next to folder name"));
1668 /* ---- Summary ---- */
1670 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1672 vbox2 = gtk_vbox_new (FALSE, 0);
1673 gtk_widget_show (vbox2);
1674 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1675 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1678 (vbox2, chkbtn_swapfrom,
1679 _("Display recipient on `From' column if sender is yourself"));
1681 (vbox2, chkbtn_useaddrbook,
1682 _("Display sender using address book"));
1684 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1686 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1688 (vbox2, chkbtn_bold_unread,
1689 _("Display unread messages with bold font"));
1691 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1693 hbox1 = gtk_hbox_new (FALSE, 8);
1694 gtk_widget_show (hbox1);
1695 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1697 label_datefmt = gtk_label_new (_("Date format"));
1698 gtk_widget_show (label_datefmt);
1699 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1701 entry_datefmt = gtk_entry_new ();
1702 gtk_widget_show (entry_datefmt);
1703 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1705 button_datefmt = gtk_button_new_with_label ("... ");
1707 gtk_widget_show (button_datefmt);
1708 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1709 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1710 GTK_SIGNAL_FUNC (date_format_create), NULL);
1712 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1714 hbox1 = gtk_hbox_new (FALSE, 8);
1715 gtk_widget_show (hbox1);
1716 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1718 button_dispitem = gtk_button_new_with_label
1719 (_(" Set display item of summary... "));
1720 gtk_widget_show (button_dispitem);
1721 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1722 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1723 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1726 display.entry_textfont = entry_textfont;
1727 display.button_textfont = button_textfont;
1729 display.chkbtn_folder_unread = chkbtn_folder_unread;
1730 display.chkbtn_transhdr = chkbtn_transhdr;
1732 display.chkbtn_swapfrom = chkbtn_swapfrom;
1733 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1734 display.chkbtn_expand_thread = chkbtn_expand_thread;
1735 display.chkbtn_bold_unread = chkbtn_bold_unread;
1736 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1737 display.entry_datefmt = entry_datefmt;
1740 static void prefs_message_create(void)
1746 GtkWidget *chkbtn_enablecol;
1747 GtkWidget *button_edit_col;
1748 GtkWidget *chkbtn_mbalnum;
1749 GtkWidget *chkbtn_disphdrpane;
1750 GtkWidget *chkbtn_disphdr;
1751 GtkWidget *button_edit_disphdr;
1752 GtkWidget *hbox_linespc;
1753 GtkWidget *label_linespc;
1754 GtkObject *spinbtn_linespc_adj;
1755 GtkWidget *spinbtn_linespc;
1756 GtkWidget *chkbtn_headspc;
1758 GtkWidget *frame_scr;
1759 GtkWidget *vbox_scr;
1760 GtkWidget *chkbtn_smoothscroll;
1761 GtkWidget *hbox_scr;
1762 GtkWidget *label_scr;
1763 GtkObject *spinbtn_scrollstep_adj;
1764 GtkWidget *spinbtn_scrollstep;
1765 GtkWidget *chkbtn_halfpage;
1767 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1768 gtk_widget_show (vbox1);
1769 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1770 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1772 hbox1 = gtk_hbox_new (FALSE, 8);
1773 gtk_widget_show (hbox1);
1774 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1776 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1777 _("Enable coloration of message"));
1778 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1779 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1782 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1783 gtk_widget_show (button_edit_col);
1784 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1785 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1786 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1788 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1790 vbox2 = gtk_vbox_new (FALSE, 0);
1791 gtk_widget_show (vbox2);
1792 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1795 (vbox2, chkbtn_mbalnum,
1796 _("Display 2-byte alphabet and numeric with 1-byte character"));
1797 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1798 _("Display header pane above message view"));
1800 hbox1 = gtk_hbox_new (FALSE, 8);
1801 gtk_widget_show (hbox1);
1802 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1804 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1805 _("Display short headers on message view"));
1807 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1808 gtk_widget_show (button_edit_disphdr);
1809 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1811 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1812 GTK_SIGNAL_FUNC (prefs_display_header_open),
1815 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1817 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1819 hbox1 = gtk_hbox_new (FALSE, 32);
1820 gtk_widget_show (hbox1);
1821 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1823 hbox_linespc = gtk_hbox_new (FALSE, 8);
1824 gtk_widget_show (hbox1);
1825 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1827 label_linespc = gtk_label_new (_("Line space"));
1828 gtk_widget_show (label_linespc);
1829 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1832 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1833 spinbtn_linespc = gtk_spin_button_new
1834 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1835 gtk_widget_show (spinbtn_linespc);
1836 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1838 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1839 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1841 label_linespc = gtk_label_new (_("pixel(s)"));
1842 gtk_widget_show (label_linespc);
1843 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1846 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1848 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1850 vbox_scr = gtk_vbox_new (FALSE, 0);
1851 gtk_widget_show (vbox_scr);
1852 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1853 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1855 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1857 hbox1 = gtk_hbox_new (FALSE, 32);
1858 gtk_widget_show (hbox1);
1859 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1861 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1863 hbox_scr = gtk_hbox_new (FALSE, 8);
1864 gtk_widget_show (hbox_scr);
1865 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1867 label_scr = gtk_label_new (_("Step"));
1868 gtk_widget_show (label_scr);
1869 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1871 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1872 spinbtn_scrollstep = gtk_spin_button_new
1873 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1874 gtk_widget_show (spinbtn_scrollstep);
1875 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1877 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1878 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1881 label_scr = gtk_label_new (_("pixel(s)"));
1882 gtk_widget_show (label_scr);
1883 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1885 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1887 message.chkbtn_enablecol = chkbtn_enablecol;
1888 message.button_edit_col = button_edit_col;
1889 message.chkbtn_mbalnum = chkbtn_mbalnum;
1890 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1891 message.chkbtn_disphdr = chkbtn_disphdr;
1892 message.spinbtn_linespc = spinbtn_linespc;
1893 message.chkbtn_headspc = chkbtn_headspc;
1895 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1896 message.spinbtn_scrollstep = spinbtn_scrollstep;
1897 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1898 message.chkbtn_halfpage = chkbtn_halfpage;
1902 static void prefs_privacy_create(void)
1907 GtkWidget *checkbtn_default_encrypt;
1908 GtkWidget *checkbtn_default_sign;
1909 GtkWidget *checkbtn_auto_check_signatures;
1910 GtkWidget *checkbtn_gpg_signature_popup;
1911 GtkWidget *checkbtn_passphrase_grab;
1912 GtkWidget *checkbtn_gpg_warning;
1914 GtkWidget *menuitem;
1916 GtkWidget *optmenu_menu;
1918 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1919 gtk_widget_show (vbox1);
1920 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1921 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1923 vbox2 = gtk_vbox_new (FALSE, 0);
1924 gtk_widget_show (vbox2);
1925 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1927 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1928 _("Encrypt message by default"));
1930 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1931 _("Sign message by default"));
1933 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1934 _("Automatically check signatures"));
1936 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1937 _("Show signature check result in a popup window"));
1940 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1941 _("Grab input while entering a passphrase"));
1945 (vbox2, checkbtn_gpg_warning,
1946 _("Display warning on startup if GnuPG doesn't work"));
1948 hbox1 = gtk_hbox_new (FALSE, 8);
1949 gtk_widget_show (hbox1);
1950 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1952 /* create default signkey box */
1953 label = gtk_label_new (_("Default Sign Key"));
1954 gtk_widget_show (label);
1955 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1956 optmenu = gtk_option_menu_new ();
1957 gtk_widget_show (optmenu);
1958 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1959 optmenu_menu = gtk_menu_new ();
1961 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1962 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1963 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1964 /* FIXME: disabled because not implemented */
1965 gtk_widget_set_sensitive(optmenu, FALSE);
1967 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1968 privacy.checkbtn_default_sign = checkbtn_default_sign;
1969 privacy.checkbtn_auto_check_signatures
1970 = checkbtn_auto_check_signatures;
1971 privacy.checkbtn_gpg_signature_popup
1972 = checkbtn_gpg_signature_popup;
1973 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1974 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1975 privacy.optmenu_default_signkey = optmenu;
1979 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1983 GtkWidget *menuitem;
1986 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1987 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1988 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1989 g_free(*((gchar **)pparam->data));
1990 *((gchar **)pparam->data) = g_strdup(charset);
1994 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
1998 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2000 GtkWidget *menuitem;
2004 g_return_if_fail(optmenu != NULL);
2005 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2007 menu = gtk_option_menu_get_menu(optmenu);
2008 for (cur = GTK_MENU_SHELL(menu)->children;
2009 cur != NULL; cur = cur->next) {
2010 menuitem = GTK_WIDGET(cur->data);
2011 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2012 if (!strcmp(charset, *((gchar **)pparam->data))) {
2013 gtk_option_menu_set_history(optmenu, n);
2019 gtk_option_menu_set_history(optmenu, 0);
2020 prefs_common_charset_set_data_from_optmenu(pparam);
2023 #endif /* USE_GPGME */
2025 static void prefs_interface_create(void)
2030 /* GtkWidget *checkbtn_emacs; */
2031 GtkWidget *checkbtn_openunread;
2032 GtkWidget *checkbtn_openinbox;
2033 GtkWidget *checkbtn_immedexec;
2036 GtkWidget *optmenu_recvdialog;
2038 GtkWidget *menuitem;
2040 GtkWidget *frame_addr;
2041 GtkWidget *vbox_addr;
2042 GtkWidget *checkbtn_addaddrbyclick;
2044 GtkWidget *frame_exit;
2045 GtkWidget *vbox_exit;
2046 GtkWidget *checkbtn_confonexit;
2047 GtkWidget *checkbtn_cleanonexit;
2048 GtkWidget *checkbtn_askonclean;
2049 GtkWidget *checkbtn_warnqueued;
2052 GtkWidget *optmenu_nextunreadmsgdialog;
2053 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2054 GtkWidget *nextunreadmsgdialog_menuitem;
2056 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2057 gtk_widget_show (vbox1);
2058 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2059 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2061 vbox2 = gtk_vbox_new (FALSE, 0);
2062 gtk_widget_show (vbox2);
2063 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2065 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2066 _("Emulate the behavior of mouse operation of\n"
2067 "Emacs-based mailer"));
2068 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2069 GTK_JUSTIFY_LEFT); */
2072 (vbox2, checkbtn_openunread,
2073 _("Open first unread message when entering a folder"));
2076 (vbox2, checkbtn_openinbox,
2077 _("Go to inbox after receiving new mail"));
2079 vbox3 = gtk_vbox_new (FALSE, 0);
2080 gtk_widget_show (vbox3);
2081 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2084 (vbox3, checkbtn_immedexec,
2085 _("Execute immediately when moving or deleting messages"));
2087 hbox1 = gtk_hbox_new (FALSE, 0);
2088 gtk_widget_show (hbox1);
2089 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2091 label = gtk_label_new
2092 (_("(Messages will be just marked till execution\n"
2093 " if this is turned off)"));
2094 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2095 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2097 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2099 hbox1 = gtk_hbox_new (FALSE, 8);
2100 gtk_widget_show (hbox1);
2101 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2103 label = gtk_label_new (_("Show receive dialog"));
2104 gtk_widget_show (label);
2105 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2107 optmenu_recvdialog = gtk_option_menu_new ();
2108 gtk_widget_show (optmenu_recvdialog);
2109 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2112 menu = gtk_menu_new ();
2113 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2114 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2115 RECV_DIALOG_ACTIVE);
2116 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2118 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2120 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2122 vbox_addr = gtk_vbox_new (FALSE, 0);
2123 gtk_widget_show (vbox_addr);
2124 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2125 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2128 (vbox_addr, checkbtn_addaddrbyclick,
2129 _("Add address to destination when double-clicked"));
2131 /* Next Unread Message Dialog */
2132 hbox2 = gtk_hbox_new (FALSE, 8);
2133 gtk_widget_show (hbox2);
2134 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2136 label = gtk_label_new (_("Show no-unread-message dialog"));
2137 gtk_widget_show (label);
2138 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2140 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2141 gtk_widget_show (optmenu_nextunreadmsgdialog);
2142 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2145 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2146 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2147 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2148 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2149 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2150 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2151 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2153 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2154 optmenu_nextunreadmsgdialog_menu);
2157 /* Receive Dialog */
2158 /* hbox = gtk_hbox_new (FALSE, 8);
2159 gtk_widget_show (hbox);
2160 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2162 label = gtk_label_new (_("Show receive Dialog"));
2163 gtk_widget_show (label);
2164 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2166 recvdialog_optmenu = gtk_option_menu_new ();
2167 gtk_widget_show (recvdialog_optmenu);
2168 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2170 recvdialog_optmenu_menu = gtk_menu_new ();
2172 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2173 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2174 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2176 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2179 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2181 vbox_exit = gtk_vbox_new (FALSE, 0);
2182 gtk_widget_show (vbox_exit);
2183 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2184 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2186 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2187 _("Confirm on exit"));
2189 hbox1 = gtk_hbox_new (FALSE, 32);
2190 gtk_widget_show (hbox1);
2191 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2193 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2194 _("Empty trash on exit"));
2195 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2196 _("Ask before emptying"));
2197 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2199 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2200 _("Warn if there are queued messages"));
2202 /* interface.checkbtn_emacs = checkbtn_emacs; */
2203 interface.checkbtn_openunread = checkbtn_openunread;
2204 interface.checkbtn_openinbox = checkbtn_openinbox;
2205 interface.checkbtn_immedexec = checkbtn_immedexec;
2206 interface.optmenu_recvdialog = optmenu_recvdialog;
2207 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2208 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2209 interface.checkbtn_confonexit = checkbtn_confonexit;
2210 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2211 interface.checkbtn_askonclean = checkbtn_askonclean;
2212 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2215 static void prefs_other_create(void)
2220 GtkWidget *uri_frame;
2221 GtkWidget *uri_label;
2222 GtkWidget *uri_combo;
2223 GtkWidget *uri_entry;
2225 GtkWidget *print_frame;
2226 GtkWidget *printcmd_label;
2227 GtkWidget *printcmd_entry;
2229 GtkWidget *exteditor_frame;
2230 GtkWidget *exteditor_label;
2231 GtkWidget *exteditor_combo;
2232 GtkWidget *exteditor_entry;
2234 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2235 gtk_widget_show (vbox1);
2236 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2237 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2239 PACK_FRAME(vbox1, uri_frame,
2240 _("External Web browser (%s will be replaced with URI)"));
2242 hbox1 = gtk_hbox_new (FALSE, 8);
2243 gtk_widget_show (hbox1);
2244 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2245 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2247 uri_label = gtk_label_new (_("Command"));
2248 gtk_widget_show(uri_label);
2249 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2251 uri_combo = gtk_combo_new ();
2252 gtk_widget_show (uri_combo);
2253 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2254 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2255 "netscape -remote 'openURL(%s,raise)'",
2257 "gnome-moz-remote --raise --newwin '%s'",
2258 "kterm -e w3m '%s'",
2259 "kterm -e lynx '%s'",
2262 uri_entry = GTK_COMBO (uri_combo)->entry;
2264 PACK_FRAME(vbox1, print_frame,
2265 _("Printing (%s will be replaced with file name)"));
2267 hbox1 = gtk_hbox_new (FALSE, 8);
2268 gtk_widget_show (hbox1);
2269 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2270 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2272 printcmd_label = gtk_label_new (_("Command"));
2273 gtk_widget_show (printcmd_label);
2274 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2276 printcmd_entry = gtk_entry_new ();
2277 gtk_widget_show (printcmd_entry);
2278 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2280 PACK_FRAME(vbox1, exteditor_frame,
2281 _("External editor (%s will be replaced with file name)"));
2283 hbox1 = gtk_hbox_new (FALSE, 8);
2284 gtk_widget_show (hbox1);
2285 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2286 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2288 exteditor_label = gtk_label_new (_("Command"));
2289 gtk_widget_show (exteditor_label);
2290 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2292 exteditor_combo = gtk_combo_new ();
2293 gtk_widget_show (exteditor_combo);
2294 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2295 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2298 "mgedit --no-fork %s",
2304 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2306 other.uri_combo = uri_combo;
2307 other.uri_entry = uri_entry;
2308 other.printcmd_entry = printcmd_entry;
2310 other.exteditor_combo = exteditor_combo;
2311 other.exteditor_entry = exteditor_entry;
2314 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2316 GtkWidget *datefmt_sample = NULL;
2319 g_return_if_fail(widget != NULL);
2320 g_return_if_fail(*widget != NULL);
2321 g_return_if_fail(display.entry_datefmt != NULL);
2323 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2324 (GTK_OBJECT(*widget), "datefmt_sample"));
2325 g_return_if_fail(datefmt_sample != NULL);
2327 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2328 g_free(prefs_common.date_format);
2329 prefs_common.date_format = text;
2330 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2332 gtk_widget_destroy(*widget);
2336 static void date_format_cancel_btn_clicked(GtkButton *button,
2339 g_return_if_fail(widget != NULL);
2340 g_return_if_fail(*widget != NULL);
2342 gtk_widget_destroy(*widget);
2346 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2349 if (event && event->keyval == GDK_Escape)
2350 date_format_cancel_btn_clicked(NULL, widget);
2353 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2354 GdkEventAny *event, GtkWidget **widget)
2356 g_return_val_if_fail(widget != NULL, FALSE);
2357 g_return_val_if_fail(*widget != NULL, FALSE);
2363 static void date_format_entry_on_change(GtkEditable *editable,
2367 struct tm *cal_time;
2371 cur_time = time(NULL);
2372 cal_time = localtime(&cur_time);
2374 text = gtk_editable_get_chars(editable, 0, -1);
2376 strftime(buffer, sizeof buffer, text, cal_time);
2377 gtk_label_set_text(example, buffer);
2380 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2381 gint column, GdkEventButton *event,
2382 GtkWidget *date_format)
2388 GtkWidget *datefmt_sample;
2390 /* only on double click */
2391 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2394 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2395 (GTK_OBJECT(date_format), "datefmt_sample"));
2397 g_return_if_fail(date_format_list != NULL);
2398 g_return_if_fail(date_format != NULL);
2399 g_return_if_fail(datefmt_sample != NULL);
2401 /* get format from clist */
2402 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2404 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2405 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2407 /* insert the format into the text entry */
2408 new_format = g_malloc(strlen(old_format) + 3);
2410 strncpy(new_format, old_format, cur_pos);
2411 new_format[cur_pos] = '\0';
2412 strcat(new_format, format);
2413 strcat(new_format, &old_format[cur_pos]);
2415 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2416 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2421 static GtkWidget *date_format_create(GtkButton *button, void *data)
2423 static GtkWidget *datefmt_win = NULL;
2425 GtkWidget *scrolledwindow1;
2426 GtkWidget *datefmt_clist;
2431 GtkWidget *confirm_area;
2433 GtkWidget *cancel_btn;
2434 GtkWidget *datefmt_entry;
2440 { "%a", _("the full abbreviated weekday name") },
2441 { "%A", _("the full weekday name") },
2442 { "%b", _("the abbreviated month name") },
2443 { "%B", _("the full month name") },
2444 { "%c", _("the preferred date and time for the current locale") },
2445 { "%C", _("the century number (year/100)") },
2446 { "%d", _("the day of the month as a decimal number") },
2447 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2448 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2449 { "%j", _("the day of the year as a decimal number") },
2450 { "%m", _("the month as a decimal number") },
2451 { "%M", _("the minute as a decimal number") },
2452 { "%p", _("either AM or PM") },
2453 { "%S", _("the second as a decimal number") },
2454 { "%w", _("the day of the week as a decimal number") },
2455 { "%x", _("the preferred date for the current locale") },
2456 { "%y", _("the last two digits of a year") },
2457 { "%Y", _("the year as a decimal number") },
2458 { "%Z", _("the time zone or name or abbreviation") }
2463 const gint TIME_FORMAT_ELEMS =
2464 sizeof time_format / sizeof time_format[0];
2466 if (datefmt_win) return datefmt_win;
2468 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2469 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2470 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2471 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2472 gtk_widget_set_usize(datefmt_win, 440, 280);
2474 vbox1 = gtk_vbox_new(FALSE, 10);
2475 gtk_widget_show(vbox1);
2476 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2478 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2479 gtk_scrolled_window_set_policy
2480 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2481 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2482 gtk_widget_show(scrolledwindow1);
2483 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2485 titles[0] = _("Specifier");
2486 titles[1] = _("Description");
2487 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2488 gtk_widget_show(datefmt_clist);
2489 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2490 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2492 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2493 GTK_SELECTION_BROWSE);
2495 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2497 /* phoney casting necessary because of gtk... */
2498 text[0] = (gchar *)time_format[i].fmt;
2499 text[1] = (gchar *)time_format[i].txt;
2500 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2503 table = gtk_table_new(2, 2, FALSE);
2504 gtk_widget_show(table);
2505 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2506 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2507 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2509 label1 = gtk_label_new(_("Date format"));
2510 gtk_widget_show(label1);
2511 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2513 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2514 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2516 datefmt_entry = gtk_entry_new_with_max_length(256);
2517 gtk_widget_show(datefmt_entry);
2518 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2519 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2521 /* we need the "sample" entry box; add it as data so callbacks can
2522 * get the entry box */
2523 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2526 label2 = gtk_label_new(_("Example"));
2527 gtk_widget_show(label2);
2528 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2530 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2531 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2533 label3 = gtk_label_new("");
2534 gtk_widget_show(label3);
2535 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2536 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2537 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2538 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2540 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2541 &cancel_btn, _("Cancel"), NULL, NULL);
2542 gtk_widget_grab_default(ok_btn);
2543 gtk_widget_show(confirm_area);
2545 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2547 /* set the current format */
2548 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2549 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2552 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2553 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2555 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2556 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2558 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2559 GTK_SIGNAL_FUNC(date_format_key_pressed),
2561 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2562 GTK_SIGNAL_FUNC(date_format_on_delete),
2564 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2565 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2568 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2569 GTK_SIGNAL_FUNC(date_format_select_row),
2572 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2573 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2575 gtk_widget_show(datefmt_win);
2576 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2578 gtk_widget_grab_focus(ok_btn);
2583 void prefs_quote_colors_dialog(void)
2585 if (!quote_color_win)
2586 prefs_quote_colors_dialog_create();
2587 gtk_widget_show(quote_color_win);
2588 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2591 gtk_widget_hide(quote_color_win);
2593 textview_update_message_colors();
2594 main_window_reflect_prefs_all();
2597 static void prefs_quote_colors_dialog_create(void)
2602 GtkWidget *quotelevel1_label;
2603 GtkWidget *quotelevel2_label;
2604 GtkWidget *quotelevel3_label;
2605 GtkWidget *uri_label;
2606 GtkWidget *tgt_folder_label;
2609 //GtkWidget *cancel_btn;
2610 GtkWidget *recycle_colors_btn;
2611 GtkWidget *frame_colors;
2613 window = gtk_window_new(GTK_WINDOW_DIALOG);
2614 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2615 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2616 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2617 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2618 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2620 vbox = gtk_vbox_new (FALSE, VSPACING);
2621 gtk_container_add (GTK_CONTAINER (window), vbox);
2622 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2623 PACK_FRAME(vbox, frame_colors, _("Colors"));
2625 table = gtk_table_new (4, 2, FALSE);
2626 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2627 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2628 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2629 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2632 color_buttons.quote_level1_btn = gtk_button_new();
2633 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2634 0, 1, 0, 1, 0, 0, 0, 0);
2635 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2636 gtk_container_set_border_width
2637 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2639 color_buttons.quote_level2_btn = gtk_button_new();
2640 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2641 0, 1, 1, 2, 0, 0, 0, 0);
2642 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2643 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2645 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2646 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2647 0, 1, 2, 3, 0, 0, 0, 0);
2648 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2649 gtk_container_set_border_width
2650 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2652 color_buttons.uri_btn = gtk_button_new_with_label ("");
2653 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2654 0, 1, 3, 4, 0, 0, 0, 0);
2655 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2656 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2658 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2659 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2660 0, 1, 4, 5, 0, 0, 0, 0);
2661 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2662 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2664 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2665 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2666 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2667 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2668 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2670 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2671 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2672 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2673 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2674 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2676 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2677 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2678 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2679 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2680 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2682 uri_label = gtk_label_new (_("URI link"));
2683 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2684 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2685 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2686 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2688 tgt_folder_label = gtk_label_new (_("Target folder"));
2689 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2690 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2691 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2692 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2694 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2695 _("Recycle quote colors"));
2697 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2698 NULL, NULL, NULL, NULL);
2699 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2701 gtk_widget_grab_default(ok_btn);
2702 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2703 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2704 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2705 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2706 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2707 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2708 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2709 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2712 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2713 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2714 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2715 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2716 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2717 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2718 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2719 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2720 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2721 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2722 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2723 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2724 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2725 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2727 /* show message button colors and recycle options */
2728 set_button_bg_color(color_buttons.quote_level1_btn,
2729 prefs_common.quote_level1_col);
2730 set_button_bg_color(color_buttons.quote_level2_btn,
2731 prefs_common.quote_level2_col);
2732 set_button_bg_color(color_buttons.quote_level3_btn,
2733 prefs_common.quote_level3_col);
2734 set_button_bg_color(color_buttons.uri_btn,
2735 prefs_common.uri_col);
2736 set_button_bg_color(color_buttons.tgt_folder_btn,
2737 prefs_common.tgt_folder_col);
2738 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2739 prefs_common.recycle_quote_colors);
2741 gtk_widget_show_all(vbox);
2742 quote_color_win = window;
2745 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2746 GdkEventKey *event, gpointer data)
2748 if (event && event->keyval == GDK_Escape)
2752 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2754 gchar *type = (gchar *)data;
2755 gchar *title = NULL;
2756 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2758 GtkColorSelectionDialog *dialog;
2760 if(g_strcasecmp(type, "LEVEL1") == 0) {
2761 title = _("Pick color for quotation level 1");
2762 rgbvalue = prefs_common.quote_level1_col;
2763 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2764 title = _("Pick color for quotation level 2");
2765 rgbvalue = prefs_common.quote_level2_col;
2766 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2767 title = _("Pick color for quotation level 3");
2768 rgbvalue = prefs_common.quote_level3_col;
2769 } else if(g_strcasecmp(type, "URI") == 0) {
2770 title = _("Pick color for URI");
2771 rgbvalue = prefs_common.uri_col;
2772 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2773 title = _("Pick color for target folder");
2774 rgbvalue = prefs_common.tgt_folder_col;
2775 } else { /* Should never be called */
2776 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2780 color_dialog = gtk_color_selection_dialog_new(title);
2781 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2782 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2783 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2784 manage_window_set_transient(GTK_WINDOW(color_dialog));
2786 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2787 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2788 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2789 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2790 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2791 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2794 /* preselect the previous color in the color selection dialog */
2795 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2796 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2797 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2798 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2799 gtk_color_selection_set_color
2800 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2802 gtk_widget_show(color_dialog);
2805 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2807 GtkColorSelection *colorsel = (GtkColorSelection *)
2808 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2810 gint red, green, blue, rgbvalue;
2811 gchar *type = (gchar *)data;
2813 gtk_color_selection_get_color(colorsel, color);
2815 red = (gint) (color[0] * 255.0);
2816 green = (gint) (color[1] * 255.0);
2817 blue = (gint) (color[2] * 255.0);
2818 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2821 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2822 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2823 fprintf(stderr, "Color is %x\n", rgbvalue);
2826 if (g_strcasecmp(type, "LEVEL1") == 0) {
2827 prefs_common.quote_level1_col = rgbvalue;
2828 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2829 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2830 prefs_common.quote_level2_col = rgbvalue;
2831 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2832 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2833 prefs_common.quote_level3_col = rgbvalue;
2834 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2835 } else if (g_strcasecmp(type, "URI") == 0) {
2836 prefs_common.uri_col = rgbvalue;
2837 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2838 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2839 prefs_common.tgt_folder_col = rgbvalue;
2840 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2841 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2843 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2845 gtk_widget_destroy(color_dialog);
2848 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2850 gtk_widget_destroy(color_dialog);
2853 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2857 gtk_widget_destroy(color_dialog);
2860 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2865 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2866 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2867 newstyle->bg[GTK_STATE_NORMAL] = color;
2868 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2869 newstyle->bg[GTK_STATE_ACTIVE] = color;
2871 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2874 static void prefs_enable_message_color_toggled(void)
2878 is_active = gtk_toggle_button_get_active
2879 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2880 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2881 prefs_common.enable_color = is_active;
2884 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2888 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2889 prefs_common.recycle_quote_colors = is_active;
2892 static void prefs_quote_description(void)
2894 if (!quote_desc_win)
2895 prefs_quote_description_create();
2897 gtk_widget_show(quote_desc_win);
2899 gtk_widget_hide(quote_desc_win);
2902 static void prefs_quote_description_create(void)
2910 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2911 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2912 _("Description of symbols"));
2913 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2914 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2915 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2916 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2918 vbox = gtk_vbox_new(FALSE, 8);
2919 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2921 hbox = gtk_hbox_new(FALSE, 4);
2922 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2924 label = gtk_label_new
2928 "%N\n" /* full name */
2929 "%F\n" /* first name */
2930 "%I\n" /* sender's initial */
2931 "%s\n" /* subject line */
2934 "%n\n" /* newsgroups */
2935 "%i\n" /* message id */
2936 "%r\n" /* references */
2947 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2948 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2950 label = gtk_label_new
2951 (_("DESCRIPTION\n\n"
2954 "Full Name of Sender\n"
2955 "First Name of Sender\n"
2956 "Initial of Sender\n"
2964 "Display the information\n"
2965 "If the information x is set, displays expr\n"
2968 "Quoted message body\n"
2969 "Message body without signature\n"
2970 "Quoted message body without signature\n"
2973 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2974 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2976 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2977 NULL, NULL, NULL, NULL);
2978 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2980 gtk_widget_grab_default(ok_btn);
2981 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2982 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2984 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2985 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2987 gtk_widget_show_all(vbox);
2990 /* functions for setting items of SummaryView */
2992 static struct _SummaryDisplayItem
2996 GtkWidget *chkbtn[N_SUMMARY_COLS];
2999 GtkWidget *cancel_btn;
3002 #define SET_ACTIVE(column, var) \
3003 gtk_toggle_button_set_active \
3004 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
3006 #define GET_ACTIVE(column, var) \
3007 prefs_common.var = gtk_toggle_button_get_active \
3008 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
3010 void prefs_summary_display_item_set(void)
3012 static gboolean cancelled;
3014 if (!summarydispitem.window)
3015 prefs_summary_display_item_dialog_create(&cancelled);
3016 gtk_widget_grab_focus(summarydispitem.ok_btn);
3017 gtk_widget_show(summarydispitem.window);
3018 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
3020 SET_ACTIVE(S_COL_MARK, show_mark);
3021 SET_ACTIVE(S_COL_UNREAD, show_unread);
3022 SET_ACTIVE(S_COL_MIME, show_mime);
3023 SET_ACTIVE(S_COL_NUMBER, show_number);
3024 SET_ACTIVE(S_COL_SCORE, show_score);
3025 SET_ACTIVE(S_COL_SIZE, show_size);
3026 SET_ACTIVE(S_COL_DATE, show_date);
3027 SET_ACTIVE(S_COL_FROM, show_from);
3028 SET_ACTIVE(S_COL_SUBJECT, show_subject);
3031 gtk_widget_hide(summarydispitem.window);
3033 if (cancelled != TRUE) {
3034 GET_ACTIVE(S_COL_MARK, show_mark);
3035 GET_ACTIVE(S_COL_UNREAD, show_unread);
3036 GET_ACTIVE(S_COL_MIME, show_mime);
3037 GET_ACTIVE(S_COL_NUMBER, show_number);
3038 GET_ACTIVE(S_COL_SCORE, show_score);
3039 GET_ACTIVE(S_COL_SIZE, show_size);
3040 GET_ACTIVE(S_COL_DATE, show_date);
3041 GET_ACTIVE(S_COL_FROM, show_from);
3042 GET_ACTIVE(S_COL_SUBJECT, show_subject);
3044 main_window_reflect_prefs_all();
3048 #define SET_CHECK_BUTTON(column, label) \
3050 summarydispitem.chkbtn[column] = \
3051 gtk_check_button_new_with_label(label); \
3052 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
3053 summarydispitem.chkbtn[column], \
3057 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
3061 GtkWidget *chkbtn_vbox;
3064 GtkWidget *cancel_btn;
3066 window = gtk_window_new(GTK_WINDOW_DIALOG);
3067 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3068 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
3069 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3070 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3071 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3072 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3073 GTK_SIGNAL_FUNC(display_item_delete_event),
3075 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3076 GTK_SIGNAL_FUNC(display_item_key_pressed),
3079 vbox = gtk_vbox_new(FALSE, 8);
3080 gtk_container_add(GTK_CONTAINER(window), vbox);
3082 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
3083 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
3085 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
3086 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
3087 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
3088 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
3089 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
3090 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
3091 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
3092 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
3093 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
3095 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3096 &cancel_btn, _("Cancel"), NULL, NULL);
3097 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3098 gtk_widget_grab_default(ok_btn);
3100 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3101 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
3102 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3103 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
3105 gtk_widget_show_all(vbox);
3107 summarydispitem.window = window;
3108 summarydispitem.ok_btn = ok_btn;
3109 summarydispitem.cancel_btn = cancel_btn;
3112 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3118 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3124 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3125 gboolean *cancelled)
3133 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3134 gboolean *cancelled)
3136 if (event && event->keyval == GDK_Escape) {
3142 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3146 g_return_if_fail(entry != NULL);
3148 if (!font_sel_win) {
3149 font_sel_win = gtk_font_selection_dialog_new
3150 (_("Font selection"));
3151 gtk_window_position(GTK_WINDOW(font_sel_win),
3152 GTK_WIN_POS_CENTER);
3153 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3154 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3157 (GTK_OBJECT(font_sel_win), "key_press_event",
3158 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3160 gtk_signal_connect_object
3161 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3163 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3164 GTK_OBJECT(font_sel_win));
3167 if(font_sel_conn_id) {
3168 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3170 font_sel_conn_id = gtk_signal_connect
3171 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3173 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3175 printf("%i\n", font_sel_conn_id);
3177 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3178 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3180 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3181 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3182 gtk_widget_grab_focus
3183 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3184 gtk_widget_show(font_sel_win);
3187 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3191 if (event && event->keyval == GDK_Escape)
3192 gtk_widget_hide(font_sel_win);
3195 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3199 fontname = gtk_font_selection_dialog_get_font_name
3200 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3203 gtk_entry_set_text(entry, fontname);
3208 gtk_widget_hide(font_sel_win);
3211 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3214 GtkWidget *menuitem;
3217 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3218 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3219 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3220 g_free(*((gchar **)pparam->data));
3221 *((gchar **)pparam->data) = g_strdup(charset);
3224 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3227 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3229 GtkWidget *menuitem;
3233 g_return_if_fail(optmenu != NULL);
3234 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3236 menu = gtk_option_menu_get_menu(optmenu);
3237 for (cur = GTK_MENU_SHELL(menu)->children;
3238 cur != NULL; cur = cur->next) {
3239 menuitem = GTK_WIDGET(cur->data);
3240 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3241 if (!strcmp(charset, *((gchar **)pparam->data))) {
3242 gtk_option_menu_set_history(optmenu, n);
3248 gtk_option_menu_set_history(optmenu, 0);
3249 prefs_common_charset_set_data_from_optmenu(pparam);
3252 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3255 GtkWidget *menuitem;
3257 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3258 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3259 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3260 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3263 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3265 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3266 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3268 GtkWidget *menuitem;
3271 case RECV_DIALOG_ALWAYS:
3272 gtk_option_menu_set_history(optmenu, 0);
3274 case RECV_DIALOG_ACTIVE:
3275 gtk_option_menu_set_history(optmenu, 1);
3277 case RECV_DIALOG_NEVER:
3278 gtk_option_menu_set_history(optmenu, 2);
3283 menu = gtk_option_menu_get_menu(optmenu);
3284 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3285 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3288 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3291 prefs_common_cancel();
3295 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3298 if (event && event->keyval == GDK_Escape)
3299 prefs_common_cancel();
3302 static void prefs_common_ok(void)
3304 prefs_common_apply();
3305 gtk_widget_hide(dialog.window);
3306 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3307 gtk_widget_hide(quote_desc_win);
3312 static void prefs_common_apply(void)
3314 prefs_set_data_from_dialog(param);
3315 main_window_reflect_prefs_all();
3316 prefs_common_save_config();
3318 inc_autocheck_timer_remove();
3319 inc_autocheck_timer_set();
3322 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3325 GtkWidget *menuitem;
3327 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3328 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3329 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3330 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3333 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3335 NextUnreadMsgDialogShow dialog_show;
3336 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3338 GtkWidget *menuitem;
3340 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3342 switch (dialog_show) {
3343 case NEXTUNREADMSGDIALOG_ALWAYS:
3344 gtk_option_menu_set_history(optmenu, 0);
3346 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3347 gtk_option_menu_set_history(optmenu, 1);
3349 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3350 gtk_option_menu_set_history(optmenu, 2);
3355 menu = gtk_option_menu_get_menu(optmenu);
3356 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3357 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3360 static void prefs_common_cancel(void)
3362 gtk_widget_hide(dialog.window);
3367 static struct _ComposePrefs
3371 GtkWidget *close_btn;
3374 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3375 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3376 static void compose_prefs_close(GtkWidget *widget);
3377 static void compose_prefs_fmt_create(void);
3379 static void compose_prefs_fmt_open(void)
3381 if (composeprefs.window == NULL)
3382 compose_prefs_fmt_create();
3383 gtk_widget_show(composeprefs.window);
3387 static void compose_prefs_fmt_create(void)
3390 GtkWidget *close_btn;
3392 GtkWidget *frame_quote;
3393 GtkWidget *vbox_quote;
3395 GtkWidget *checkbtn_quote;
3396 GtkWidget *label_quotemark;
3397 GtkWidget *entry_quotemark;
3398 GtkWidget *scrolledwin_quotefmt;
3399 GtkWidget *text_quotefmt;
3400 GtkWidget *label_quotefmt;
3401 GtkWidget *btn_quotedesc;
3403 GtkWidget *label_fw_quotemark;
3404 GtkWidget *entry_fw_quotemark;
3405 GtkWidget *label_fw_quotefmt;
3406 GtkWidget *text_fw_quotefmt;
3408 window = gtk_window_new(GTK_WINDOW_DIALOG);
3409 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3410 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3411 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3412 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3413 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3414 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3415 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3417 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3418 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3421 vbox_quote = gtk_vbox_new(FALSE, 8);
3422 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3424 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3425 _("Quote message when replying"));
3427 hbox1 = gtk_hbox_new (FALSE, 8);
3428 gtk_widget_show (hbox1);
3429 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3431 label_quotemark = gtk_label_new (_("Quotation mark"));
3432 gtk_widget_show (label_quotemark);
3433 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3435 entry_quotemark = gtk_entry_new ();
3436 gtk_widget_show (entry_quotemark);
3437 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3438 gtk_widget_set_usize (entry_quotemark, 64, -1);
3440 hbox1 = gtk_hbox_new (FALSE, 0);
3441 gtk_widget_show (hbox1);
3442 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3444 label_quotefmt = gtk_label_new (_("Quotation format:"));
3445 gtk_widget_show (label_quotefmt);
3446 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3448 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3449 gtk_widget_show (scrolledwin_quotefmt);
3450 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3451 gtk_scrolled_window_set_policy
3452 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3453 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3455 text_quotefmt = gtk_text_new (NULL, NULL);
3456 gtk_widget_show (text_quotefmt);
3457 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3458 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3459 gtk_widget_set_usize(text_quotefmt, 400, 60);
3461 hbox1 = gtk_hbox_new (FALSE, 8);
3462 gtk_widget_show (hbox1);
3463 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3465 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3466 gtk_widget_show (label_fw_quotemark);
3467 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3469 entry_fw_quotemark = gtk_entry_new ();
3470 gtk_widget_show (entry_fw_quotemark);
3471 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3472 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3474 hbox1 = gtk_hbox_new (FALSE, 0);
3475 gtk_widget_show (hbox1);
3476 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3478 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3479 gtk_widget_show (label_fw_quotefmt);
3480 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3482 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3483 gtk_widget_show (scrolledwin_quotefmt);
3484 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3485 gtk_scrolled_window_set_policy
3486 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3487 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3489 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3490 gtk_widget_show (text_fw_quotefmt);
3491 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3492 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3493 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3495 hbox1 = gtk_hbox_new (FALSE, 0);
3496 gtk_widget_show (hbox1);
3497 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3500 gtk_button_new_with_label (_(" Description of symbols "));
3501 gtk_widget_show (btn_quotedesc);
3502 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3505 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3506 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3509 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3510 NULL, NULL, NULL, NULL);
3511 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3512 gtk_widget_grab_default(close_btn);
3514 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3515 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3517 gtk_widget_show_all(vbox_quote);
3519 composeprefs.window = window;
3520 composeprefs.close_btn = close_btn;
3522 compose.checkbtn_quote = checkbtn_quote;
3523 compose.entry_quotemark = entry_quotemark;
3524 compose.text_quotefmt = text_quotefmt;
3525 compose.entry_fw_quotemark = entry_fw_quotemark;
3526 compose.text_fw_quotefmt = text_fw_quotefmt;
3529 static void compose_prefs_close(GtkWidget *widget)
3531 gtk_widget_hide(composeprefs.window);
3534 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3536 gtk_widget_hide(composeprefs.window);
3541 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3543 if (event && event->keyval == GDK_Escape) {
3544 gtk_widget_hide(composeprefs.window);
3548 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3551 GtkWidget *menuitem;
3553 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3554 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3555 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3556 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3559 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3561 RecvDialogShow dialog_show;
3562 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3564 GtkWidget *menuitem;
3566 dialog_show = *((RecvDialogShow *)pparam->data);
3568 switch (dialog_show) {
3569 case RECVDIALOG_ALWAYS:
3570 gtk_option_menu_set_history(optmenu, 0);
3572 case RECVDIALOG_WINDOW_ACTIVE:
3573 gtk_option_menu_set_history(optmenu, 1);
3575 case RECVDIALOG_NEVER:
3576 gtk_option_menu_set_history(optmenu, 2);
3581 menu = gtk_option_menu_get_menu(optmenu);
3582 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3583 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));