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;
120 GtkWidget * checkbtn_block_cursor;
124 GtkWidget *checkbtn_enable_pspell;
125 GtkWidget *entry_pspell_path;
126 GtkWidget *btn_pspell_path;
127 GtkWidget *optmenu_dictionary;
132 static struct Display {
133 GtkWidget *entry_textfont;
134 GtkWidget *button_textfont;
136 GtkWidget *entry_smallfont;
137 GtkWidget *entry_normalfont;
138 GtkWidget *entry_boldfont;
140 GtkWidget *chkbtn_folder_unread;
142 GtkWidget *chkbtn_transhdr;
144 GtkWidget *chkbtn_swapfrom;
145 GtkWidget *chkbtn_hscrollbar;
146 GtkWidget *chkbtn_useaddrbook;
147 GtkWidget *chkbtn_expand_thread;
148 GtkWidget *chkbtn_bold_unread;
150 GtkWidget *entry_datefmt;
153 static struct Message {
154 GtkWidget *chkbtn_enablecol;
155 GtkWidget *button_edit_col;
156 GtkWidget *chkbtn_mbalnum;
157 GtkWidget *chkbtn_disphdrpane;
158 GtkWidget *chkbtn_disphdr;
159 GtkWidget *spinbtn_linespc;
160 GtkObject *spinbtn_linespc_adj;
161 GtkWidget *chkbtn_headspc;
163 GtkWidget *chkbtn_smoothscroll;
164 GtkWidget *spinbtn_scrollstep;
165 GtkObject *spinbtn_scrollstep_adj;
166 GtkWidget *chkbtn_halfpage;
170 static struct Privacy {
171 GtkWidget *checkbtn_default_encrypt;
172 GtkWidget *checkbtn_default_sign;
173 GtkWidget *checkbtn_auto_check_signatures;
174 GtkWidget *checkbtn_gpg_signature_popup;
175 GtkWidget *checkbtn_passphrase_grab;
176 GtkWidget *checkbtn_gpg_warning;
177 GtkWidget *optmenu_default_signkey;
181 static struct Interface {
182 /* GtkWidget *checkbtn_emacs; */
183 GtkWidget *checkbtn_openunread;
184 GtkWidget *checkbtn_openinbox;
185 GtkWidget *checkbtn_immedexec;
186 GtkWidget *checkbtn_confonexit;
187 GtkWidget *checkbtn_cleanonexit;
188 GtkWidget *checkbtn_askonclean;
189 GtkWidget *checkbtn_warnqueued;
190 GtkWidget *checkbtn_addaddrbyclick;
191 GtkWidget *optmenu_recvdialog;
192 GtkWidget *optmenu_nextunreadmsgdialog;
195 static struct Other {
196 GtkWidget *uri_combo;
197 GtkWidget *uri_entry;
198 GtkWidget *printcmd_entry;
199 GtkWidget *exteditor_combo;
200 GtkWidget *exteditor_entry;
203 static struct MessageColorButtons {
204 GtkWidget *quote_level1_btn;
205 GtkWidget *quote_level2_btn;
206 GtkWidget *quote_level3_btn;
208 GtkWidget *tgt_folder_btn;
211 static GtkWidget *quote_desc_win;
212 static GtkWidget *font_sel_win;
213 static guint font_sel_conn_id;
214 static GtkWidget *quote_color_win;
215 static GtkWidget *color_dialog;
217 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam);
218 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
220 static void prefs_common_default_signkey_set_data_from_optmenu
222 static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam);
224 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
225 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
226 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
227 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
230 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param);
231 static void prefs_dictionary_set_optmenu(PrefParam *pparam);
236 parameter name, default value, pointer to the prefs variable, data type,
237 pointer to the widget pointer,
238 pointer to the function for data setting,
239 pointer to the function for widget setting
242 static PrefParam param[] = {
244 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
245 &receive.checkbtn_incext,
246 prefs_set_data_from_toggle, prefs_set_toggle},
247 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
248 &receive.entry_incext,
249 prefs_set_data_from_entry, prefs_set_entry},
251 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
252 &receive.checkbtn_local,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL,
255 &receive.checkbtn_filter_on_inc,
256 prefs_set_data_from_toggle, prefs_set_toggle},
257 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
258 &receive.entry_spool,
259 prefs_set_data_from_entry, prefs_set_entry},
261 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
262 &receive.checkbtn_autochk,
263 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
265 &receive.spinbtn_autochk,
266 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
267 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
268 &receive.checkbtn_chkonstartup,
269 prefs_set_data_from_toggle, prefs_set_toggle},
270 {"noerrorpanel", "FALSE", &prefs_common.noerrorpanel, P_BOOL,
271 &receive.checkbtn_noerrorpanel,
272 prefs_set_data_from_toggle, prefs_set_toggle},
273 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
274 P_BOOL, &receive.checkbtn_scan_after_inc,
275 prefs_set_data_from_toggle, prefs_set_toggle},
276 {"max_news_articles", "300", &prefs_common.max_articles, P_INT,
277 &receive.spinbtn_maxarticle,
278 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
281 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
282 &send.checkbtn_extsend,
283 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
285 &prefs_common.extsend_cmd, P_STRING,
286 &send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
287 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
288 &send.checkbtn_savemsg,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
291 &send.checkbtn_queuemsg,
292 prefs_set_data_from_toggle, prefs_set_toggle},
294 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
295 &send.optmenu_charset,
296 prefs_common_charset_set_data_from_optmenu,
297 prefs_common_charset_set_optmenu},
300 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
301 &compose.checkbtn_quote,
302 prefs_set_data_from_toggle, prefs_set_toggle},
303 {"quote_mark", "> ", &prefs_common.quotemark, P_STRING,
304 &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
305 {"quote_format", "On %d\\n%f wrote:\\n\\n%Q",
307 &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt,
308 prefs_set_data_from_text, prefs_set_text},
309 {"fw_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
310 &compose.entry_fw_quotemark, prefs_set_data_from_entry, prefs_set_entry},
311 {"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",
312 &prefs_common.fw_quotefmt, P_STRING, &compose.text_fw_quotefmt,
313 prefs_set_data_from_text, prefs_set_text},
315 {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL,
316 &compose.checkbtn_autosig,
317 prefs_set_data_from_toggle, prefs_set_toggle},
318 {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING,
319 &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry},
321 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
322 &compose.checkbtn_autoextedit,
323 prefs_set_data_from_toggle, prefs_set_toggle},
324 {"reply_account_autoselect", "TRUE",
325 &prefs_common.reply_account_autosel, P_BOOL,
326 &compose.checkbtn_reply_account_autosel,
327 prefs_set_data_from_toggle, prefs_set_toggle},
328 {"forward_account_autoselect", "TRUE",
329 &prefs_common.forward_account_autosel, P_BOOL,
330 &compose.checkbtn_forward_account_autosel,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"reedit_account_autoselect", "TRUE",
333 &prefs_common.reedit_account_autosel, P_BOOL,
334 &compose.checkbtn_reedit_account_autosel,
335 prefs_set_data_from_toggle, prefs_set_toggle},
337 {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT,
338 &compose.spinbtn_linewrap,
339 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
340 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
341 &compose.checkbtn_wrapquote,
342 prefs_set_data_from_toggle, prefs_set_toggle},
343 {"linewrap_before_sending", "FALSE",
344 &prefs_common.linewrap_at_send, P_BOOL,
345 &compose.checkbtn_wrapatsend,
346 prefs_set_data_from_toggle, prefs_set_toggle},
347 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
348 P_BOOL, &compose.checkbtn_forward_as_attachment,
349 prefs_set_data_from_toggle, prefs_set_toggle},
350 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
351 P_BOOL, &compose.checkbtn_smart_wrapping,
352 prefs_set_data_from_toggle, prefs_set_toggle},
353 {"block_cursor", "FALSE", &prefs_common.block_cursor,
354 P_BOOL, &compose.checkbtn_block_cursor,
355 prefs_set_data_from_toggle, prefs_set_toggle},
357 {"enable_pspell", "TRUE", &prefs_common.enable_pspell,
358 P_BOOL, &compose.checkbtn_enable_pspell,
359 prefs_set_data_from_toggle, prefs_set_toggle},
360 {"pspell_path", "/usr/local/share/pspell/", &prefs_common.pspell_path,
361 P_STRING, &compose.entry_pspell_path,
362 prefs_set_data_from_entry, prefs_set_entry},
363 {"dictionary", "", &prefs_common.dictionary,
364 P_STRING, &compose.optmenu_dictionary,
365 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
367 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
371 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
373 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
374 &prefs_common.textfont, P_STRING,
375 &display.entry_textfont,
376 prefs_set_data_from_entry, prefs_set_entry},
377 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
378 &prefs_common.smallfont, P_STRING,
379 &display.entry_smallfont,
380 prefs_set_data_from_entry, prefs_set_entry},
381 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
382 &prefs_common.boldfont, P_STRING,
383 &display.entry_boldfont,
384 prefs_set_data_from_entry, prefs_set_entry},
385 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
386 &prefs_common.normalfont, P_STRING,
387 &display.entry_normalfont,
388 prefs_set_data_from_entry, prefs_set_entry},
391 {"display_folder_unread_num", "TRUE",
392 &prefs_common.display_folder_unread, P_BOOL,
393 &display.chkbtn_folder_unread,
394 prefs_set_data_from_toggle, prefs_set_toggle},
396 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
397 &display.chkbtn_transhdr,
398 prefs_set_data_from_toggle, prefs_set_toggle},
400 /* Display: Summary View */
401 {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL,
402 &display.chkbtn_swapfrom,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
405 &display.chkbtn_hscrollbar,
406 prefs_set_data_from_toggle, prefs_set_toggle},
407 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
408 &display.chkbtn_useaddrbook,
409 prefs_set_data_from_toggle, prefs_set_toggle},
410 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
411 P_STRING, &display.entry_datefmt,
412 prefs_set_data_from_entry, prefs_set_entry},
413 {"expand_thread", "TRUE", &prefs_common.expand_thread, P_BOOL,
414 &display.chkbtn_expand_thread,
415 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
417 &display.chkbtn_bold_unread,
418 prefs_set_data_from_toggle, prefs_set_toggle},
420 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
423 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
425 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
428 {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL,
430 {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL,
432 {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL,
434 {"show_number", "FALSE", &prefs_common.show_number, P_BOOL,
436 {"show_score", "TRUE", &prefs_common.show_score, P_BOOL,
438 {"show_size", "FALSE", &prefs_common.show_size, P_BOOL,
440 {"show_date", "TRUE", &prefs_common.show_date, P_BOOL,
442 {"show_from", "TRUE", &prefs_common.show_from, P_BOOL,
444 {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL,
448 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
450 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
452 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
454 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
456 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
458 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
460 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
462 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
464 {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT,
466 {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT,
468 {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT,
470 {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT,
472 {"summary_col_score", "40", &prefs_common.summary_col_score,
473 P_INT, NULL, NULL, NULL},
474 {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT,
476 {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT,
478 {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT,
480 {"summary_col_subject", "200", &prefs_common.summary_col_subject,
481 P_INT, NULL, NULL, NULL},
482 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
484 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
486 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
488 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
490 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
492 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
494 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
496 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
498 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
500 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
502 {"compose_width", "600", &prefs_common.compose_width, P_INT,
504 {"compose_height", "560", &prefs_common.compose_height, P_INT,
508 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
509 &message.chkbtn_enablecol,
510 prefs_set_data_from_toggle, prefs_set_toggle},
512 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT,
514 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT,
516 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT,
518 {"uri_color", "32512", &prefs_common.uri_col, P_INT,
520 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
522 {"signature_color", "0", &prefs_common.sig_col, P_USHORT,
524 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
525 P_BOOL, NULL, NULL, NULL},
527 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
528 &message.chkbtn_mbalnum,
529 prefs_set_data_from_toggle, prefs_set_toggle},
530 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
531 P_BOOL, &message.chkbtn_disphdrpane,
532 prefs_set_data_from_toggle, prefs_set_toggle},
533 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
534 &message.chkbtn_disphdr,
535 prefs_set_data_from_toggle, prefs_set_toggle},
536 {"line_space", "2", &prefs_common.line_space, P_INT,
537 &message.spinbtn_linespc,
538 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
539 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
540 &message.chkbtn_headspc,
541 prefs_set_data_from_toggle, prefs_set_toggle},
543 {"enable_smooth_scroll", "FALSE",
544 &prefs_common.enable_smooth_scroll, P_BOOL,
545 &message.chkbtn_smoothscroll,
546 prefs_set_data_from_toggle, prefs_set_toggle},
547 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
548 &message.spinbtn_scrollstep,
549 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
550 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
551 &message.chkbtn_halfpage,
552 prefs_set_data_from_toggle, prefs_set_toggle},
554 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
558 {"mime_image_viewer", "display '%s'",
559 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
560 {"mime_audio_player", "play '%s'",
561 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
565 {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL,
566 &privacy.checkbtn_default_encrypt,
567 prefs_set_data_from_toggle, prefs_set_toggle},
568 {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL,
569 &privacy.checkbtn_default_sign,
570 prefs_set_data_from_toggle, prefs_set_toggle},
571 {"auto_check_signatures", "TRUE",
572 &prefs_common.auto_check_signatures, P_BOOL,
573 &privacy.checkbtn_auto_check_signatures,
574 prefs_set_data_from_toggle, prefs_set_toggle},
575 {"gpg_signature_popup", "FALSE",
576 &prefs_common.gpg_signature_popup, P_BOOL,
577 &privacy.checkbtn_gpg_signature_popup,
578 prefs_set_data_from_toggle, prefs_set_toggle},
580 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
581 &privacy.checkbtn_passphrase_grab,
582 prefs_set_data_from_toggle, prefs_set_toggle},
583 #endif /* __MINGW32__ */
584 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
585 &privacy.checkbtn_gpg_warning,
586 prefs_set_data_from_toggle, prefs_set_toggle},
587 {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING,
588 &privacy.optmenu_default_signkey,
589 prefs_common_default_signkey_set_data_from_optmenu,
590 prefs_common_default_signkey_set_optmenu},
591 #endif /* USE_GPGME */
594 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
596 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
599 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
600 NULL, NULL, NULL}, */
602 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
603 P_BOOL, &interface.checkbtn_openunread,
604 prefs_set_data_from_toggle, prefs_set_toggle},
605 {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc,
606 P_BOOL, &interface.checkbtn_openinbox,
607 prefs_set_data_from_toggle, prefs_set_toggle},
608 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
609 &interface.checkbtn_immedexec,
610 prefs_set_data_from_toggle, prefs_set_toggle},
611 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
612 &interface.optmenu_recvdialog,
613 prefs_common_recv_dialog_set_data_from_optmenu,
614 prefs_common_recv_dialog_set_optmenu},
615 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
616 &interface.optmenu_nextunreadmsgdialog,
617 prefs_nextunreadmsgdialog_set_data_from_optmenu,
618 prefs_nextunreadmsgdialog_set_optmenu},
620 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
621 P_BOOL, &interface.checkbtn_addaddrbyclick,
622 prefs_set_data_from_toggle, prefs_set_toggle},
623 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
624 &interface.checkbtn_confonexit,
625 prefs_set_data_from_toggle, prefs_set_toggle},
626 {"send_return_receipt", "TRUE", &prefs_common.return_receipt, P_BOOL,
627 &send.checkbtn_returnreceipt,
628 prefs_set_data_from_toggle, prefs_set_toggle},
629 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
630 &interface.checkbtn_cleanonexit,
631 prefs_set_data_from_toggle, prefs_set_toggle},
632 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
633 &interface.checkbtn_askonclean,
634 prefs_set_data_from_toggle, prefs_set_toggle},
635 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
636 P_BOOL, &interface.checkbtn_warnqueued,
637 prefs_set_data_from_toggle, prefs_set_toggle},
640 {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
641 &prefs_common.uri_cmd, P_STRING,
642 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
643 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
644 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
645 {"ext_editor_command", "gedit %s",
646 &prefs_common.ext_editor_cmd, P_STRING,
647 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
649 {"kill_score", "-9999", &prefs_common.kill_score, P_INT,
651 {"important_score", "1", &prefs_common.important_score, P_INT,
654 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
657 /* widget creating functions */
658 static void prefs_common_create (void);
659 static void prefs_receive_create (void);
660 static void prefs_send_create (void);
661 static void prefs_compose_create (void);
662 static void prefs_display_create (void);
663 static void prefs_message_create (void);
665 static void prefs_privacy_create (void);
667 static void prefs_interface_create (void);
668 static void prefs_other_create (void);
670 static void date_format_ok_btn_clicked (GtkButton *button,
672 static void date_format_cancel_btn_clicked (GtkButton *button,
674 static void date_format_key_pressed (GtkWidget *keywidget,
677 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
680 static void date_format_entry_on_change (GtkEditable *editable,
682 static void date_format_select_row (GtkWidget *date_format_list,
685 GdkEventButton *event,
686 GtkWidget *date_format);
687 static GtkWidget *date_format_create (GtkButton *button,
690 static void prefs_quote_description (void);
691 static void prefs_quote_description_create (void);
692 static void prefs_quote_colors_dialog (void);
693 static void prefs_quote_colors_dialog_create (void);
694 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
697 static void quote_color_set_dialog (GtkWidget *widget,
699 static void quote_colors_set_dialog_ok (GtkWidget *widget,
701 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
703 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
706 static void set_button_bg_color (GtkWidget *widget,
708 static void prefs_enable_message_color_toggled (void);
709 static void prefs_recycle_colors_toggled (GtkWidget *widget);
711 /* functions for setting items of SummaryView */
712 static void prefs_summary_display_item_dialog_create
713 (gboolean *cancelled);
714 static void display_item_ok (GtkWidget *widget,
715 gboolean *cancelled);
716 static void display_item_cancel (GtkWidget *widget,
717 gboolean *cancelled);
718 static gint display_item_delete_event (GtkWidget *widget,
720 gboolean *cancelled);
721 static void display_item_key_pressed (GtkWidget *widget,
723 gboolean *cancelled);
725 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
727 static void prefs_font_selection_key_pressed (GtkWidget *widget,
730 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
732 static gint prefs_common_deleted (GtkWidget *widget,
735 static void prefs_common_key_pressed (GtkWidget *widget,
738 static void prefs_common_ok (void);
739 static void prefs_common_apply (void);
740 static void prefs_common_cancel (void);
742 static void compose_prefs_fmt_open(void);
743 static void compose_prefs_fmt_create(void);
745 void prefs_common_read_config(void)
747 prefs_read_config(param, "Common", COMMON_RC);
750 void prefs_common_save_config(void)
752 prefs_save_config(param, "Common", COMMON_RC);
755 void prefs_common_open(void)
757 if (prefs_rc_is_readonly(COMMON_RC))
762 if (!dialog.window) {
763 prefs_common_create();
766 manage_window_set_transient(GTK_WINDOW(dialog.window));
767 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
768 gtk_widget_grab_focus(dialog.ok_btn);
770 prefs_set_dialog(param);
772 gtk_widget_show(dialog.window);
775 static void prefs_common_create(void)
779 debug_print(_("Creating common preferences window...\n"));
781 prefs_dialog_create(&dialog);
782 gtk_window_set_title (GTK_WINDOW(dialog.window),
783 _("Common Preferences"));
784 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
785 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
786 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
787 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
788 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event",
789 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
790 gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event",
791 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
792 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
793 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
794 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
795 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
796 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
797 GTK_SIGNAL_FUNC(prefs_common_cancel),
798 GTK_OBJECT(dialog.window));
800 /* create all widgets on notebook */
801 prefs_receive_create();
802 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
804 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
805 prefs_compose_create();
806 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
807 prefs_display_create();
808 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
809 prefs_message_create();
810 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
812 prefs_privacy_create();
813 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
815 prefs_interface_create();
816 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
817 prefs_other_create();
818 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
820 compose_prefs_fmt_create();
822 gtk_widget_show_all(dialog.window);
825 static void prefs_receive_create(void)
829 GtkWidget *frame_incext;
830 GtkWidget *checkbtn_incext;
832 GtkWidget *label_incext;
833 GtkWidget *entry_incext;
834 /* GtkWidget *button_incext; */
836 GtkWidget *frame_spool;
837 GtkWidget *checkbtn_local;
838 GtkWidget *checkbtn_filter_on_inc;
839 GtkWidget *label_spool;
840 GtkWidget *entry_spool;
842 GtkWidget *hbox_autochk;
843 GtkWidget *checkbtn_autochk;
844 GtkWidget *label_autochk1;
845 GtkObject *spinbtn_autochk_adj;
846 GtkWidget *spinbtn_autochk;
847 GtkWidget *label_autochk2;
848 GtkWidget *checkbtn_chkonstartup;
849 GtkWidget *checkbtn_noerrorpanel;
850 GtkWidget *checkbtn_scan_after_inc;
853 GtkWidget *frame_news;
854 GtkWidget *label_maxarticle;
855 GtkWidget *spinbtn_maxarticle;
856 GtkObject *spinbtn_maxarticle_adj;
858 vbox1 = gtk_vbox_new (FALSE, VSPACING);
859 gtk_widget_show (vbox1);
860 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
861 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
863 PACK_FRAME(vbox1, frame_incext, _("External program"));
865 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
866 gtk_widget_show (vbox2);
867 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
868 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
870 /* Use of external incorporation program */
871 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
872 _("Use external program for incorporation"));
874 hbox = gtk_hbox_new (FALSE, 8);
875 gtk_widget_show (hbox);
876 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
877 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
879 label_incext = gtk_label_new (_("Program path"));
880 gtk_widget_show (label_incext);
881 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
883 entry_incext = gtk_entry_new ();
884 gtk_widget_show (entry_incext);
885 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
887 button_incext = gtk_button_new_with_label ("... ");
888 gtk_widget_show (button_incext);
889 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
891 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
893 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
894 gtk_widget_show (vbox2);
895 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
896 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
898 hbox = gtk_hbox_new (FALSE, 32);
899 gtk_widget_show (hbox);
900 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
902 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
903 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
904 _("Filter on incorporation"));
905 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
907 hbox = gtk_hbox_new (FALSE, 8);
908 gtk_widget_show (hbox);
909 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
910 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
912 label_spool = gtk_label_new (_("Spool directory"));
913 gtk_widget_show (label_spool);
914 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
916 entry_spool = gtk_entry_new ();
917 gtk_widget_show (entry_spool);
918 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
920 vbox2 = gtk_vbox_new (FALSE, 0);
921 gtk_widget_show (vbox2);
922 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
925 hbox_autochk = gtk_hbox_new (FALSE, 8);
926 gtk_widget_show (hbox_autochk);
927 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
929 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
930 _("Auto-check new mail"));
932 label_autochk1 = gtk_label_new (_("every"));
933 gtk_widget_show (label_autochk1);
934 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
936 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
937 spinbtn_autochk = gtk_spin_button_new
938 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
939 gtk_widget_show (spinbtn_autochk);
940 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
941 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
942 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
944 label_autochk2 = gtk_label_new (_("minute(s)"));
945 gtk_widget_show (label_autochk2);
946 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
948 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
949 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
950 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
952 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
953 _("Check new mail on startup"));
955 PACK_CHECK_BUTTON (vbox2, checkbtn_noerrorpanel,
956 _("No error popup on receive error"));
957 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
958 _("Update all local folders after incorporation"));
961 PACK_FRAME(vbox1, frame_news, _("News"));
963 hbox = gtk_hbox_new (FALSE, 8);
964 gtk_widget_show (hbox);
965 gtk_container_add (GTK_CONTAINER (frame_news), hbox);
966 gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
968 label_maxarticle = gtk_label_new
969 (_("Maximum article number to download\n"
970 "(unlimited if 0 is specified)"));
971 gtk_widget_show (label_maxarticle);
972 gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0);
973 gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT);
975 spinbtn_maxarticle_adj =
976 gtk_adjustment_new (300, 0, 10000, 10, 100, 100);
977 spinbtn_maxarticle = gtk_spin_button_new
978 (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0);
979 gtk_widget_show (spinbtn_maxarticle);
980 gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle,
982 gtk_widget_set_usize (spinbtn_maxarticle, 64, -1);
983 gtk_spin_button_set_numeric
984 (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE);
986 receive.checkbtn_incext = checkbtn_incext;
987 receive.entry_incext = entry_incext;
988 /* receive.button_incext = button_incext; */
990 receive.checkbtn_local = checkbtn_local;
991 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
992 receive.entry_spool = entry_spool;
994 receive.checkbtn_autochk = checkbtn_autochk;
995 receive.spinbtn_autochk = spinbtn_autochk;
996 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
998 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
999 receive.checkbtn_noerrorpanel = checkbtn_noerrorpanel;
1000 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1003 receive.spinbtn_maxarticle = spinbtn_maxarticle;
1004 receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj;
1007 static void prefs_send_create(void)
1011 GtkWidget *frame_extsend;
1012 GtkWidget *vbox_extsend;
1013 GtkWidget *checkbtn_extsend;
1015 GtkWidget *label_extsend;
1016 GtkWidget *entry_extsend;
1017 /* GtkWidget *button_extsend; */
1018 GtkWidget *checkbtn_savemsg;
1019 GtkWidget *checkbtn_queuemsg;
1020 GtkWidget *label_outcharset;
1022 GtkWidget *optmenu_menu;
1023 GtkWidget *menuitem;
1024 GtkWidget *checkbtn_returnreceipt;
1026 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1027 gtk_widget_show (vbox1);
1028 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1029 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1031 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1033 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1034 gtk_widget_show (vbox_extsend);
1035 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1036 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1038 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1039 _("Use external program for sending"));
1041 hbox1 = gtk_hbox_new (FALSE, 8);
1042 gtk_widget_show (hbox1);
1043 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1044 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1046 label_extsend = gtk_label_new (_("Program path"));
1047 gtk_widget_show (label_extsend);
1048 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1050 entry_extsend = gtk_entry_new ();
1051 gtk_widget_show (entry_extsend);
1052 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1055 button_extsend = gtk_button_new_with_label ("... ");
1056 gtk_widget_show (button_extsend);
1057 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1060 vbox2 = gtk_vbox_new (FALSE, 0);
1061 gtk_widget_show (vbox2);
1062 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1064 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1065 _("Save sent messages to outbox"));
1066 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1067 _("Queue messages that fail to send"));
1068 PACK_CHECK_BUTTON (vbox2, checkbtn_returnreceipt,
1069 _("Send return receipt on request"));
1071 hbox1 = gtk_hbox_new (FALSE, 8);
1072 gtk_widget_show (hbox1);
1073 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1075 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1076 gtk_widget_show (label_outcharset);
1077 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1079 optmenu = gtk_option_menu_new ();
1080 gtk_widget_show (optmenu);
1081 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1083 optmenu_menu = gtk_menu_new ();
1085 #define SET_MENUITEM(str, charset) \
1087 MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \
1090 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1091 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1093 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1095 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1096 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1097 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1098 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1099 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1100 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1102 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1104 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1106 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251);
1107 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1109 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1111 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1112 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1114 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1115 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1117 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1118 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1120 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1122 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1124 send.checkbtn_extsend = checkbtn_extsend;
1125 send.entry_extsend = entry_extsend;
1126 /* send.button_extsend = button_extsend; */
1128 send.checkbtn_savemsg = checkbtn_savemsg;
1129 send.checkbtn_queuemsg = checkbtn_queuemsg;
1130 send.checkbtn_returnreceipt = checkbtn_returnreceipt;
1132 send.optmenu_charset = optmenu;
1136 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1141 g_return_if_fail(param);
1142 g_return_if_fail(param->data);
1143 g_return_if_fail(param->widget);
1144 g_return_if_fail(*(param->widget));
1146 dict_name = gtkpspell_get_dictionary_menu_active_item
1147 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1148 str = *((gchar **) param->data);
1151 *((gchar **) param->data) = dict_name;
1154 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1157 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1159 GtkWidget *menuitem;
1163 g_return_if_fail(optmenu != NULL);
1164 g_return_if_fail(pparam->data != NULL);
1166 if (*(gchar **) pparam->data) {
1167 menu = gtk_option_menu_get_menu(optmenu);
1168 for (cur = GTK_MENU_SHELL(menu)->children;
1169 cur != NULL; cur = cur->next) {
1170 menuitem = GTK_WIDGET(cur->data);
1171 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem), "dict_name");
1172 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1173 gtk_option_menu_set_history(optmenu, n);
1180 gtk_option_menu_set_history(optmenu, 0);
1181 prefs_dictionary_set_data_from_optmenu(pparam);
1184 static void prefs_compose_checkbtn_enable_pspell_toggle_cb
1190 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1191 gtk_widget_set_sensitive(compose.entry_pspell_path, toggled);
1192 gtk_widget_set_sensitive(compose.optmenu_dictionary, toggled);
1193 gtk_widget_set_sensitive(compose.btn_pspell_path, toggled);
1196 static void prefs_compose_btn_pspell_path_clicked_cb(GtkWidget *widget,
1199 gchar *file_path, *tmp;
1200 GtkWidget *new_menu;
1202 file_path = filesel_select_file(_("Select dictionaries location"),
1203 prefs_common.pspell_path);
1204 if (file_path == NULL) {
1208 tmp=g_dirname(file_path);
1210 if (prefs_common.pspell_path)
1211 g_free(prefs_common.pspell_path);
1212 prefs_common.pspell_path = g_strdup_printf("%s%s",tmp,G_DIR_SEPARATOR_S);
1214 new_menu = gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path);
1215 gtk_option_menu_set_menu(GTK_OPTION_MENU(compose.optmenu_dictionary),
1218 gtk_entry_set_text(GTK_ENTRY(compose.entry_pspell_path), prefs_common.pspell_path);
1219 /* select first one */
1220 gtk_option_menu_set_history(GTK_OPTION_MENU(compose.optmenu_dictionary), 0);
1222 prefs_common.dictionary = gtkpspell_get_dictionary_menu_active_item(
1223 gtk_option_menu_get_menu(GTK_OPTION_MENU(compose.optmenu_dictionary)));
1231 static void prefs_compose_create(void)
1238 GtkWidget *frame_quote;
1239 GtkWidget *vbox_quote;
1240 GtkWidget *checkbtn_quote;
1242 GtkWidget *label_quotemark;
1243 GtkWidget *entry_quotemark;
1245 GtkWidget *label_quotefmt;
1246 GtkWidget *btn_quotedesc;
1247 GtkWidget *scrolledwin_quotefmt;
1248 GtkWidget *text_quotefmt;
1253 GtkWidget *btn_quotefmt;
1255 GtkWidget *frame_sig;
1256 GtkWidget *vbox_sig;
1257 GtkWidget *checkbtn_autosig;
1258 GtkWidget *label_sigsep;
1259 GtkWidget *entry_sigsep;
1261 GtkWidget *frame_autosel;
1262 GtkWidget *hbox_autosel;
1263 GtkWidget *vbox_autosel;
1264 GtkWidget *checkbtn_reply_account_autosel;
1265 GtkWidget *checkbtn_forward_account_autosel;
1266 GtkWidget *checkbtn_reedit_account_autosel;
1268 GtkWidget *checkbtn_autoextedit;
1270 GtkWidget *vbox_linewrap;
1275 GtkWidget *label_linewrap;
1276 GtkObject *spinbtn_linewrap_adj;
1277 GtkWidget *spinbtn_linewrap;
1278 GtkWidget *checkbtn_wrapquote;
1279 GtkWidget *checkbtn_wrapatsend;
1281 GtkWidget *checkbtn_forward_as_attachment;
1282 GtkWidget *checkbtn_smart_wrapping;
1283 GtkWidget *checkbtn_block_cursor;
1286 GtkWidget *frame_spell;
1287 GtkWidget *hbox_spell;
1288 GtkWidget *vbox_spell;
1289 GtkWidget *hbox_pspell_path;
1290 GtkWidget *checkbtn_enable_pspell;
1291 GtkWidget *label_pspell_path;
1292 GtkWidget *entry_pspell_path;
1293 GtkWidget *btn_pspell_path;
1294 GtkWidget *hbox_dictionary;
1295 GtkWidget *label_dictionary;
1296 GtkWidget *optmenu_dictionary;
1298 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1299 gtk_widget_show (vbox1);
1300 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1301 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1304 PACK_FRAME(vbox1, frame_quote, _("Quotation"));
1306 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1307 gtk_widget_show (vbox_quote);
1308 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1309 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1311 hbox1 = gtk_hbox_new (FALSE, 32);
1312 gtk_widget_show (hbox1);
1313 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1315 hbox2 = gtk_hbox_new (FALSE, 8);
1316 gtk_widget_show (hbox2);
1317 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1319 label_quotemark = gtk_label_new (_("Quotation mark"));
1320 gtk_widget_show (label_quotemark);
1321 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1323 entry_quotemark = gtk_entry_new ();
1324 gtk_widget_show (entry_quotemark);
1325 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1326 gtk_widget_set_usize (entry_quotemark, 64, -1);
1328 PACK_CHECK_BUTTON (hbox1, checkbtn_quote,
1329 _("Quote message when replying"));
1331 hbox2 = gtk_hbox_new (FALSE, 0);
1332 gtk_widget_show (hbox2);
1333 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0);
1335 label_quotefmt = gtk_label_new (_("Quotation format:"));
1336 gtk_widget_show (label_quotefmt);
1337 gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0);
1340 gtk_button_new_with_label (_(" Description of symbols "));
1342 gtk_widget_show (btn_quotedesc);
1343 gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0);
1344 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
1345 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
1348 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1349 gtk_widget_show (scrolledwin_quotefmt);
1350 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1351 gtk_scrolled_window_set_policy
1352 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1353 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1355 text_quotefmt = gtk_text_new (NULL, NULL);
1356 gtk_widget_show (text_quotefmt);
1357 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1358 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
1359 gtk_widget_set_usize(text_quotefmt, -1, 60);
1362 hbox1 = gtk_hbox_new (FALSE, 32);
1363 gtk_widget_show (hbox1);
1364 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1366 btn_quotefmt = gtk_button_new_with_label (_(" Quote format "));
1367 gtk_widget_show (btn_quotefmt);
1368 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotefmt, FALSE, FALSE, 0);
1369 gtk_signal_connect(GTK_OBJECT(btn_quotefmt), "clicked",
1370 GTK_SIGNAL_FUNC(compose_prefs_fmt_open), NULL);
1372 PACK_FRAME(vbox1, frame_sig, _("Signature"));
1374 vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW);
1375 gtk_widget_show (vbox_sig);
1376 gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig);
1377 gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8);
1379 PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig,
1380 _("Insert signature automatically"));
1382 hbox1 = gtk_hbox_new (FALSE, 8);
1383 gtk_widget_show (hbox1);
1384 gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0);
1385 label_sigsep = gtk_label_new (_("Signature separator"));
1386 gtk_widget_show (label_sigsep);
1387 gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0);
1389 entry_sigsep = gtk_entry_new ();
1390 gtk_widget_show (entry_sigsep);
1391 gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0);
1393 gtk_widget_set_usize (entry_sigsep, 64, -1);
1395 /* Automatic (Smart) Account Selection */
1396 PACK_FRAME(vbox1, frame_autosel, _("Automatic Account Selection"));
1398 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1399 gtk_widget_show (hbox_autosel);
1400 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1401 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1403 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1404 _("when replying"));
1405 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1406 _("when forwarding"));
1407 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1408 _("when re-editing"));
1410 vbox2 = gtk_vbox_new (FALSE, 0);
1411 gtk_widget_show (vbox2);
1412 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1414 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1415 _("Automatically launch the external editor"));
1417 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1420 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1421 gtk_widget_show (vbox_linewrap);
1422 gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0);
1424 hbox3 = gtk_hbox_new (FALSE, 8);
1425 gtk_widget_show (hbox3);
1426 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1429 label_linewrap = gtk_label_new (_("Wrap messages at"));
1430 gtk_widget_show (label_linewrap);
1431 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1433 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1434 spinbtn_linewrap = gtk_spin_button_new
1435 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1436 gtk_widget_show (spinbtn_linewrap);
1437 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1438 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1439 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1441 label_linewrap = gtk_label_new (_("characters"));
1442 gtk_widget_show (label_linewrap);
1443 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1445 PACK_VSPACER (vbox2, vbox3, VSPACING_NARROW_2);
1447 hbox4 = gtk_hbox_new (FALSE, 32);
1448 gtk_widget_show (hbox4);
1449 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1451 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1453 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1455 PACK_CHECK_BUTTON (vbox1, checkbtn_forward_as_attachment,
1456 _("Forward as attachment"));
1458 PACK_CHECK_BUTTON (vbox1, checkbtn_smart_wrapping,
1459 _("Smart wrapping (EXPERIMENTAL)"));
1461 PACK_CHECK_BUTTON (vbox1, checkbtn_block_cursor,
1465 /* spell checker defaults */
1466 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1467 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1468 gtk_widget_show (vbox_spell);
1469 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1470 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1472 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_pspell,
1473 _("Enable spell checker (EXPERIMENTAL)"));
1475 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_pspell), "toggled",
1476 GTK_SIGNAL_FUNC(prefs_compose_checkbtn_enable_pspell_toggle_cb),
1479 hbox_pspell_path = gtk_hbox_new (FALSE, 8);
1480 gtk_widget_show(hbox_pspell_path);
1481 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_pspell_path, TRUE, TRUE, 0);
1483 label_pspell_path = gtk_label_new (_("Dictionaries path"));
1484 gtk_widget_show(label_pspell_path);
1485 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), label_pspell_path, FALSE, FALSE, 0);
1487 entry_pspell_path = gtk_entry_new();
1488 gtk_widget_show(entry_pspell_path);
1489 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), entry_pspell_path, FALSE, FALSE, 0);
1490 gtk_widget_set_usize(entry_pspell_path, 150, -1);
1491 gtk_widget_set_sensitive(entry_pspell_path, prefs_common.enable_pspell);
1493 btn_pspell_path = gtk_button_new_with_label(_("..."));
1494 gtk_widget_show(btn_pspell_path);
1495 gtk_box_pack_start(GTK_BOX(hbox_pspell_path), btn_pspell_path, FALSE, FALSE, 0);
1496 gtk_widget_set_sensitive(btn_pspell_path, prefs_common.enable_pspell);
1498 gtk_signal_connect(GTK_OBJECT(btn_pspell_path), "clicked",
1499 GTK_SIGNAL_FUNC(prefs_compose_btn_pspell_path_clicked_cb),
1502 hbox_dictionary = gtk_hbox_new(FALSE, 8);
1503 gtk_widget_show(hbox_dictionary);
1504 gtk_box_pack_start(GTK_BOX(vbox_spell), hbox_dictionary, TRUE, TRUE, 0);
1506 label_dictionary = gtk_label_new(_("Dictionary"));
1507 gtk_widget_show(label_dictionary);
1508 gtk_box_pack_start(GTK_BOX(hbox_dictionary), label_dictionary, FALSE, FALSE, 0);
1510 optmenu_dictionary = gtk_option_menu_new();
1511 gtk_widget_show(optmenu_dictionary);
1512 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1513 gtkpspell_dictionary_option_menu_new(prefs_common.pspell_path));
1514 gtk_box_pack_start(GTK_BOX(hbox_dictionary), optmenu_dictionary, FALSE, FALSE, 0);
1515 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_pspell);
1519 compose.checkbtn_quote = checkbtn_quote;
1520 compose.entry_quotemark = entry_quotemark;
1521 compose.text_quotefmt = text_quotefmt;
1523 compose.checkbtn_autosig = checkbtn_autosig;
1524 compose.entry_sigsep = entry_sigsep;
1526 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1527 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1528 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1529 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1531 compose.spinbtn_linewrap = spinbtn_linewrap;
1532 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1533 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1534 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1536 compose.checkbtn_forward_as_attachment =
1537 checkbtn_forward_as_attachment;
1538 compose.checkbtn_smart_wrapping =
1539 checkbtn_smart_wrapping;
1540 compose.checkbtn_block_cursor =
1541 checkbtn_block_cursor;
1544 compose.checkbtn_enable_pspell = checkbtn_enable_pspell;
1545 compose.entry_pspell_path = entry_pspell_path;
1546 compose.btn_pspell_path = btn_pspell_path;
1547 compose.optmenu_dictionary = optmenu_dictionary;
1551 static void prefs_display_create(void)
1554 GtkWidget *frame_font;
1556 GtkWidget *label_textfont;
1557 GtkWidget *entry_textfont;
1558 GtkWidget *button_textfont;
1559 GtkWidget *chkbtn_folder_unread;
1560 GtkWidget *chkbtn_transhdr;
1561 GtkWidget *frame_summary;
1563 GtkWidget *chkbtn_swapfrom;
1564 GtkWidget *chkbtn_hscrollbar;
1565 GtkWidget *chkbtn_useaddrbook;
1566 GtkWidget *chkbtn_expand_thread;
1567 GtkWidget *chkbtn_bold_unread;
1570 GtkWidget *label_datefmt;
1571 GtkWidget *button_datefmt;
1572 GtkWidget *entry_datefmt;
1573 GtkWidget *button_dispitem;
1574 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
1576 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1577 gtk_widget_show (vbox1);
1578 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1579 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1581 PACK_FRAME(vbox1, frame_font, _("Font"));
1583 table1 = gtk_table_new (4, 3, FALSE);
1585 gtk_widget_show (table1);
1586 gtk_container_add (GTK_CONTAINER (frame_font), table1);
1587 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
1588 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
1589 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
1591 label_textfont = gtk_label_new (_("Text"));
1592 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
1593 gtk_widget_show (label_textfont);
1594 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
1595 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1597 entry_textfont = gtk_entry_new ();
1598 gtk_widget_show (entry_textfont);
1599 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
1600 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1602 button_textfont = gtk_button_new_with_label ("... ");
1604 gtk_widget_show (button_textfont);
1605 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
1607 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
1608 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
1610 tmplabel = gtk_label_new (_("Small"));
1611 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1612 gtk_widget_show (tmplabel);
1613 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
1614 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1616 tmpentry = gtk_entry_new ();
1617 gtk_widget_show (tmpentry);
1618 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
1619 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1621 tmpbutton = gtk_button_new_with_label (" ... ");
1622 gtk_widget_show (tmpbutton);
1623 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
1625 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1626 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1627 display.entry_smallfont = tmpentry;
1629 tmplabel = gtk_label_new (_("Normal"));
1630 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1631 gtk_widget_show (tmplabel);
1632 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
1633 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1635 tmpentry = gtk_entry_new ();
1636 gtk_widget_show (tmpentry);
1637 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
1638 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1640 tmpbutton = gtk_button_new_with_label (" ... ");
1641 gtk_widget_show (tmpbutton);
1642 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
1644 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1645 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1646 display.entry_normalfont = tmpentry;
1648 tmplabel = gtk_label_new (_("Bold"));
1649 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
1650 gtk_widget_show (tmplabel);
1651 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
1652 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1654 tmpentry = gtk_entry_new ();
1655 gtk_widget_show (tmpentry);
1656 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
1657 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
1659 tmpbutton = gtk_button_new_with_label (" ... ");
1660 gtk_widget_show (tmpbutton);
1661 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
1663 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
1664 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
1665 display.entry_boldfont = tmpentry;
1667 vbox2 = gtk_vbox_new (FALSE, 0);
1668 gtk_widget_show (vbox2);
1669 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1672 (vbox2, chkbtn_transhdr,
1673 _("Translate header name (such as `From:', `Subject:')"));
1675 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1676 _("Display unread number next to folder name"));
1678 /* ---- Summary ---- */
1680 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1682 vbox2 = gtk_vbox_new (FALSE, 0);
1683 gtk_widget_show (vbox2);
1684 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1685 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1688 (vbox2, chkbtn_swapfrom,
1689 _("Display recipient on `From' column if sender is yourself"));
1691 (vbox2, chkbtn_useaddrbook,
1692 _("Display sender using address book"));
1694 (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar"));
1696 (vbox2, chkbtn_expand_thread, _("Expand threads"));
1698 (vbox2, chkbtn_bold_unread,
1699 _("Display unread messages with bold font"));
1701 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1703 hbox1 = gtk_hbox_new (FALSE, 8);
1704 gtk_widget_show (hbox1);
1705 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1707 label_datefmt = gtk_label_new (_("Date format"));
1708 gtk_widget_show (label_datefmt);
1709 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1711 entry_datefmt = gtk_entry_new ();
1712 gtk_widget_show (entry_datefmt);
1713 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1715 button_datefmt = gtk_button_new_with_label ("... ");
1717 gtk_widget_show (button_datefmt);
1718 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1719 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
1720 GTK_SIGNAL_FUNC (date_format_create), NULL);
1722 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1724 hbox1 = gtk_hbox_new (FALSE, 8);
1725 gtk_widget_show (hbox1);
1726 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1728 button_dispitem = gtk_button_new_with_label
1729 (_(" Set display item of summary... "));
1730 gtk_widget_show (button_dispitem);
1731 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1732 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
1733 GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
1736 display.entry_textfont = entry_textfont;
1737 display.button_textfont = button_textfont;
1739 display.chkbtn_folder_unread = chkbtn_folder_unread;
1740 display.chkbtn_transhdr = chkbtn_transhdr;
1742 display.chkbtn_swapfrom = chkbtn_swapfrom;
1743 display.chkbtn_hscrollbar = chkbtn_hscrollbar;
1744 display.chkbtn_expand_thread = chkbtn_expand_thread;
1745 display.chkbtn_bold_unread = chkbtn_bold_unread;
1746 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1747 display.entry_datefmt = entry_datefmt;
1750 static void prefs_message_create(void)
1756 GtkWidget *chkbtn_enablecol;
1757 GtkWidget *button_edit_col;
1758 GtkWidget *chkbtn_mbalnum;
1759 GtkWidget *chkbtn_disphdrpane;
1760 GtkWidget *chkbtn_disphdr;
1761 GtkWidget *button_edit_disphdr;
1762 GtkWidget *hbox_linespc;
1763 GtkWidget *label_linespc;
1764 GtkObject *spinbtn_linespc_adj;
1765 GtkWidget *spinbtn_linespc;
1766 GtkWidget *chkbtn_headspc;
1768 GtkWidget *frame_scr;
1769 GtkWidget *vbox_scr;
1770 GtkWidget *chkbtn_smoothscroll;
1771 GtkWidget *hbox_scr;
1772 GtkWidget *label_scr;
1773 GtkObject *spinbtn_scrollstep_adj;
1774 GtkWidget *spinbtn_scrollstep;
1775 GtkWidget *chkbtn_halfpage;
1777 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1778 gtk_widget_show (vbox1);
1779 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1780 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1782 hbox1 = gtk_hbox_new (FALSE, 8);
1783 gtk_widget_show (hbox1);
1784 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0);
1786 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1787 _("Enable coloration of message"));
1788 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
1789 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
1792 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1793 gtk_widget_show (button_edit_col);
1794 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1795 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
1796 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
1798 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1800 vbox2 = gtk_vbox_new (FALSE, 0);
1801 gtk_widget_show (vbox2);
1802 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1805 (vbox2, chkbtn_mbalnum,
1806 _("Display 2-byte alphabet and numeric with 1-byte character"));
1807 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1808 _("Display header pane above message view"));
1810 hbox1 = gtk_hbox_new (FALSE, 8);
1811 gtk_widget_show (hbox1);
1812 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1814 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1815 _("Display short headers on message view"));
1817 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1818 gtk_widget_show (button_edit_disphdr);
1819 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1821 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
1822 GTK_SIGNAL_FUNC (prefs_display_header_open),
1825 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1827 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1829 hbox1 = gtk_hbox_new (FALSE, 32);
1830 gtk_widget_show (hbox1);
1831 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1833 hbox_linespc = gtk_hbox_new (FALSE, 8);
1834 gtk_widget_show (hbox1);
1835 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1837 label_linespc = gtk_label_new (_("Line space"));
1838 gtk_widget_show (label_linespc);
1839 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1842 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1843 spinbtn_linespc = gtk_spin_button_new
1844 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1845 gtk_widget_show (spinbtn_linespc);
1846 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1848 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
1849 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1851 label_linespc = gtk_label_new (_("pixel(s)"));
1852 gtk_widget_show (label_linespc);
1853 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1856 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1858 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1860 vbox_scr = gtk_vbox_new (FALSE, 0);
1861 gtk_widget_show (vbox_scr);
1862 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1863 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1865 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1867 hbox1 = gtk_hbox_new (FALSE, 32);
1868 gtk_widget_show (hbox1);
1869 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1871 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1873 hbox_scr = gtk_hbox_new (FALSE, 8);
1874 gtk_widget_show (hbox_scr);
1875 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1877 label_scr = gtk_label_new (_("Step"));
1878 gtk_widget_show (label_scr);
1879 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1881 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1882 spinbtn_scrollstep = gtk_spin_button_new
1883 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1884 gtk_widget_show (spinbtn_scrollstep);
1885 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1887 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
1888 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1891 label_scr = gtk_label_new (_("pixel(s)"));
1892 gtk_widget_show (label_scr);
1893 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1895 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1897 message.chkbtn_enablecol = chkbtn_enablecol;
1898 message.button_edit_col = button_edit_col;
1899 message.chkbtn_mbalnum = chkbtn_mbalnum;
1900 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1901 message.chkbtn_disphdr = chkbtn_disphdr;
1902 message.spinbtn_linespc = spinbtn_linespc;
1903 message.chkbtn_headspc = chkbtn_headspc;
1905 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1906 message.spinbtn_scrollstep = spinbtn_scrollstep;
1907 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1908 message.chkbtn_halfpage = chkbtn_halfpage;
1912 static void prefs_privacy_create(void)
1917 GtkWidget *checkbtn_default_encrypt;
1918 GtkWidget *checkbtn_default_sign;
1919 GtkWidget *checkbtn_auto_check_signatures;
1920 GtkWidget *checkbtn_gpg_signature_popup;
1921 GtkWidget *checkbtn_passphrase_grab;
1922 GtkWidget *checkbtn_gpg_warning;
1924 GtkWidget *menuitem;
1926 GtkWidget *optmenu_menu;
1928 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1929 gtk_widget_show (vbox1);
1930 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1931 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1933 vbox2 = gtk_vbox_new (FALSE, 0);
1934 gtk_widget_show (vbox2);
1935 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1937 PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt,
1938 _("Encrypt message by default"));
1940 PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign,
1941 _("Sign message by default"));
1943 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1944 _("Automatically check signatures"));
1946 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
1947 _("Show signature check result in a popup window"));
1950 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1951 _("Grab input while entering a passphrase"));
1955 (vbox2, checkbtn_gpg_warning,
1956 _("Display warning on startup if GnuPG doesn't work"));
1958 hbox1 = gtk_hbox_new (FALSE, 8);
1959 gtk_widget_show (hbox1);
1960 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1962 /* create default signkey box */
1963 label = gtk_label_new (_("Default Sign Key"));
1964 gtk_widget_show (label);
1965 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1966 optmenu = gtk_option_menu_new ();
1967 gtk_widget_show (optmenu);
1968 gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0);
1969 optmenu_menu = gtk_menu_new ();
1971 MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key");
1972 MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key");
1973 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
1974 /* FIXME: disabled because not implemented */
1975 gtk_widget_set_sensitive(optmenu, FALSE);
1977 privacy.checkbtn_default_encrypt = checkbtn_default_encrypt;
1978 privacy.checkbtn_default_sign = checkbtn_default_sign;
1979 privacy.checkbtn_auto_check_signatures
1980 = checkbtn_auto_check_signatures;
1981 privacy.checkbtn_gpg_signature_popup
1982 = checkbtn_gpg_signature_popup;
1983 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
1984 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
1985 privacy.optmenu_default_signkey = optmenu;
1989 prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam)
1993 GtkWidget *menuitem;
1996 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
1997 menuitem = gtk_menu_get_active(GTK_MENU(menu));
1998 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
1999 g_free(*((gchar **)pparam->data));
2000 *((gchar **)pparam->data) = g_strdup(charset);
2004 static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam)
2008 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2010 GtkWidget *menuitem;
2014 g_return_if_fail(optmenu != NULL);
2015 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2017 menu = gtk_option_menu_get_menu(optmenu);
2018 for (cur = GTK_MENU_SHELL(menu)->children;
2019 cur != NULL; cur = cur->next) {
2020 menuitem = GTK_WIDGET(cur->data);
2021 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
2022 if (!strcmp(charset, *((gchar **)pparam->data))) {
2023 gtk_option_menu_set_history(optmenu, n);
2029 gtk_option_menu_set_history(optmenu, 0);
2030 prefs_common_charset_set_data_from_optmenu(pparam);
2033 #endif /* USE_GPGME */
2035 static void prefs_interface_create(void)
2040 /* GtkWidget *checkbtn_emacs; */
2041 GtkWidget *checkbtn_openunread;
2042 GtkWidget *checkbtn_openinbox;
2043 GtkWidget *checkbtn_immedexec;
2046 GtkWidget *optmenu_recvdialog;
2048 GtkWidget *menuitem;
2050 GtkWidget *frame_addr;
2051 GtkWidget *vbox_addr;
2052 GtkWidget *checkbtn_addaddrbyclick;
2054 GtkWidget *frame_exit;
2055 GtkWidget *vbox_exit;
2056 GtkWidget *checkbtn_confonexit;
2057 GtkWidget *checkbtn_cleanonexit;
2058 GtkWidget *checkbtn_askonclean;
2059 GtkWidget *checkbtn_warnqueued;
2062 GtkWidget *optmenu_nextunreadmsgdialog;
2063 GtkWidget *optmenu_nextunreadmsgdialog_menu;
2064 GtkWidget *nextunreadmsgdialog_menuitem;
2066 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2067 gtk_widget_show (vbox1);
2068 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2069 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2071 vbox2 = gtk_vbox_new (FALSE, 0);
2072 gtk_widget_show (vbox2);
2073 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2075 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2076 _("Emulate the behavior of mouse operation of\n"
2077 "Emacs-based mailer"));
2078 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2079 GTK_JUSTIFY_LEFT); */
2082 (vbox2, checkbtn_openunread,
2083 _("Open first unread message when entering a folder"));
2086 (vbox2, checkbtn_openinbox,
2087 _("Go to inbox after receiving new mail"));
2089 vbox3 = gtk_vbox_new (FALSE, 0);
2090 gtk_widget_show (vbox3);
2091 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2094 (vbox3, checkbtn_immedexec,
2095 _("Execute immediately when moving or deleting messages"));
2097 hbox1 = gtk_hbox_new (FALSE, 0);
2098 gtk_widget_show (hbox1);
2099 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2101 label = gtk_label_new
2102 (_("(Messages will be just marked till execution\n"
2103 " if this is turned off)"));
2104 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2105 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2107 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2109 hbox1 = gtk_hbox_new (FALSE, 8);
2110 gtk_widget_show (hbox1);
2111 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
2113 label = gtk_label_new (_("Show receive dialog"));
2114 gtk_widget_show (label);
2115 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2117 optmenu_recvdialog = gtk_option_menu_new ();
2118 gtk_widget_show (optmenu_recvdialog);
2119 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_recvdialog,
2122 menu = gtk_menu_new ();
2123 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
2124 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
2125 RECV_DIALOG_ACTIVE);
2126 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
2128 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
2130 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2132 vbox_addr = gtk_vbox_new (FALSE, 0);
2133 gtk_widget_show (vbox_addr);
2134 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2135 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2138 (vbox_addr, checkbtn_addaddrbyclick,
2139 _("Add address to destination when double-clicked"));
2141 /* Next Unread Message Dialog */
2142 hbox2 = gtk_hbox_new (FALSE, 8);
2143 gtk_widget_show (hbox2);
2144 gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
2146 label = gtk_label_new (_("Show no-unread-message dialog"));
2147 gtk_widget_show (label);
2148 gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
2150 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2151 gtk_widget_show (optmenu_nextunreadmsgdialog);
2152 gtk_box_pack_start (GTK_BOX (hbox2), optmenu_nextunreadmsgdialog,
2155 optmenu_nextunreadmsgdialog_menu = gtk_menu_new ();
2156 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2157 _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2158 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2159 _("Assume 'Yes'"), NEXTUNREADMSGDIALOG_ASSUME_YES);
2160 MENUITEM_ADD (optmenu_nextunreadmsgdialog_menu, nextunreadmsgdialog_menuitem,
2161 _("Assume 'No'"), NEXTUNREADMSGDIALOG_ASSUME_NO);
2163 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog),
2164 optmenu_nextunreadmsgdialog_menu);
2167 /* Receive Dialog */
2168 /* hbox = gtk_hbox_new (FALSE, 8);
2169 gtk_widget_show (hbox);
2170 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
2172 label = gtk_label_new (_("Show receive Dialog"));
2173 gtk_widget_show (label);
2174 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
2176 recvdialog_optmenu = gtk_option_menu_new ();
2177 gtk_widget_show (recvdialog_optmenu);
2178 gtk_box_pack_start (GTK_BOX (hbox), recvdialog_optmenu, FALSE, FALSE, 0);
2180 recvdialog_optmenu_menu = gtk_menu_new ();
2182 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Always"), RECVDIALOG_ALWAYS);
2183 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Only if a sylpheed window is active"), RECVDIALOG_WINDOW_ACTIVE);
2184 MENUITEM_ADD (recvdialog_optmenu_menu, recvdialog_menuitem, _("Never"), RECVDIALOG_NEVER);
2186 gtk_option_menu_set_menu (GTK_OPTION_MENU (recvdialog_optmenu), recvdialog_optmenu_menu); */
2189 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2191 vbox_exit = gtk_vbox_new (FALSE, 0);
2192 gtk_widget_show (vbox_exit);
2193 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2194 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2196 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2197 _("Confirm on exit"));
2199 hbox1 = gtk_hbox_new (FALSE, 32);
2200 gtk_widget_show (hbox1);
2201 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2203 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2204 _("Empty trash on exit"));
2205 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2206 _("Ask before emptying"));
2207 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2209 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2210 _("Warn if there are queued messages"));
2212 /* interface.checkbtn_emacs = checkbtn_emacs; */
2213 interface.checkbtn_openunread = checkbtn_openunread;
2214 interface.checkbtn_openinbox = checkbtn_openinbox;
2215 interface.checkbtn_immedexec = checkbtn_immedexec;
2216 interface.optmenu_recvdialog = optmenu_recvdialog;
2217 interface.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2218 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2219 interface.checkbtn_confonexit = checkbtn_confonexit;
2220 interface.checkbtn_cleanonexit = checkbtn_cleanonexit;
2221 interface.checkbtn_askonclean = checkbtn_askonclean;
2222 interface.checkbtn_warnqueued = checkbtn_warnqueued;
2225 static void prefs_other_create(void)
2230 GtkWidget *uri_frame;
2231 GtkWidget *uri_label;
2232 GtkWidget *uri_combo;
2233 GtkWidget *uri_entry;
2235 GtkWidget *print_frame;
2236 GtkWidget *printcmd_label;
2237 GtkWidget *printcmd_entry;
2239 GtkWidget *exteditor_frame;
2240 GtkWidget *exteditor_label;
2241 GtkWidget *exteditor_combo;
2242 GtkWidget *exteditor_entry;
2244 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2245 gtk_widget_show (vbox1);
2246 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2247 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2249 PACK_FRAME(vbox1, uri_frame,
2250 _("External Web browser (%s will be replaced with URI)"));
2252 hbox1 = gtk_hbox_new (FALSE, 8);
2253 gtk_widget_show (hbox1);
2254 gtk_container_add (GTK_CONTAINER (uri_frame), hbox1);
2255 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2257 uri_label = gtk_label_new (_("Command"));
2258 gtk_widget_show(uri_label);
2259 gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0);
2261 uri_combo = gtk_combo_new ();
2262 gtk_widget_show (uri_combo);
2263 gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0);
2264 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2265 "netscape -remote 'openURL(%s,raise)'",
2267 "gnome-moz-remote --raise --newwin '%s'",
2268 "kterm -e w3m '%s'",
2269 "kterm -e lynx '%s'",
2272 uri_entry = GTK_COMBO (uri_combo)->entry;
2274 PACK_FRAME(vbox1, print_frame,
2275 _("Printing (%s will be replaced with file name)"));
2277 hbox1 = gtk_hbox_new (FALSE, 8);
2278 gtk_widget_show (hbox1);
2279 gtk_container_add (GTK_CONTAINER (print_frame), hbox1);
2280 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2282 printcmd_label = gtk_label_new (_("Command"));
2283 gtk_widget_show (printcmd_label);
2284 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0);
2286 printcmd_entry = gtk_entry_new ();
2287 gtk_widget_show (printcmd_entry);
2288 gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0);
2290 PACK_FRAME(vbox1, exteditor_frame,
2291 _("External editor (%s will be replaced with file name)"));
2293 hbox1 = gtk_hbox_new (FALSE, 8);
2294 gtk_widget_show (hbox1);
2295 gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1);
2296 gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8);
2298 exteditor_label = gtk_label_new (_("Command"));
2299 gtk_widget_show (exteditor_label);
2300 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0);
2302 exteditor_combo = gtk_combo_new ();
2303 gtk_widget_show (exteditor_combo);
2304 gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0);
2305 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2308 "mgedit --no-fork %s",
2314 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2316 other.uri_combo = uri_combo;
2317 other.uri_entry = uri_entry;
2318 other.printcmd_entry = printcmd_entry;
2320 other.exteditor_combo = exteditor_combo;
2321 other.exteditor_entry = exteditor_entry;
2324 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2326 GtkWidget *datefmt_sample = NULL;
2329 g_return_if_fail(widget != NULL);
2330 g_return_if_fail(*widget != NULL);
2331 g_return_if_fail(display.entry_datefmt != NULL);
2333 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2334 (GTK_OBJECT(*widget), "datefmt_sample"));
2335 g_return_if_fail(datefmt_sample != NULL);
2337 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2338 g_free(prefs_common.date_format);
2339 prefs_common.date_format = text;
2340 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2342 gtk_widget_destroy(*widget);
2346 static void date_format_cancel_btn_clicked(GtkButton *button,
2349 g_return_if_fail(widget != NULL);
2350 g_return_if_fail(*widget != NULL);
2352 gtk_widget_destroy(*widget);
2356 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2359 if (event && event->keyval == GDK_Escape)
2360 date_format_cancel_btn_clicked(NULL, widget);
2363 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2364 GdkEventAny *event, GtkWidget **widget)
2366 g_return_val_if_fail(widget != NULL, FALSE);
2367 g_return_val_if_fail(*widget != NULL, FALSE);
2373 static void date_format_entry_on_change(GtkEditable *editable,
2377 struct tm *cal_time;
2381 cur_time = time(NULL);
2382 cal_time = localtime(&cur_time);
2384 text = gtk_editable_get_chars(editable, 0, -1);
2386 strftime(buffer, sizeof buffer, text, cal_time);
2387 gtk_label_set_text(example, buffer);
2390 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2391 gint column, GdkEventButton *event,
2392 GtkWidget *date_format)
2398 GtkWidget *datefmt_sample;
2400 /* only on double click */
2401 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2404 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2405 (GTK_OBJECT(date_format), "datefmt_sample"));
2407 g_return_if_fail(date_format_list != NULL);
2408 g_return_if_fail(date_format != NULL);
2409 g_return_if_fail(datefmt_sample != NULL);
2411 /* get format from clist */
2412 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2414 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2415 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2417 /* insert the format into the text entry */
2418 new_format = g_malloc(strlen(old_format) + 3);
2420 strncpy(new_format, old_format, cur_pos);
2421 new_format[cur_pos] = '\0';
2422 strcat(new_format, format);
2423 strcat(new_format, &old_format[cur_pos]);
2425 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2426 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2431 static GtkWidget *date_format_create(GtkButton *button, void *data)
2433 static GtkWidget *datefmt_win = NULL;
2435 GtkWidget *scrolledwindow1;
2436 GtkWidget *datefmt_clist;
2441 GtkWidget *confirm_area;
2443 GtkWidget *cancel_btn;
2444 GtkWidget *datefmt_entry;
2450 { "%a", _("the full abbreviated weekday name") },
2451 { "%A", _("the full weekday name") },
2452 { "%b", _("the abbreviated month name") },
2453 { "%B", _("the full month name") },
2454 { "%c", _("the preferred date and time for the current locale") },
2455 { "%C", _("the century number (year/100)") },
2456 { "%d", _("the day of the month as a decimal number") },
2457 { "%H", _("the hour as a decimal number using a 24-hour clock") },
2458 { "%I", _("the hour as a decimal number using a 12-hour clock") },
2459 { "%j", _("the day of the year as a decimal number") },
2460 { "%m", _("the month as a decimal number") },
2461 { "%M", _("the minute as a decimal number") },
2462 { "%p", _("either AM or PM") },
2463 { "%S", _("the second as a decimal number") },
2464 { "%w", _("the day of the week as a decimal number") },
2465 { "%x", _("the preferred date for the current locale") },
2466 { "%y", _("the last two digits of a year") },
2467 { "%Y", _("the year as a decimal number") },
2468 { "%Z", _("the time zone or name or abbreviation") }
2473 const gint TIME_FORMAT_ELEMS =
2474 sizeof time_format / sizeof time_format[0];
2476 if (datefmt_win) return datefmt_win;
2478 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
2479 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2480 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2481 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2482 gtk_widget_set_usize(datefmt_win, 440, 280);
2484 vbox1 = gtk_vbox_new(FALSE, 10);
2485 gtk_widget_show(vbox1);
2486 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2488 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2489 gtk_scrolled_window_set_policy
2490 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2491 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2492 gtk_widget_show(scrolledwindow1);
2493 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2495 titles[0] = _("Specifier");
2496 titles[1] = _("Description");
2497 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2498 gtk_widget_show(datefmt_clist);
2499 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2500 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2502 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2503 GTK_SELECTION_BROWSE);
2505 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2507 /* phoney casting necessary because of gtk... */
2508 text[0] = (gchar *)time_format[i].fmt;
2509 text[1] = (gchar *)time_format[i].txt;
2510 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2513 table = gtk_table_new(2, 2, FALSE);
2514 gtk_widget_show(table);
2515 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2516 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2517 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2519 label1 = gtk_label_new(_("Date format"));
2520 gtk_widget_show(label1);
2521 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2523 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2524 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2526 datefmt_entry = gtk_entry_new_with_max_length(256);
2527 gtk_widget_show(datefmt_entry);
2528 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2529 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2531 /* we need the "sample" entry box; add it as data so callbacks can
2532 * get the entry box */
2533 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
2536 label2 = gtk_label_new(_("Example"));
2537 gtk_widget_show(label2);
2538 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2540 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2541 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2543 label3 = gtk_label_new("");
2544 gtk_widget_show(label3);
2545 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2546 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2547 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2548 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2550 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2551 &cancel_btn, _("Cancel"), NULL, NULL);
2552 gtk_widget_grab_default(ok_btn);
2553 gtk_widget_show(confirm_area);
2555 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2557 /* set the current format */
2558 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2559 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2562 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2563 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
2565 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
2566 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
2568 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
2569 GTK_SIGNAL_FUNC(date_format_key_pressed),
2571 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
2572 GTK_SIGNAL_FUNC(date_format_on_delete),
2574 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
2575 GTK_SIGNAL_FUNC(date_format_entry_on_change),
2578 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
2579 GTK_SIGNAL_FUNC(date_format_select_row),
2582 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2583 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2585 gtk_widget_show(datefmt_win);
2586 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2588 gtk_widget_grab_focus(ok_btn);
2593 void prefs_quote_colors_dialog(void)
2595 if (!quote_color_win)
2596 prefs_quote_colors_dialog_create();
2597 gtk_widget_show(quote_color_win);
2598 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2601 gtk_widget_hide(quote_color_win);
2603 textview_update_message_colors();
2604 main_window_reflect_prefs_all();
2607 static void prefs_quote_colors_dialog_create(void)
2612 GtkWidget *quotelevel1_label;
2613 GtkWidget *quotelevel2_label;
2614 GtkWidget *quotelevel3_label;
2615 GtkWidget *uri_label;
2616 GtkWidget *tgt_folder_label;
2619 //GtkWidget *cancel_btn;
2620 GtkWidget *recycle_colors_btn;
2621 GtkWidget *frame_colors;
2623 window = gtk_window_new(GTK_WINDOW_DIALOG);
2624 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2625 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2626 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2627 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2628 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2630 vbox = gtk_vbox_new (FALSE, VSPACING);
2631 gtk_container_add (GTK_CONTAINER (window), vbox);
2632 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2633 PACK_FRAME(vbox, frame_colors, _("Colors"));
2635 table = gtk_table_new (4, 2, FALSE);
2636 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2637 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2638 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2639 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2642 color_buttons.quote_level1_btn = gtk_button_new();
2643 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2644 0, 1, 0, 1, 0, 0, 0, 0);
2645 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
2646 gtk_container_set_border_width
2647 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2649 color_buttons.quote_level2_btn = gtk_button_new();
2650 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2651 0, 1, 1, 2, 0, 0, 0, 0);
2652 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
2653 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2655 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2656 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2657 0, 1, 2, 3, 0, 0, 0, 0);
2658 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
2659 gtk_container_set_border_width
2660 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2662 color_buttons.uri_btn = gtk_button_new_with_label ("");
2663 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2664 0, 1, 3, 4, 0, 0, 0, 0);
2665 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
2666 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2668 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2669 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2670 0, 1, 4, 5, 0, 0, 0, 0);
2671 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
2672 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2674 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2675 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2676 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2677 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2678 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2680 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2681 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2682 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2683 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2684 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2686 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2687 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2688 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2689 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2690 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2692 uri_label = gtk_label_new (_("URI link"));
2693 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2694 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2695 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2696 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2698 tgt_folder_label = gtk_label_new (_("Target folder"));
2699 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2700 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2701 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2702 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2704 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2705 _("Recycle quote colors"));
2707 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2708 NULL, NULL, NULL, NULL);
2709 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2711 gtk_widget_grab_default(ok_btn);
2712 gtk_signal_connect(GTK_OBJECT(window), "focus_in_event",
2713 GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
2714 gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
2715 GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
2716 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
2717 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2718 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
2719 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
2722 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
2723 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
2724 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
2725 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
2726 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
2727 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
2728 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
2729 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
2730 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2731 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
2732 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
2733 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
2734 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2735 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2737 /* show message button colors and recycle options */
2738 set_button_bg_color(color_buttons.quote_level1_btn,
2739 prefs_common.quote_level1_col);
2740 set_button_bg_color(color_buttons.quote_level2_btn,
2741 prefs_common.quote_level2_col);
2742 set_button_bg_color(color_buttons.quote_level3_btn,
2743 prefs_common.quote_level3_col);
2744 set_button_bg_color(color_buttons.uri_btn,
2745 prefs_common.uri_col);
2746 set_button_bg_color(color_buttons.tgt_folder_btn,
2747 prefs_common.tgt_folder_col);
2748 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2749 prefs_common.recycle_quote_colors);
2751 gtk_widget_show_all(vbox);
2752 quote_color_win = window;
2755 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
2756 GdkEventKey *event, gpointer data)
2758 if (event && event->keyval == GDK_Escape)
2762 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2764 gchar *type = (gchar *)data;
2765 gchar *title = NULL;
2766 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2768 GtkColorSelectionDialog *dialog;
2770 if(g_strcasecmp(type, "LEVEL1") == 0) {
2771 title = _("Pick color for quotation level 1");
2772 rgbvalue = prefs_common.quote_level1_col;
2773 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2774 title = _("Pick color for quotation level 2");
2775 rgbvalue = prefs_common.quote_level2_col;
2776 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2777 title = _("Pick color for quotation level 3");
2778 rgbvalue = prefs_common.quote_level3_col;
2779 } else if(g_strcasecmp(type, "URI") == 0) {
2780 title = _("Pick color for URI");
2781 rgbvalue = prefs_common.uri_col;
2782 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2783 title = _("Pick color for target folder");
2784 rgbvalue = prefs_common.tgt_folder_col;
2785 } else { /* Should never be called */
2786 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2790 color_dialog = gtk_color_selection_dialog_new(title);
2791 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2792 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2793 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2794 manage_window_set_transient(GTK_WINDOW(color_dialog));
2796 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2797 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
2798 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2799 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
2800 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
2801 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
2804 /* preselect the previous color in the color selection dialog */
2805 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2806 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2807 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2808 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2809 gtk_color_selection_set_color
2810 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2812 gtk_widget_show(color_dialog);
2815 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2817 GtkColorSelection *colorsel = (GtkColorSelection *)
2818 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2820 gint red, green, blue, rgbvalue;
2821 gchar *type = (gchar *)data;
2823 gtk_color_selection_get_color(colorsel, color);
2825 red = (gint) (color[0] * 255.0);
2826 green = (gint) (color[1] * 255.0);
2827 blue = (gint) (color[2] * 255.0);
2828 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2831 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2832 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2833 fprintf(stderr, "Color is %x\n", rgbvalue);
2836 if (g_strcasecmp(type, "LEVEL1") == 0) {
2837 prefs_common.quote_level1_col = rgbvalue;
2838 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2839 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2840 prefs_common.quote_level2_col = rgbvalue;
2841 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2842 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2843 prefs_common.quote_level3_col = rgbvalue;
2844 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2845 } else if (g_strcasecmp(type, "URI") == 0) {
2846 prefs_common.uri_col = rgbvalue;
2847 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2848 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2849 prefs_common.tgt_folder_col = rgbvalue;
2850 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2851 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2853 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2855 gtk_widget_destroy(color_dialog);
2858 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2860 gtk_widget_destroy(color_dialog);
2863 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
2867 gtk_widget_destroy(color_dialog);
2870 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
2875 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
2876 newstyle = gtk_style_copy(gtk_widget_get_default_style());
2877 newstyle->bg[GTK_STATE_NORMAL] = color;
2878 newstyle->bg[GTK_STATE_PRELIGHT] = color;
2879 newstyle->bg[GTK_STATE_ACTIVE] = color;
2881 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
2884 static void prefs_enable_message_color_toggled(void)
2888 is_active = gtk_toggle_button_get_active
2889 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
2890 gtk_widget_set_sensitive(message.button_edit_col, is_active);
2891 prefs_common.enable_color = is_active;
2894 static void prefs_recycle_colors_toggled(GtkWidget *widget)
2898 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2899 prefs_common.recycle_quote_colors = is_active;
2902 static void prefs_quote_description(void)
2904 if (!quote_desc_win)
2905 prefs_quote_description_create();
2907 gtk_widget_show(quote_desc_win);
2909 gtk_widget_hide(quote_desc_win);
2912 static void prefs_quote_description_create(void)
2920 quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG);
2921 gtk_window_set_title(GTK_WINDOW(quote_desc_win),
2922 _("Description of symbols"));
2923 gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8);
2924 gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER);
2925 gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE);
2926 gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE);
2928 vbox = gtk_vbox_new(FALSE, 8);
2929 gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox);
2931 hbox = gtk_hbox_new(FALSE, 4);
2932 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
2934 label = gtk_label_new
2938 "%N\n" /* full name */
2939 "%F\n" /* first name */
2940 "%I\n" /* sender's initial */
2941 "%s\n" /* subject line */
2944 "%n\n" /* newsgroups */
2945 "%i\n" /* message id */
2946 "%r\n" /* references */
2957 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2958 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2960 label = gtk_label_new
2961 (_("DESCRIPTION\n\n"
2964 "Full Name of Sender\n"
2965 "First Name of Sender\n"
2966 "Initial of Sender\n"
2974 "Display the information\n"
2975 "If the information x is set, displays expr\n"
2978 "Quoted message body\n"
2979 "Message body without signature\n"
2980 "Quoted message body without signature\n"
2983 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
2984 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
2986 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2987 NULL, NULL, NULL, NULL);
2988 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2990 gtk_widget_grab_default(ok_btn);
2991 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
2992 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2994 gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event",
2995 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
2997 gtk_widget_show_all(vbox);
3000 /* functions for setting items of SummaryView */
3002 static struct _SummaryDisplayItem
3006 GtkWidget *chkbtn[N_SUMMARY_COLS];
3009 GtkWidget *cancel_btn;
3012 #define SET_ACTIVE(column, var) \
3013 gtk_toggle_button_set_active \
3014 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \
3016 #define GET_ACTIVE(column, var) \
3017 prefs_common.var = gtk_toggle_button_get_active \
3018 (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]))
3020 void prefs_summary_display_item_set(void)
3022 static gboolean cancelled;
3024 if (!summarydispitem.window)
3025 prefs_summary_display_item_dialog_create(&cancelled);
3026 gtk_widget_grab_focus(summarydispitem.ok_btn);
3027 gtk_widget_show(summarydispitem.window);
3028 manage_window_set_transient(GTK_WINDOW(summarydispitem.window));
3030 SET_ACTIVE(S_COL_MARK, show_mark);
3031 SET_ACTIVE(S_COL_UNREAD, show_unread);
3032 SET_ACTIVE(S_COL_MIME, show_mime);
3033 SET_ACTIVE(S_COL_NUMBER, show_number);
3034 SET_ACTIVE(S_COL_SCORE, show_score);
3035 SET_ACTIVE(S_COL_SIZE, show_size);
3036 SET_ACTIVE(S_COL_DATE, show_date);
3037 SET_ACTIVE(S_COL_FROM, show_from);
3038 SET_ACTIVE(S_COL_SUBJECT, show_subject);
3041 gtk_widget_hide(summarydispitem.window);
3043 if (cancelled != TRUE) {
3044 GET_ACTIVE(S_COL_MARK, show_mark);
3045 GET_ACTIVE(S_COL_UNREAD, show_unread);
3046 GET_ACTIVE(S_COL_MIME, show_mime);
3047 GET_ACTIVE(S_COL_NUMBER, show_number);
3048 GET_ACTIVE(S_COL_SCORE, show_score);
3049 GET_ACTIVE(S_COL_SIZE, show_size);
3050 GET_ACTIVE(S_COL_DATE, show_date);
3051 GET_ACTIVE(S_COL_FROM, show_from);
3052 GET_ACTIVE(S_COL_SUBJECT, show_subject);
3054 main_window_reflect_prefs_all();
3061 #define SET_CHECK_BUTTON(column, label) \
3063 summarydispitem.chkbtn[column] = \
3064 gtk_check_button_new_with_label(label); \
3065 gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \
3066 summarydispitem.chkbtn[column], \
3070 static void prefs_summary_display_item_dialog_create(gboolean *cancelled)
3074 GtkWidget *chkbtn_vbox;
3077 GtkWidget *cancel_btn;
3079 window = gtk_window_new(GTK_WINDOW_DIALOG);
3080 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3081 gtk_window_set_title(GTK_WINDOW(window), _("Set display item"));
3082 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3083 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3084 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3085 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3086 GTK_SIGNAL_FUNC(display_item_delete_event),
3088 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3089 GTK_SIGNAL_FUNC(display_item_key_pressed),
3092 vbox = gtk_vbox_new(FALSE, 8);
3093 gtk_container_add(GTK_CONTAINER(window), vbox);
3095 chkbtn_vbox = gtk_vbox_new(FALSE, 0);
3096 gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0);
3098 SET_CHECK_BUTTON(S_COL_MARK, _("Mark"));
3099 SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread"));
3100 SET_CHECK_BUTTON(S_COL_MIME, _("MIME"));
3101 SET_CHECK_BUTTON(S_COL_NUMBER, _("Number"));
3102 SET_CHECK_BUTTON(S_COL_SCORE, _("Score"));
3103 SET_CHECK_BUTTON(S_COL_SIZE, _("Size"));
3104 SET_CHECK_BUTTON(S_COL_DATE, _("Date"));
3105 SET_CHECK_BUTTON(S_COL_FROM, _("From"));
3106 SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject"));
3108 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3109 &cancel_btn, _("Cancel"), NULL, NULL);
3110 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3111 gtk_widget_grab_default(ok_btn);
3113 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3114 GTK_SIGNAL_FUNC(display_item_ok), cancelled);
3115 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3116 GTK_SIGNAL_FUNC(display_item_cancel), cancelled);
3118 gtk_widget_show_all(vbox);
3120 summarydispitem.window = window;
3121 summarydispitem.ok_btn = ok_btn;
3122 summarydispitem.cancel_btn = cancel_btn;
3125 #undef SET_CHECK_BUTTON
3127 static void display_item_ok(GtkWidget *widget, gboolean *cancelled)
3133 static void display_item_cancel(GtkWidget *widget, gboolean *cancelled)
3139 static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event,
3140 gboolean *cancelled)
3148 static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event,
3149 gboolean *cancelled)
3151 if (event && event->keyval == GDK_Escape) {
3157 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3161 g_return_if_fail(entry != NULL);
3163 if (!font_sel_win) {
3164 font_sel_win = gtk_font_selection_dialog_new
3165 (_("Font selection"));
3166 gtk_window_position(GTK_WINDOW(font_sel_win),
3167 GTK_WIN_POS_CENTER);
3168 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3169 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3172 (GTK_OBJECT(font_sel_win), "key_press_event",
3173 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3175 gtk_signal_connect_object
3176 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3178 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3179 GTK_OBJECT(font_sel_win));
3182 if(font_sel_conn_id) {
3183 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3185 font_sel_conn_id = gtk_signal_connect
3186 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3188 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3190 printf("%i\n", font_sel_conn_id);
3192 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3193 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3195 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3196 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3197 gtk_widget_grab_focus
3198 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3199 gtk_widget_show(font_sel_win);
3202 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3206 if (event && event->keyval == GDK_Escape)
3207 gtk_widget_hide(font_sel_win);
3210 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3214 fontname = gtk_font_selection_dialog_get_font_name
3215 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3218 gtk_entry_set_text(entry, fontname);
3223 gtk_widget_hide(font_sel_win);
3226 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3229 GtkWidget *menuitem;
3232 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3233 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3234 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3235 g_free(*((gchar **)pparam->data));
3236 *((gchar **)pparam->data) = g_strdup(charset);
3239 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3242 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3244 GtkWidget *menuitem;
3248 g_return_if_fail(optmenu != NULL);
3249 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3251 menu = gtk_option_menu_get_menu(optmenu);
3252 for (cur = GTK_MENU_SHELL(menu)->children;
3253 cur != NULL; cur = cur->next) {
3254 menuitem = GTK_WIDGET(cur->data);
3255 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
3256 if (!strcmp(charset, *((gchar **)pparam->data))) {
3257 gtk_option_menu_set_history(optmenu, n);
3263 gtk_option_menu_set_history(optmenu, 0);
3264 prefs_common_charset_set_data_from_optmenu(pparam);
3267 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3270 GtkWidget *menuitem;
3272 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3273 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3274 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3275 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3278 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3280 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3281 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3283 GtkWidget *menuitem;
3286 case RECV_DIALOG_ALWAYS:
3287 gtk_option_menu_set_history(optmenu, 0);
3289 case RECV_DIALOG_ACTIVE:
3290 gtk_option_menu_set_history(optmenu, 1);
3292 case RECV_DIALOG_NEVER:
3293 gtk_option_menu_set_history(optmenu, 2);
3298 menu = gtk_option_menu_get_menu(optmenu);
3299 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3300 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3303 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3306 prefs_common_cancel();
3310 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3313 if (event && event->keyval == GDK_Escape)
3314 prefs_common_cancel();
3317 static void prefs_common_ok(void)
3319 prefs_common_apply();
3320 gtk_widget_hide(dialog.window);
3321 if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win))
3322 gtk_widget_hide(quote_desc_win);
3327 static void prefs_common_apply(void)
3329 prefs_set_data_from_dialog(param);
3330 main_window_reflect_prefs_all();
3331 prefs_common_save_config();
3333 inc_autocheck_timer_remove();
3334 inc_autocheck_timer_set();
3337 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3340 GtkWidget *menuitem;
3342 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3343 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3344 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3345 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3348 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3350 NextUnreadMsgDialogShow dialog_show;
3351 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3353 GtkWidget *menuitem;
3355 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3357 switch (dialog_show) {
3358 case NEXTUNREADMSGDIALOG_ALWAYS:
3359 gtk_option_menu_set_history(optmenu, 0);
3361 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3362 gtk_option_menu_set_history(optmenu, 1);
3364 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3365 gtk_option_menu_set_history(optmenu, 2);
3370 menu = gtk_option_menu_get_menu(optmenu);
3371 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3372 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3375 static void prefs_common_cancel(void)
3377 gtk_widget_hide(dialog.window);
3382 static struct _ComposePrefs
3386 GtkWidget *close_btn;
3389 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
3390 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
3391 static void compose_prefs_close(GtkWidget *widget);
3392 static void compose_prefs_fmt_create(void);
3394 static void compose_prefs_fmt_open(void)
3396 if (composeprefs.window == NULL)
3397 compose_prefs_fmt_create();
3398 gtk_widget_show(composeprefs.window);
3402 static void compose_prefs_fmt_create(void)
3405 GtkWidget *close_btn;
3407 GtkWidget *frame_quote;
3408 GtkWidget *vbox_quote;
3410 GtkWidget *checkbtn_quote;
3411 GtkWidget *label_quotemark;
3412 GtkWidget *entry_quotemark;
3413 GtkWidget *scrolledwin_quotefmt;
3414 GtkWidget *text_quotefmt;
3415 GtkWidget *label_quotefmt;
3416 GtkWidget *btn_quotedesc;
3418 GtkWidget *label_fw_quotemark;
3419 GtkWidget *entry_fw_quotemark;
3420 GtkWidget *label_fw_quotefmt;
3421 GtkWidget *text_fw_quotefmt;
3423 window = gtk_window_new(GTK_WINDOW_DIALOG);
3424 gtk_container_set_border_width(GTK_CONTAINER(window), 8);
3425 gtk_window_set_title(GTK_WINDOW(window), _("Compose Preferences"));
3426 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3427 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3428 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3429 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3430 GTK_SIGNAL_FUNC(compose_prefs_delete_event),
3432 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3433 GTK_SIGNAL_FUNC(compose_prefs_key_pressed),
3436 vbox_quote = gtk_vbox_new(FALSE, 8);
3437 gtk_container_add(GTK_CONTAINER(window), vbox_quote);
3439 PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote,
3440 _("Quote message when replying"));
3442 hbox1 = gtk_hbox_new (FALSE, 8);
3443 gtk_widget_show (hbox1);
3444 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3446 label_quotemark = gtk_label_new (_("Quotation mark"));
3447 gtk_widget_show (label_quotemark);
3448 gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0);
3450 entry_quotemark = gtk_entry_new ();
3451 gtk_widget_show (entry_quotemark);
3452 gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0);
3453 gtk_widget_set_usize (entry_quotemark, 64, -1);
3455 hbox1 = gtk_hbox_new (FALSE, 0);
3456 gtk_widget_show (hbox1);
3457 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3459 label_quotefmt = gtk_label_new (_("Quotation format:"));
3460 gtk_widget_show (label_quotefmt);
3461 gtk_box_pack_start (GTK_BOX (hbox1), label_quotefmt, FALSE, FALSE, 0);
3463 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3464 gtk_widget_show (scrolledwin_quotefmt);
3465 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3466 gtk_scrolled_window_set_policy
3467 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3468 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3470 text_quotefmt = gtk_text_new (NULL, NULL);
3471 gtk_widget_show (text_quotefmt);
3472 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
3473 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
3474 gtk_widget_set_usize(text_quotefmt, 400, 60);
3476 hbox1 = gtk_hbox_new (FALSE, 8);
3477 gtk_widget_show (hbox1);
3478 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3480 label_fw_quotemark = gtk_label_new (_("Forward quotation mark"));
3481 gtk_widget_show (label_fw_quotemark);
3482 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotemark, FALSE, FALSE, 0);
3484 entry_fw_quotemark = gtk_entry_new ();
3485 gtk_widget_show (entry_fw_quotemark);
3486 gtk_box_pack_start (GTK_BOX (hbox1), entry_fw_quotemark, FALSE, FALSE, 0);
3487 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
3489 hbox1 = gtk_hbox_new (FALSE, 0);
3490 gtk_widget_show (hbox1);
3491 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0);
3493 label_fw_quotefmt = gtk_label_new (_("Forward format:"));
3494 gtk_widget_show (label_fw_quotefmt);
3495 gtk_box_pack_start (GTK_BOX (hbox1), label_fw_quotefmt, FALSE, FALSE, 0);
3497 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
3498 gtk_widget_show (scrolledwin_quotefmt);
3499 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
3500 gtk_scrolled_window_set_policy
3501 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
3502 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
3504 text_fw_quotefmt = gtk_text_new (NULL, NULL);
3505 gtk_widget_show (text_fw_quotefmt);
3506 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt);
3507 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
3508 gtk_widget_set_usize(text_fw_quotefmt, 400, 60);
3510 hbox1 = gtk_hbox_new (FALSE, 0);
3511 gtk_widget_show (hbox1);
3512 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
3515 gtk_button_new_with_label (_(" Description of symbols "));
3516 gtk_widget_show (btn_quotedesc);
3517 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc,
3520 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
3521 GTK_SIGNAL_FUNC(prefs_quote_description), NULL);
3524 gtkut_button_set_create(&hbox1, &close_btn, _("Close"),
3525 NULL, NULL, NULL, NULL);
3526 gtk_box_pack_end(GTK_BOX(vbox_quote), hbox1, FALSE, FALSE, 0);
3527 gtk_widget_grab_default(close_btn);
3529 gtk_signal_connect(GTK_OBJECT(close_btn), "clicked",
3530 GTK_SIGNAL_FUNC(compose_prefs_close), NULL);
3532 gtk_widget_show_all(vbox_quote);
3534 composeprefs.window = window;
3535 composeprefs.close_btn = close_btn;
3537 compose.checkbtn_quote = checkbtn_quote;
3538 compose.entry_quotemark = entry_quotemark;
3539 compose.text_quotefmt = text_quotefmt;
3540 compose.entry_fw_quotemark = entry_fw_quotemark;
3541 compose.text_fw_quotefmt = text_fw_quotefmt;
3544 static void compose_prefs_close(GtkWidget *widget)
3546 gtk_widget_hide(composeprefs.window);
3549 static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
3551 gtk_widget_hide(composeprefs.window);
3556 static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
3558 if (event && event->keyval == GDK_Escape) {
3559 gtk_widget_hide(composeprefs.window);
3563 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3566 GtkWidget *menuitem;
3568 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3569 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3570 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3571 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3574 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3576 RecvDialogShow dialog_show;
3577 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3579 GtkWidget *menuitem;
3581 dialog_show = *((RecvDialogShow *)pparam->data);
3583 switch (dialog_show) {
3584 case RECVDIALOG_ALWAYS:
3585 gtk_option_menu_set_history(optmenu, 0);
3587 case RECVDIALOG_WINDOW_ACTIVE:
3588 gtk_option_menu_set_history(optmenu, 1);
3590 case RECVDIALOG_NEVER:
3591 gtk_option_menu_set_history(optmenu, 2);
3596 menu = gtk_option_menu_get_menu(optmenu);
3597 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3598 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));