2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2003 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_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "mainwindow.h"
44 #include "summaryview.h"
45 #include "messageview.h"
46 #include "manage_window.h"
52 #include "alertpanel.h"
56 #include "folderview.h"
57 #include "stock_pixmap.h"
58 #include "quote_fmt.h"
61 #include "gtkaspell.h"
64 PrefsCommon prefs_common;
66 static PrefsDialog dialog;
68 static struct Receive {
69 GtkWidget *checkbtn_incext;
70 GtkWidget *entry_incext;
71 GtkWidget *button_incext;
73 GtkWidget *checkbtn_local;
74 GtkWidget *checkbtn_filter_on_inc;
75 GtkWidget *entry_spool;
77 GtkWidget *checkbtn_autochk;
78 GtkWidget *spinbtn_autochk;
79 GtkObject *spinbtn_autochk_adj;
81 GtkWidget *checkbtn_chkonstartup;
82 GtkWidget *checkbtn_scan_after_inc;
85 GtkWidget *checkbtn_newmail_auto;
86 GtkWidget *checkbtn_newmail_manu;
87 GtkWidget *entry_newmail_notify_cmd;
88 GtkWidget *hbox_newmail_notify;
89 GtkWidget *optmenu_recvdialog;
90 GtkWidget *checkbtn_no_recv_err_panel;
91 GtkWidget *checkbtn_close_recv_dialog;
95 GtkWidget *checkbtn_extsend;
96 GtkWidget *entry_extsend;
97 GtkWidget *button_extsend;
99 GtkWidget *checkbtn_savemsg;
100 GtkWidget *checkbtn_queuemsg;
101 GtkWidget *optmenu_senddialog;
103 GtkWidget *optmenu_charset;
104 GtkWidget *optmenu_encoding_method;
107 static struct Compose {
108 GtkWidget *entry_fw_quotemark;
109 GtkWidget *text_fw_quotefmt;
111 GtkWidget *checkbtn_autoextedit;
112 GtkWidget *spinbtn_undolevel;
113 GtkObject *spinbtn_undolevel_adj;
114 GtkWidget *spinbtn_linewrap;
115 GtkObject *spinbtn_linewrap_adj;
116 GtkWidget *checkbtn_wrapquote;
117 GtkWidget *checkbtn_autowrap;
118 GtkWidget *checkbtn_wrapatsend;
120 GtkWidget *checkbtn_reply_account_autosel;
121 GtkWidget *checkbtn_forward_account_autosel;
122 GtkWidget *checkbtn_reedit_account_autosel;
123 GtkWidget *checkbtn_quote;
124 GtkWidget *checkbtn_default_reply_list;
125 GtkWidget *checkbtn_forward_as_attachment;
126 GtkWidget *checkbtn_redirect_keep_from;
127 GtkWidget *checkbtn_smart_wrapping;
128 GtkWidget *checkbtn_block_cursor;
129 GtkWidget *checkbtn_reply_with_quote;
131 GtkWidget *checkbtn_autosave;
132 GtkWidget *entry_autosave_length;
137 static struct Spelling {
138 GtkWidget *checkbtn_enable_aspell;
139 GtkWidget *entry_aspell_path;
140 GtkWidget *btn_aspell_path;
141 GtkWidget *optmenu_dictionary;
142 GtkWidget *optmenu_sugmode;
143 GtkWidget *misspelled_btn;
144 GtkWidget *checkbtn_use_alternate;
145 GtkWidget *checkbtn_check_while_typing;
149 static struct Quote {
150 GtkWidget *entry_quotemark;
151 GtkWidget *text_quotefmt;
153 GtkWidget *entry_fw_quotemark;
154 GtkWidget *text_fw_quotefmt;
156 GtkWidget *entry_quote_chars;
159 static struct Display {
160 GtkWidget *entry_textfont;
161 GtkWidget *button_textfont;
163 GtkWidget *entry_smallfont;
164 GtkWidget *entry_normalfont;
165 GtkWidget *entry_boldfont;
167 GtkWidget *chkbtn_folder_unread;
168 GtkWidget *entry_ng_abbrev_len;
169 GtkWidget *spinbtn_ng_abbrev_len;
170 GtkObject *spinbtn_ng_abbrev_len_adj;
172 GtkWidget *chkbtn_transhdr;
174 GtkWidget *chkbtn_swapfrom;
175 GtkWidget *chkbtn_useaddrbook;
176 GtkWidget *chkbtn_threadsubj;
177 GtkWidget *entry_datefmt;
180 static struct Message {
181 GtkWidget *chkbtn_enablecol;
182 GtkWidget *button_edit_col;
183 GtkWidget *chkbtn_mbalnum;
184 GtkWidget *chkbtn_disphdrpane;
185 GtkWidget *chkbtn_disphdr;
186 GtkWidget *spinbtn_linespc;
187 GtkObject *spinbtn_linespc_adj;
188 GtkWidget *chkbtn_headspc;
190 GtkWidget *chkbtn_smoothscroll;
191 GtkWidget *spinbtn_scrollstep;
192 GtkObject *spinbtn_scrollstep_adj;
193 GtkWidget *chkbtn_halfpage;
195 GtkWidget *chkbtn_attach_desc;
199 static struct Privacy {
200 GtkWidget *checkbtn_auto_check_signatures;
201 GtkWidget *checkbtn_gpg_signature_popup;
202 GtkWidget *checkbtn_store_passphrase;
203 GtkWidget *spinbtn_store_passphrase;
204 GtkObject *spinbtn_store_passphrase_adj;
205 GtkWidget *checkbtn_passphrase_grab;
206 GtkWidget *checkbtn_gpg_warning;
210 static struct Interface {
211 /* GtkWidget *checkbtn_emacs; */
212 GtkWidget *checkbtn_always_show_msg;
213 GtkWidget *checkbtn_openunread;
214 GtkWidget *checkbtn_mark_as_read_on_newwin;
215 GtkWidget *checkbtn_openinbox;
216 GtkWidget *checkbtn_immedexec;
217 GtkWidget *optmenu_nextunreadmsgdialog;
218 GtkWidget *entry_pixmap_theme;
219 GtkWidget *combo_pixmap_theme;
222 static struct Other {
223 GtkWidget *uri_combo;
224 GtkWidget *uri_entry;
225 GtkWidget *printcmd_entry;
226 GtkWidget *exteditor_combo;
227 GtkWidget *exteditor_entry;
229 GtkWidget *checkbtn_addaddrbyclick;
230 GtkWidget *checkbtn_confonexit;
231 GtkWidget *checkbtn_cleanonexit;
232 GtkWidget *checkbtn_askonclean;
233 GtkWidget *checkbtn_warnqueued;
234 GtkWidget *checkbtn_cliplog;
235 GtkWidget *loglength_entry;
238 GtkWidget *checkbtn_ssl_ask_unknown_valid;
242 GtkWidget *spinbtn_iotimeout;
243 GtkObject *spinbtn_iotimeout_adj;
246 static struct MessageColorButtons {
247 GtkWidget *quote_level1_btn;
248 GtkWidget *quote_level2_btn;
249 GtkWidget *quote_level3_btn;
251 GtkWidget *tgt_folder_btn;
252 GtkWidget *signature_btn;
255 static struct KeybindDialog {
260 static GtkWidget *font_sel_win;
261 static guint font_sel_conn_id;
262 static GtkWidget *quote_color_win;
263 static GtkWidget *color_dialog;
265 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
266 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
267 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
268 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
269 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
270 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
271 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
273 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
274 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
275 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
276 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
277 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
278 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
281 static void prefs_dictionary_set_data_from_optmenu (PrefParam *param);
282 static void prefs_dictionary_set_optmenu (PrefParam *pparam);
283 static void prefs_speller_sugmode_set_data_from_optmenu (PrefParam *pparam);
284 static void prefs_speller_sugmode_set_optmenu (PrefParam *pparam);
289 parameter name, default value, pointer to the prefs variable, data type,
290 pointer to the widget pointer,
291 pointer to the function for data setting,
292 pointer to the function for widget setting
295 static PrefParam param[] = {
297 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
298 &receive.checkbtn_incext,
299 prefs_set_data_from_toggle, prefs_set_toggle},
300 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
301 &receive.entry_incext,
302 prefs_set_data_from_entry, prefs_set_entry},
304 {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL,
305 &receive.checkbtn_local,
306 prefs_set_data_from_toggle, prefs_set_toggle},
307 {"filter_on_inc_local", "TRUE", &prefs_common.filter_on_inc, P_BOOL,
308 &receive.checkbtn_filter_on_inc,
309 prefs_set_data_from_toggle, prefs_set_toggle},
310 {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING,
311 &receive.entry_spool,
312 prefs_set_data_from_entry, prefs_set_entry},
314 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
315 &receive.checkbtn_autochk,
316 prefs_set_data_from_toggle, prefs_set_toggle},
317 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
318 &receive.spinbtn_autochk,
319 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
320 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
321 &receive.checkbtn_chkonstartup,
322 prefs_set_data_from_toggle, prefs_set_toggle},
323 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
324 P_BOOL, &receive.checkbtn_scan_after_inc,
325 prefs_set_data_from_toggle, prefs_set_toggle},
326 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
327 P_BOOL, &receive.checkbtn_newmail_manu,
328 prefs_set_data_from_toggle, prefs_set_toggle},
329 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
330 P_BOOL, &receive.checkbtn_newmail_auto,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
333 &receive.entry_newmail_notify_cmd,
334 prefs_set_data_from_entry, prefs_set_entry},
335 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
336 &receive.optmenu_recvdialog,
337 prefs_common_recv_dialog_set_data_from_optmenu,
338 prefs_common_recv_dialog_set_optmenu},
339 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
340 P_BOOL, &receive.checkbtn_no_recv_err_panel,
341 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
343 P_BOOL, &receive.checkbtn_close_recv_dialog,
344 prefs_set_data_from_toggle, prefs_set_toggle},
347 {"use_ext_sendmail", "FALSE", &prefs_common.use_extsend, P_BOOL,
348 &p_send.checkbtn_extsend,
349 prefs_set_data_from_toggle, prefs_set_toggle},
350 {"ext_sendmail_cmd", DEFAULT_SENDMAIL_CMD,
351 &prefs_common.extsend_cmd, P_STRING,
352 &p_send.entry_extsend, prefs_set_data_from_entry, prefs_set_entry},
353 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
354 &p_send.checkbtn_savemsg,
355 prefs_set_data_from_toggle, prefs_set_toggle},
356 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
357 &p_send.checkbtn_queuemsg,
358 prefs_set_data_from_toggle, prefs_set_toggle},
359 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
360 &p_send.optmenu_senddialog,
361 prefs_common_send_dialog_set_data_from_optmenu,
362 prefs_common_send_dialog_set_optmenu},
364 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
365 &p_send.optmenu_charset,
366 prefs_common_charset_set_data_from_optmenu,
367 prefs_common_charset_set_optmenu},
368 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
369 &p_send.optmenu_encoding_method,
370 prefs_common_encoding_set_data_from_optmenu,
371 prefs_common_encoding_set_optmenu},
374 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
375 &compose.checkbtn_autoextedit,
376 prefs_set_data_from_toggle, prefs_set_toggle},
377 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
378 P_BOOL, &compose.checkbtn_forward_as_attachment,
379 prefs_set_data_from_toggle, prefs_set_toggle},
380 {"redirect_keep_from", "FALSE",
381 &prefs_common.redirect_keep_from, P_BOOL,
382 &compose.checkbtn_redirect_keep_from,
383 prefs_set_data_from_toggle, prefs_set_toggle},
384 {"undo_level", "50", &prefs_common.undolevels, P_INT,
385 &compose.spinbtn_undolevel,
386 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
387 {"block_cursor", "FALSE", &prefs_common.block_cursor,
388 P_BOOL, &compose.checkbtn_block_cursor,
389 prefs_set_data_from_toggle, prefs_set_toggle},
391 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
392 &compose.spinbtn_linewrap,
393 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
394 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
395 &compose.checkbtn_wrapquote,
396 prefs_set_data_from_toggle, prefs_set_toggle},
397 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
398 &compose.checkbtn_autowrap,
399 prefs_set_data_from_toggle, prefs_set_toggle},
400 {"linewrap_before_sending", "FALSE",
401 &prefs_common.linewrap_at_send, P_BOOL,
402 &compose.checkbtn_wrapatsend,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
405 P_BOOL, &compose.checkbtn_smart_wrapping,
406 prefs_set_data_from_toggle, prefs_set_toggle},
407 {"autosave", "FALSE", &prefs_common.autosave,
408 P_BOOL, &compose.checkbtn_autosave,
409 prefs_set_data_from_toggle, prefs_set_toggle},
410 {"autosave_length", "50", &prefs_common.autosave_length,
411 P_INT, &compose.entry_autosave_length,
412 prefs_set_data_from_entry, prefs_set_entry},
414 {"enable_aspell", "TRUE", &prefs_common.enable_aspell,
415 P_BOOL, &spelling.checkbtn_enable_aspell,
416 prefs_set_data_from_toggle, prefs_set_toggle},
417 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path,
418 P_STRING, &spelling.entry_aspell_path,
419 prefs_set_data_from_entry, prefs_set_entry},
420 {"dictionary", "", &prefs_common.dictionary,
421 P_STRING, &spelling.optmenu_dictionary,
422 prefs_dictionary_set_data_from_optmenu, prefs_dictionary_set_optmenu },
423 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode,
424 P_INT, &spelling.optmenu_sugmode,
425 prefs_speller_sugmode_set_data_from_optmenu, prefs_speller_sugmode_set_optmenu },
426 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate,
427 P_BOOL, &spelling.checkbtn_use_alternate,
428 prefs_set_data_from_toggle, prefs_set_toggle},
429 {"check_while_typing", "TRUE", &prefs_common.check_while_typing,
430 P_BOOL, &spelling.checkbtn_check_while_typing,
431 prefs_set_data_from_toggle, prefs_set_toggle},
432 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
435 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
436 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
438 /* Account autoselection */
439 {"reply_account_autoselect", "TRUE",
440 &prefs_common.reply_account_autosel, P_BOOL,
441 &compose.checkbtn_reply_account_autosel,
442 prefs_set_data_from_toggle, prefs_set_toggle},
443 {"forward_account_autoselect", "TRUE",
444 &prefs_common.forward_account_autosel, P_BOOL,
445 &compose.checkbtn_forward_account_autosel,
446 prefs_set_data_from_toggle, prefs_set_toggle},
447 {"reedit_account_autoselect", "TRUE",
448 &prefs_common.reedit_account_autosel, P_BOOL,
449 &compose.checkbtn_reedit_account_autosel,
450 prefs_set_data_from_toggle, prefs_set_toggle},
452 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
453 &compose.checkbtn_default_reply_list,
454 prefs_set_data_from_toggle, prefs_set_toggle},
456 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
460 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
461 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
462 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
463 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
464 prefs_set_data_from_text, prefs_set_text},
466 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
467 "e.entry_fw_quotemark,
468 prefs_set_data_from_entry, prefs_set_entry},
469 {"forward_quote_format",
470 "\\n\\nBegin forwarded message:\\n\\n"
471 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
472 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
473 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
474 prefs_set_data_from_text, prefs_set_text},
475 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
476 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
479 {"widget_font", NULL, &prefs_common.widgetfont, P_STRING,
481 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
482 &prefs_common.textfont, P_STRING,
483 &display.entry_textfont,
484 prefs_set_data_from_entry, prefs_set_entry},
485 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
486 &prefs_common.smallfont, P_STRING,
487 &display.entry_smallfont,
488 prefs_set_data_from_entry, prefs_set_entry},
489 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
490 &prefs_common.boldfont, P_STRING,
491 &display.entry_boldfont,
492 prefs_set_data_from_entry, prefs_set_entry},
493 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
494 &prefs_common.normalfont, P_STRING,
495 &display.entry_normalfont,
496 prefs_set_data_from_entry, prefs_set_entry},
499 {"display_folder_unread_num", "TRUE",
500 &prefs_common.display_folder_unread, P_BOOL,
501 &display.chkbtn_folder_unread,
502 prefs_set_data_from_toggle, prefs_set_toggle},
503 {"newsgroup_abbrev_len", "16",
504 &prefs_common.ng_abbrev_len, P_INT,
505 &display.spinbtn_ng_abbrev_len,
506 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
508 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
509 &display.chkbtn_transhdr,
510 prefs_set_data_from_toggle, prefs_set_toggle},
512 /* Display: Summary View */
513 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
514 &display.chkbtn_swapfrom,
515 prefs_set_data_from_toggle, prefs_set_toggle},
516 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
517 &display.chkbtn_useaddrbook,
518 prefs_set_data_from_toggle, prefs_set_toggle},
519 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
520 &display.chkbtn_threadsubj,
521 prefs_set_data_from_toggle, prefs_set_toggle},
522 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
523 P_STRING, &display.entry_datefmt,
524 prefs_set_data_from_entry, prefs_set_entry},
526 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
528 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
530 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
531 P_INT, NULL, NULL, NULL },
533 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
535 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
537 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
539 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
542 {"folderview_vscrollbar_policy", "0",
543 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
546 {"summary_col_show_mark", "TRUE",
547 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
548 {"summary_col_show_unread", "TRUE",
549 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
550 {"summary_col_show_mime", "TRUE",
551 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
552 {"summary_col_show_subject", "TRUE",
553 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
554 {"summary_col_show_from", "TRUE",
555 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
556 {"summary_col_show_date", "TRUE",
557 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
558 {"summary_col_show_size", "TRUE",
559 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
560 {"summary_col_show_number", "FALSE",
561 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
562 {"summary_col_show_score", "FALSE",
563 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
564 {"summary_col_show_locked", "FALSE",
565 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
567 {"summary_col_pos_mark", "0",
568 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
569 {"summary_col_pos_unread", "1",
570 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
571 {"summary_col_pos_mime", "2",
572 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
573 {"summary_col_pos_subject", "3",
574 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
575 {"summary_col_pos_from", "4",
576 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
577 {"summary_col_pos_date", "5",
578 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
579 {"summary_col_pos_size", "6",
580 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
581 {"summary_col_pos_number", "7",
582 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
583 {"summary_col_pos_score", "8",
584 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
585 {"summary_col_pos_locked", "9",
586 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
588 {"summary_col_size_mark", "10",
589 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
590 {"summary_col_size_unread", "13",
591 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
592 {"summary_col_size_mime", "10",
593 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
594 {"summary_col_size_subject", "200",
595 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
596 {"summary_col_size_from", "120",
597 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
598 {"summary_col_size_date", "118",
599 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
600 {"summary_col_size_size", "45",
601 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
602 {"summary_col_size_number", "40",
603 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
604 {"summary_col_size_score", "40",
605 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
606 {"summary_col_size_locked", "13",
607 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
610 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
612 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
614 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
616 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
618 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
620 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
623 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
625 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
628 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
630 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
632 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
634 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
636 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
638 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
640 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
642 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
644 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
646 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
648 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
650 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
652 {"compose_width", "600", &prefs_common.compose_width, P_INT,
654 {"compose_height", "560", &prefs_common.compose_height, P_INT,
658 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
659 &message.chkbtn_enablecol,
660 prefs_set_data_from_toggle, prefs_set_toggle},
662 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
664 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
666 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
668 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
670 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
672 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
674 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
675 P_BOOL, NULL, NULL, NULL},
677 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
678 &message.chkbtn_mbalnum,
679 prefs_set_data_from_toggle, prefs_set_toggle},
680 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
681 P_BOOL, &message.chkbtn_disphdrpane,
682 prefs_set_data_from_toggle, prefs_set_toggle},
683 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
684 &message.chkbtn_disphdr,
685 prefs_set_data_from_toggle, prefs_set_toggle},
686 {"line_space", "2", &prefs_common.line_space, P_INT,
687 &message.spinbtn_linespc,
688 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
689 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
690 &message.chkbtn_headspc,
691 prefs_set_data_from_toggle, prefs_set_toggle},
693 {"enable_smooth_scroll", "FALSE",
694 &prefs_common.enable_smooth_scroll, P_BOOL,
695 &message.chkbtn_smoothscroll,
696 prefs_set_data_from_toggle, prefs_set_toggle},
697 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
698 &message.spinbtn_scrollstep,
699 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
700 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
701 &message.chkbtn_halfpage,
702 prefs_set_data_from_toggle, prefs_set_toggle},
704 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
707 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
708 &message.chkbtn_attach_desc,
709 prefs_set_data_from_toggle, prefs_set_toggle},
712 {"mime_image_viewer", "display '%s'",
713 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
714 {"mime_audio_player", "play '%s'",
715 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
716 {"mime_open_command", "gedit '%s'",
717 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
721 {"auto_check_signatures", "TRUE",
722 &prefs_common.auto_check_signatures, P_BOOL,
723 &privacy.checkbtn_auto_check_signatures,
724 prefs_set_data_from_toggle, prefs_set_toggle},
725 {"gpg_signature_popup", "FALSE",
726 &prefs_common.gpg_signature_popup, P_BOOL,
727 &privacy.checkbtn_gpg_signature_popup,
728 prefs_set_data_from_toggle, prefs_set_toggle},
729 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
730 &privacy.checkbtn_store_passphrase,
731 prefs_set_data_from_toggle, prefs_set_toggle},
732 {"store_passphrase_timeout", "0",
733 &prefs_common.store_passphrase_timeout, P_INT,
734 &privacy.spinbtn_store_passphrase,
735 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
737 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
738 &privacy.checkbtn_passphrase_grab,
739 prefs_set_data_from_toggle, prefs_set_toggle},
740 #endif /* __MINGW32__ */
741 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
742 &privacy.checkbtn_gpg_warning,
743 prefs_set_data_from_toggle, prefs_set_toggle},
744 #endif /* USE_GPGME */
747 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
749 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
752 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
753 NULL, NULL, NULL}, */
754 {"always_show_message_when_selected", "FALSE",
755 &prefs_common.always_show_msg,
756 P_BOOL, &interface.checkbtn_always_show_msg,
757 prefs_set_data_from_toggle, prefs_set_toggle},
758 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
759 P_BOOL, &interface.checkbtn_openunread,
760 prefs_set_data_from_toggle, prefs_set_toggle},
761 {"mark_as_read_on_new_window", "FALSE",
762 &prefs_common.mark_as_read_on_new_window,
763 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
764 prefs_set_data_from_toggle, prefs_set_toggle},
765 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
766 P_BOOL, &interface.checkbtn_openinbox,
767 prefs_set_data_from_toggle, prefs_set_toggle},
768 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
769 &interface.checkbtn_immedexec,
770 prefs_set_data_from_toggle, prefs_set_toggle},
771 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
772 &interface.optmenu_nextunreadmsgdialog,
773 prefs_nextunreadmsgdialog_set_data_from_optmenu,
774 prefs_nextunreadmsgdialog_set_optmenu},
776 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
777 &prefs_common.pixmap_theme_path, P_STRING,
778 &interface.entry_pixmap_theme, prefs_set_data_from_entry, prefs_set_entry},
780 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
784 {"uri_open_command", DEFAULT_BROWSER_CMD,
785 &prefs_common.uri_cmd, P_STRING,
786 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
787 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
788 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
789 {"ext_editor_command", "gedit %s",
790 &prefs_common.ext_editor_cmd, P_STRING,
791 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
793 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
794 P_BOOL, &other.checkbtn_addaddrbyclick,
795 prefs_set_data_from_toggle, prefs_set_toggle},
797 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
798 &other.checkbtn_confonexit,
799 prefs_set_data_from_toggle, prefs_set_toggle},
800 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
801 &other.checkbtn_cleanonexit,
802 prefs_set_data_from_toggle, prefs_set_toggle},
803 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
804 &other.checkbtn_askonclean,
805 prefs_set_data_from_toggle, prefs_set_toggle},
806 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
807 P_BOOL, &other.checkbtn_warnqueued,
808 prefs_set_data_from_toggle, prefs_set_toggle},
811 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
812 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
813 prefs_set_data_from_toggle, prefs_set_toggle},
816 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
818 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
821 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
822 P_INT, &other.spinbtn_iotimeout,
823 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
824 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
826 {"important_score", "1", &prefs_common.important_score, P_INT,
828 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
829 &other.checkbtn_cliplog,
830 prefs_set_data_from_toggle, prefs_set_toggle},
831 {"log_length", "500", &prefs_common.loglength, P_INT,
832 &other.loglength_entry,
833 prefs_set_data_from_entry, prefs_set_entry},
835 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
837 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
840 {"color_new", "179", &prefs_common.color_new, P_COLOR,
843 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
846 /* widget creating functions */
847 static void prefs_common_create (void);
848 static void prefs_receive_create (void);
849 static void prefs_send_create (void);
851 static void prefs_spelling_create (void);
853 static void prefs_compose_create (void);
854 static void prefs_quote_create (void);
855 static void prefs_display_create (void);
856 static void prefs_message_create (void);
858 static void prefs_privacy_create (void);
860 static void prefs_interface_create (void);
861 static void prefs_other_create (void);
863 static void date_format_ok_btn_clicked (GtkButton *button,
865 static void date_format_cancel_btn_clicked (GtkButton *button,
867 static void date_format_key_pressed (GtkWidget *keywidget,
870 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
873 static void date_format_entry_on_change (GtkEditable *editable,
875 static void date_format_select_row (GtkWidget *date_format_list,
878 GdkEventButton *event,
879 GtkWidget *date_format);
880 static GtkWidget *date_format_create (GtkButton *button,
883 static void prefs_quote_colors_dialog (void);
884 static void prefs_quote_colors_dialog_create (void);
885 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
888 static void quote_color_set_dialog (GtkWidget *widget,
890 static void quote_colors_set_dialog_ok (GtkWidget *widget,
892 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
894 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
897 static void set_button_bg_color (GtkWidget *widget,
899 static void prefs_enable_message_color_toggled (void);
900 static void prefs_recycle_colors_toggled (GtkWidget *widget);
902 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
904 static void prefs_font_selection_key_pressed (GtkWidget *widget,
907 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
909 static void prefs_keybind_select (void);
910 static gint prefs_keybind_deleted (GtkWidget *widget,
913 static void prefs_keybind_key_pressed (GtkWidget *widget,
916 static void prefs_keybind_cancel (void);
917 static void prefs_keybind_apply_clicked (GtkWidget *widget);
919 static gint prefs_common_deleted (GtkWidget *widget,
922 static void prefs_common_key_pressed (GtkWidget *widget,
925 static void prefs_common_ok (void);
926 static void prefs_common_apply (void);
927 static void prefs_common_cancel (void);
929 void prefs_common_init(void)
931 prefs_common.disphdr_list = NULL;
934 PrefsCommon *prefs_common_get(void)
936 return &prefs_common;
939 void prefs_common_read_config(void)
943 gchar buf[PREFSBUFSIZE];
945 prefs_read_config(param, "Common", COMMON_RC);
947 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
949 if ((fp = fopen(path, "rb")) == NULL) {
950 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
955 while (fgets(buf, sizeof(buf), fp) != NULL) {
957 if (buf[0] == '\0') continue;
958 prefs_common.mime_open_cmd_history =
959 add_history(prefs_common.mime_open_cmd_history, buf);
963 prefs_common.mime_open_cmd_history =
964 g_list_reverse(prefs_common.mime_open_cmd_history);
967 void prefs_common_save_config(void)
973 prefs_save_config(param, "Common", COMMON_RC);
975 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
977 if ((fp = fopen(path, "wb")) == NULL) {
978 FILE_OP_ERROR(path, "fopen");
983 for (cur = prefs_common.mime_open_cmd_history;
984 cur != NULL; cur = cur->next) {
985 fputs((gchar *)cur->data, fp);
993 void prefs_common_open(void)
995 if (prefs_rc_is_readonly(COMMON_RC))
1000 if (!dialog.window) {
1001 prefs_common_create();
1004 manage_window_set_transient(GTK_WINDOW(dialog.window));
1005 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
1006 gtk_widget_grab_focus(dialog.ok_btn);
1008 prefs_set_dialog(param);
1010 gtk_widget_show(dialog.window);
1013 static void prefs_common_create(void)
1017 debug_print("Creating common preferences window...\n");
1019 prefs_dialog_create(&dialog);
1020 gtk_window_set_title (GTK_WINDOW(dialog.window),
1021 _("Common Preferences"));
1022 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
1023 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
1024 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
1025 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
1026 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
1028 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
1029 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
1030 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
1031 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
1032 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
1033 GTK_SIGNAL_FUNC(prefs_common_cancel),
1034 GTK_OBJECT(dialog.window));
1036 /* create all widgets on notebook */
1037 prefs_receive_create();
1038 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
1039 prefs_send_create();
1040 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
1041 prefs_compose_create();
1042 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
1044 prefs_spelling_create();
1045 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
1047 prefs_quote_create();
1048 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
1049 prefs_display_create();
1050 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
1051 prefs_message_create();
1052 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
1054 prefs_privacy_create();
1055 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
1057 prefs_interface_create();
1058 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
1059 prefs_other_create();
1060 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
1062 gtk_widget_show_all(dialog.window);
1065 static void prefs_receive_create(void)
1069 GtkWidget *frame_incext;
1070 GtkWidget *checkbtn_incext;
1072 GtkWidget *label_incext;
1073 GtkWidget *entry_incext;
1074 /* GtkWidget *button_incext; */
1076 GtkWidget *frame_spool;
1077 GtkWidget *checkbtn_local;
1078 GtkWidget *checkbtn_filter_on_inc;
1079 GtkWidget *label_spool;
1080 GtkWidget *entry_spool;
1082 GtkWidget *hbox_autochk;
1083 GtkWidget *checkbtn_autochk;
1084 GtkWidget *label_autochk1;
1085 GtkObject *spinbtn_autochk_adj;
1086 GtkWidget *spinbtn_autochk;
1087 GtkWidget *label_autochk2;
1088 GtkWidget *checkbtn_chkonstartup;
1089 GtkWidget *checkbtn_scan_after_inc;
1092 GtkWidget *frame_newmail;
1093 GtkWidget *hbox_newmail_notify;
1094 GtkWidget *checkbtn_newmail_auto;
1095 GtkWidget *checkbtn_newmail_manu;
1096 GtkWidget *entry_newmail_notify_cmd;
1097 GtkWidget *label_newmail_notify_cmd;
1099 GtkWidget *hbox_recvdialog;
1100 GtkWidget *label_recvdialog;
1102 GtkWidget *menuitem;
1103 GtkWidget *optmenu_recvdialog;
1104 GtkWidget *checkbtn_no_recv_err_panel;
1105 GtkWidget *checkbtn_close_recv_dialog;
1107 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1108 gtk_widget_show (vbox1);
1109 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1110 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1112 PACK_FRAME(vbox1, frame_incext, _("External program"));
1114 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1115 gtk_widget_show (vbox2);
1116 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1117 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1119 /* Use of external incorporation program */
1120 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1121 _("Use external program for incorporation"));
1123 hbox = gtk_hbox_new (FALSE, 8);
1124 gtk_widget_show (hbox);
1125 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1126 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1128 label_incext = gtk_label_new (_("Command"));
1129 gtk_widget_show (label_incext);
1130 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1132 entry_incext = gtk_entry_new ();
1133 gtk_widget_show (entry_incext);
1134 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1137 button_incext = gtk_button_new_with_label ("... ");
1138 gtk_widget_show (button_incext);
1139 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1142 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1144 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1145 gtk_widget_show (vbox2);
1146 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1147 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1149 hbox = gtk_hbox_new (FALSE, 32);
1150 gtk_widget_show (hbox);
1151 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1153 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1154 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1155 _("Filter on incorporation"));
1156 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1158 hbox = gtk_hbox_new (FALSE, 8);
1159 gtk_widget_show (hbox);
1160 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1161 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1163 label_spool = gtk_label_new (_("Spool directory"));
1164 gtk_widget_show (label_spool);
1165 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1167 entry_spool = gtk_entry_new ();
1168 gtk_widget_show (entry_spool);
1169 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1171 vbox2 = gtk_vbox_new (FALSE, 0);
1172 gtk_widget_show (vbox2);
1173 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1176 hbox_autochk = gtk_hbox_new (FALSE, 8);
1177 gtk_widget_show (hbox_autochk);
1178 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1180 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1181 _("Auto-check new mail"));
1183 label_autochk1 = gtk_label_new (_("every"));
1184 gtk_widget_show (label_autochk1);
1185 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1187 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1188 spinbtn_autochk = gtk_spin_button_new
1189 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1190 gtk_widget_show (spinbtn_autochk);
1191 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1192 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1193 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1195 label_autochk2 = gtk_label_new (_("minute(s)"));
1196 gtk_widget_show (label_autochk2);
1197 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1199 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1200 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1201 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1203 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1204 _("Check new mail on startup"));
1205 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1206 _("Update all local folders after incorporation"));
1209 /* receive dialog */
1210 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1211 gtk_widget_show (hbox_recvdialog);
1212 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1214 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1215 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1216 gtk_widget_show (label_recvdialog);
1217 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1219 optmenu_recvdialog = gtk_option_menu_new ();
1220 gtk_widget_show (optmenu_recvdialog);
1221 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1223 menu = gtk_menu_new ();
1224 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1225 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
1226 RECV_DIALOG_ACTIVE);
1227 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1229 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1231 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1232 _("Don't popup error dialog on receive error"));
1234 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1235 _("Close receive dialog when finished"));
1237 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1239 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1240 gtk_widget_show (vbox2);
1241 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1242 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1244 hbox = gtk_hbox_new (TRUE, 8);
1245 gtk_widget_show (hbox);
1246 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1247 _("after autochecking"));
1248 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1249 _("after manual checking"));
1250 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1251 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1252 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1254 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1255 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1258 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1259 gtk_widget_show (hbox);
1260 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1263 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1264 "(use %d as number of new "
1266 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1268 gtk_widget_show (label_newmail_notify_cmd);
1269 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1270 label_newmail_notify_cmd, FALSE, FALSE, 0);
1272 entry_newmail_notify_cmd = gtk_entry_new ();
1273 gtk_widget_show (entry_newmail_notify_cmd);
1274 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1275 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1277 gtk_widget_set_sensitive(hbox_newmail_notify,
1278 prefs_common.newmail_notify_auto ||
1279 prefs_common.newmail_notify_manu);
1281 receive.checkbtn_incext = checkbtn_incext;
1282 receive.entry_incext = entry_incext;
1283 /* receive.button_incext = button_incext; */
1285 receive.checkbtn_local = checkbtn_local;
1286 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1287 receive.entry_spool = entry_spool;
1289 receive.checkbtn_autochk = checkbtn_autochk;
1290 receive.spinbtn_autochk = spinbtn_autochk;
1291 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1293 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1294 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1297 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1298 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1299 receive.hbox_newmail_notify = hbox_newmail_notify;
1300 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1301 receive.optmenu_recvdialog = optmenu_recvdialog;
1302 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1303 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1306 static void prefs_send_create(void)
1310 GtkWidget *frame_extsend;
1311 GtkWidget *vbox_extsend;
1312 GtkWidget *checkbtn_extsend;
1314 GtkWidget *label_extsend;
1315 GtkWidget *entry_extsend;
1316 /* GtkWidget *button_extsend; */
1317 GtkWidget *checkbtn_savemsg;
1318 GtkWidget *checkbtn_queuemsg;
1319 GtkWidget *label_outcharset;
1320 GtkWidget *optmenu_charset;
1321 GtkWidget *optmenu_menu;
1322 GtkWidget *menuitem;
1323 GtkWidget *label_charset_desc;
1324 GtkWidget *optmenu_encoding;
1325 GtkWidget *label_encoding;
1326 GtkWidget *label_encoding_desc;
1327 GtkWidget *label_senddialog;
1329 GtkWidget *optmenu_senddialog;
1330 GtkWidget *hbox_senddialog;
1332 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1333 gtk_widget_show (vbox1);
1334 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1335 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1337 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1339 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1340 gtk_widget_show (vbox_extsend);
1341 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1342 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1344 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1345 _("Use external program for sending"));
1347 hbox1 = gtk_hbox_new (FALSE, 8);
1348 gtk_widget_show (hbox1);
1349 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1350 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1352 label_extsend = gtk_label_new (_("Command"));
1353 gtk_widget_show (label_extsend);
1354 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1356 entry_extsend = gtk_entry_new ();
1357 gtk_widget_show (entry_extsend);
1358 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1361 button_extsend = gtk_button_new_with_label ("... ");
1362 gtk_widget_show (button_extsend);
1363 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1366 vbox2 = gtk_vbox_new (FALSE, 0);
1367 gtk_widget_show (vbox2);
1368 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1370 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1371 _("Save sent messages to Sent folder"));
1372 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1373 _("Queue messages that fail to send"));
1375 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1376 gtk_widget_show (hbox1);
1377 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1379 label_senddialog = gtk_label_new (_("Show send dialog"));
1380 gtk_widget_show (label_senddialog);
1381 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1383 optmenu_senddialog = gtk_option_menu_new ();
1384 gtk_widget_show (optmenu_senddialog);
1385 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1387 menu = gtk_menu_new ();
1388 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1389 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1391 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1393 hbox1 = gtk_hbox_new (FALSE, 8);
1394 gtk_widget_show (hbox1);
1395 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1397 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1398 gtk_widget_show (label_outcharset);
1399 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1401 optmenu_charset = gtk_option_menu_new ();
1402 gtk_widget_show (optmenu_charset);
1403 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1405 optmenu_menu = gtk_menu_new ();
1407 #define SET_MENUITEM(str, data) \
1409 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1412 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1413 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1415 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1417 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1418 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1419 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1420 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1421 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1422 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1423 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1425 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1427 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1429 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1430 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1432 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1434 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1435 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1437 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1438 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1440 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1441 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1443 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1444 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1445 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1447 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1450 hbox1 = gtk_hbox_new (FALSE, 8);
1451 gtk_widget_show (hbox1);
1452 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1454 label_charset_desc = gtk_label_new
1455 (_("If `Automatic' is selected, the optimal encoding\n"
1456 "for the current locale will be used."));
1457 gtk_widget_show (label_charset_desc);
1458 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1460 gtk_label_set_justify (GTK_LABEL (label_charset_desc),
1463 hbox1 = gtk_hbox_new (FALSE, 8);
1464 gtk_widget_show (hbox1);
1465 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1467 label_encoding = gtk_label_new (_("Transfer encoding"));
1468 gtk_widget_show (label_encoding);
1469 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1471 optmenu_encoding = gtk_option_menu_new ();
1472 gtk_widget_show (optmenu_encoding);
1473 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1475 optmenu_menu = gtk_menu_new ();
1477 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1478 SET_MENUITEM("base64", CTE_BASE64);
1479 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1480 SET_MENUITEM("8bit", CTE_8BIT);
1482 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1485 hbox1 = gtk_hbox_new (FALSE, 8);
1486 gtk_widget_show (hbox1);
1487 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1489 label_encoding_desc = gtk_label_new
1490 (_("Specify Content-Transfer-Encoding used when\n"
1491 "message body contains non-ASCII characters."));
1492 gtk_widget_show (label_encoding_desc);
1493 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding_desc,
1495 gtk_label_set_justify (GTK_LABEL (label_encoding_desc),
1498 p_send.checkbtn_extsend = checkbtn_extsend;
1499 p_send.entry_extsend = entry_extsend;
1500 /* p_send.button_extsend = button_extsend; */
1502 p_send.checkbtn_savemsg = checkbtn_savemsg;
1503 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1504 p_send.optmenu_senddialog = optmenu_senddialog;
1506 p_send.optmenu_charset = optmenu_charset;
1507 p_send.optmenu_encoding_method = optmenu_encoding;
1510 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1514 toggled = gtk_toggle_button_get_active
1515 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1516 gtk_toggle_button_get_active
1517 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1518 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1522 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1525 gchar *dict_fullname;
1527 g_return_if_fail(param);
1528 g_return_if_fail(param->data);
1529 g_return_if_fail(param->widget);
1530 g_return_if_fail(*(param->widget));
1532 dict_fullname = gtkaspell_get_dictionary_menu_active_item
1533 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1534 str = *((gchar **) param->data);
1537 *((gchar **) param->data) = dict_fullname;
1540 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1543 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1545 GtkWidget *menuitem;
1549 g_return_if_fail(optmenu != NULL);
1550 g_return_if_fail(pparam->data != NULL);
1552 if (*(gchar **) pparam->data) {
1553 menu = gtk_option_menu_get_menu(optmenu);
1554 for (cur = GTK_MENU_SHELL(menu)->children;
1555 cur != NULL; cur = cur->next) {
1556 menuitem = GTK_WIDGET(cur->data);
1557 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1559 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1560 gtk_option_menu_set_history(optmenu, n);
1567 gtk_option_menu_set_history(optmenu, 0);
1568 prefs_dictionary_set_data_from_optmenu(pparam);
1571 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1574 g_return_if_fail(param);
1575 g_return_if_fail(param->data);
1576 g_return_if_fail(param->widget);
1577 g_return_if_fail(*(param->widget));
1579 sugmode = gtkaspell_get_sugmode_from_option_menu
1580 (GTK_OPTION_MENU(*(param->widget)));
1581 *((gint *) param->data) = sugmode;
1584 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1586 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1589 g_return_if_fail(optmenu != NULL);
1590 g_return_if_fail(pparam->data != NULL);
1592 sugmode = *(gint *) pparam->data;
1593 gtkaspell_sugmode_option_menu_set(optmenu, sugmode);
1597 static void prefs_spelling_checkbtn_enable_aspell_toggle_cb
1603 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1605 gtk_widget_set_sensitive(spelling.entry_aspell_path, toggled);
1606 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1607 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1608 gtk_widget_set_sensitive(spelling.btn_aspell_path, toggled);
1609 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1610 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1611 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1614 static void prefs_spelling_btn_aspell_path_clicked_cb(GtkWidget *widget,
1617 gchar *file_path, *tmp;
1618 GtkWidget *new_menu;
1620 file_path = filesel_select_file(_("Select dictionaries location"),
1621 prefs_common.aspell_path);
1622 if (file_path == NULL) {
1626 tmp=g_dirname(file_path);
1628 if (prefs_common.aspell_path)
1629 g_free(prefs_common.aspell_path);
1630 prefs_common.aspell_path = g_strdup_printf("%s%s",tmp,
1633 new_menu = gtkaspell_dictionary_option_menu_new(prefs_common.aspell_path);
1634 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1637 gtk_entry_set_text(GTK_ENTRY(spelling.entry_aspell_path),
1638 prefs_common.aspell_path);
1639 /* select first one */
1640 gtk_option_menu_set_history(GTK_OPTION_MENU(
1641 spelling.optmenu_dictionary), 0);
1643 if (prefs_common.dictionary)
1644 g_free(prefs_common.dictionary);
1646 prefs_common.dictionary =
1647 gtkaspell_get_dictionary_menu_active_item(
1648 gtk_option_menu_get_menu(
1650 spelling.optmenu_dictionary)));
1656 static void prefs_spelling_create()
1659 GtkWidget *frame_spell;
1660 GtkWidget *vbox_spell;
1661 GtkWidget *hbox_aspell_path;
1662 GtkWidget *checkbtn_enable_aspell;
1663 GtkWidget *label_aspell_path;
1664 GtkWidget *entry_aspell_path;
1665 GtkWidget *btn_aspell_path;
1666 GtkWidget *spell_table;
1667 GtkWidget *label_dictionary;
1668 GtkWidget *optmenu_dictionary;
1669 GtkWidget *sugmode_label;
1670 GtkWidget *sugmode_optmenu;
1671 GtkWidget *checkbtn_use_alternate;
1672 GtkWidget *help_label;
1673 GtkWidget *checkbtn_check_while_typing;
1674 GtkWidget *color_label;
1675 GtkWidget *col_align;
1677 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1678 gtk_widget_show (vbox1);
1679 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1680 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1682 /* spell checker defaults */
1683 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1684 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1685 gtk_widget_show (vbox_spell);
1686 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1687 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1689 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_aspell,
1690 _("Enable spell checker"));
1692 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_aspell), "toggled",
1693 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_aspell_toggle_cb),
1696 /* Check while typing */
1697 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1698 _("Check while typing"));
1700 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1701 _("Enable alternate dictionary"));
1703 help_label = gtk_label_new(_("Enabling an alternate dictionary makes switching\n"
1704 "with the last used dictionary faster."));
1705 gtk_misc_set_alignment (GTK_MISC (help_label), 0, 0);
1706 gtk_widget_show(help_label);
1707 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1709 spell_table = gtk_table_new(4, 3, FALSE);
1710 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1711 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1712 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1714 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1716 label_aspell_path = gtk_label_new (_("Dictionaries path:"));
1717 gtk_misc_set_alignment(GTK_MISC(label_aspell_path), 1.0, 0.5);
1718 gtk_widget_show(label_aspell_path);
1719 gtk_table_attach (GTK_TABLE (spell_table), label_aspell_path, 0, 1, 0,
1720 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1722 hbox_aspell_path = gtk_hbox_new (FALSE, 8);
1723 gtk_table_attach (GTK_TABLE (spell_table), hbox_aspell_path, 1, 2, 0,
1724 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1725 gtk_widget_show(hbox_aspell_path);
1727 entry_aspell_path = gtk_entry_new();
1728 gtk_widget_show(entry_aspell_path);
1729 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), entry_aspell_path, TRUE,
1732 gtk_widget_set_sensitive(entry_aspell_path, prefs_common.enable_aspell);
1734 btn_aspell_path = gtk_button_new_with_label(" ... ");
1735 gtk_widget_show(btn_aspell_path);
1736 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), btn_aspell_path, FALSE, FALSE, 0);
1737 gtk_widget_set_sensitive(btn_aspell_path, prefs_common.enable_aspell);
1739 gtk_signal_connect(GTK_OBJECT(btn_aspell_path), "clicked",
1740 GTK_SIGNAL_FUNC(prefs_spelling_btn_aspell_path_clicked_cb),
1743 label_dictionary = gtk_label_new(_("Default dictionary:"));
1744 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1745 gtk_widget_show(label_dictionary);
1746 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1747 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1749 optmenu_dictionary = gtk_option_menu_new();
1750 gtk_widget_show(optmenu_dictionary);
1751 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1752 gtkaspell_dictionary_option_menu_new(
1753 prefs_common.aspell_path));
1754 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1755 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1756 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_aspell);
1758 /* Suggestion mode */
1759 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1760 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1761 gtk_widget_show(sugmode_label);
1762 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1763 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1765 sugmode_optmenu = gtk_option_menu_new();
1766 gtk_widget_show(sugmode_optmenu);
1767 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1768 gtkaspell_sugmode_option_menu_new(prefs_common.aspell_sugmode));
1769 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1770 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1771 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_aspell);
1774 color_label = gtk_label_new(_("Misspelled word color:"));
1775 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1776 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1777 GTK_FILL, GTK_SHRINK, 0, 0);
1778 gtk_widget_show(color_label);
1780 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1781 gtk_widget_show(col_align);
1782 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1783 GTK_FILL, GTK_SHRINK, 0, 0);
1785 spelling.misspelled_btn = gtk_button_new_with_label ("");
1786 set_button_bg_color(spelling.misspelled_btn,
1787 prefs_common.misspelled_col);
1788 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1789 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_aspell);
1790 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1791 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1792 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1795 spelling.checkbtn_enable_aspell = checkbtn_enable_aspell;
1796 spelling.entry_aspell_path = entry_aspell_path;
1797 spelling.btn_aspell_path = btn_aspell_path;
1798 spelling.optmenu_dictionary = optmenu_dictionary;
1799 spelling.optmenu_sugmode = sugmode_optmenu;
1800 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1801 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1807 static void prefs_compose_create(void)
1812 GtkWidget *checkbtn_autoextedit;
1814 GtkWidget *frame_autosel;
1815 GtkWidget *hbox_autosel;
1816 GtkWidget *checkbtn_reply_account_autosel;
1817 GtkWidget *checkbtn_forward_account_autosel;
1818 GtkWidget *checkbtn_reedit_account_autosel;
1820 GtkWidget *hbox_undolevel;
1821 GtkWidget *label_undolevel;
1822 GtkObject *spinbtn_undolevel_adj;
1823 GtkWidget *spinbtn_undolevel;
1825 GtkWidget *vbox_linewrap;
1830 GtkWidget *label_linewrap;
1831 GtkObject *spinbtn_linewrap_adj;
1832 GtkWidget *spinbtn_linewrap;
1833 GtkWidget *checkbtn_wrapquote;
1834 GtkWidget *checkbtn_autowrap;
1835 GtkWidget *checkbtn_wrapatsend;
1837 GtkWidget *checkbtn_default_reply_list;
1839 GtkWidget *checkbtn_forward_as_attachment;
1840 GtkWidget *checkbtn_redirect_keep_from;
1841 GtkWidget *checkbtn_smart_wrapping;
1842 GtkWidget *checkbtn_block_cursor;
1843 GtkWidget *frame_msgwrap;
1845 GtkWidget *hbox_autosave;
1846 GtkWidget *checkbtn_autosave;
1847 GtkWidget *entry_autosave_length;
1848 GtkWidget *label_autosave_length;
1850 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1851 gtk_widget_show (vbox1);
1852 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1853 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1855 /* Account autoselection */
1856 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1858 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1859 gtk_widget_show (hbox_autosel);
1860 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1861 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1863 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1864 _("when replying"));
1865 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1866 _("when forwarding"));
1867 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1868 _("when re-editing"));
1870 vbox2 = gtk_vbox_new (FALSE, 0);
1871 gtk_widget_show (vbox2);
1872 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1874 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1875 _("Reply button invokes mailing list reply"));
1877 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1878 _("Automatically launch the external editor"));
1880 hbox5 = gtk_hbox_new (FALSE, 8);
1881 gtk_widget_show (hbox5);
1882 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1884 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1885 _("Forward as attachment"));
1887 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1890 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1891 _("Keep the original 'From' header when redirecting"));
1894 hbox_autosave = gtk_hbox_new (FALSE, 8);
1895 gtk_widget_show (hbox_autosave);
1896 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1898 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1899 _("Autosave to Drafts folder every "));
1901 entry_autosave_length = gtk_entry_new();
1902 gtk_widget_set_usize (entry_autosave_length, 64, -1);
1903 gtk_widget_show (entry_autosave_length);
1904 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1906 label_autosave_length = gtk_label_new(_("characters"));
1907 gtk_widget_show (label_autosave_length);
1908 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1910 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1911 gtk_widget_show (hbox_undolevel);
1912 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1914 label_undolevel = gtk_label_new (_("Undo level"));
1915 gtk_widget_show (label_undolevel);
1916 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1918 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1919 spinbtn_undolevel = gtk_spin_button_new
1920 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1921 gtk_widget_show (spinbtn_undolevel);
1922 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1923 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1924 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1927 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1929 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1930 gtk_widget_show (vbox_linewrap);
1931 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1932 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1934 hbox3 = gtk_hbox_new (FALSE, 8);
1935 gtk_widget_show (hbox3);
1936 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1939 label_linewrap = gtk_label_new (_("Wrap messages at"));
1940 gtk_widget_show (label_linewrap);
1941 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1943 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1944 spinbtn_linewrap = gtk_spin_button_new
1945 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1946 gtk_widget_show (spinbtn_linewrap);
1947 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1948 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1949 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1951 label_linewrap = gtk_label_new (_("characters"));
1952 gtk_widget_show (label_linewrap);
1953 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1955 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1956 gtk_widget_show (hbox4);
1957 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1959 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1961 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1964 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1966 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1967 _("Smart wrapping (EXPERIMENTAL)"));
1970 compose.checkbtn_quote = checkbtn_quote;
1971 compose.entry_quotemark = entry_quotemark;
1972 compose.text_quotefmt = text_quotefmt;
1975 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1977 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1978 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1979 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1981 compose.spinbtn_undolevel = spinbtn_undolevel;
1982 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1984 compose.spinbtn_linewrap = spinbtn_linewrap;
1985 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1986 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1987 compose.checkbtn_autowrap = checkbtn_autowrap;
1988 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1990 compose.checkbtn_autosave = checkbtn_autosave;
1991 compose.entry_autosave_length = entry_autosave_length;
1993 compose.checkbtn_forward_as_attachment =
1994 checkbtn_forward_as_attachment;
1995 compose.checkbtn_redirect_keep_from =
1996 checkbtn_redirect_keep_from;
1997 compose.checkbtn_smart_wrapping =
1998 checkbtn_smart_wrapping;
1999 compose.checkbtn_block_cursor =
2000 checkbtn_block_cursor;
2001 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
2004 static void prefs_quote_create(void)
2007 GtkWidget *frame_quote;
2008 GtkWidget *vbox_quote;
2011 GtkWidget *label_quotemark;
2012 GtkWidget *entry_quotemark;
2013 GtkWidget *scrolledwin_quotefmt;
2014 GtkWidget *text_quotefmt;
2016 GtkWidget *entry_fw_quotemark;
2017 GtkWidget *text_fw_quotefmt;
2019 GtkWidget *entry_quote_chars;
2020 GtkWidget *label_quote_chars;
2022 GtkWidget *btn_quotedesc;
2024 GtkWidget *checkbtn_reply_with_quote;
2026 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2027 gtk_widget_show (vbox1);
2028 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2029 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2033 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
2035 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
2037 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2038 gtk_widget_show (vbox_quote);
2039 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2040 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2042 hbox1 = gtk_hbox_new (FALSE, 32);
2043 gtk_widget_show (hbox1);
2044 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2046 hbox2 = gtk_hbox_new (FALSE, 8);
2047 gtk_widget_show (hbox2);
2048 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2050 label_quotemark = gtk_label_new (_("Quotation mark"));
2051 gtk_widget_show (label_quotemark);
2052 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2054 entry_quotemark = gtk_entry_new ();
2055 gtk_widget_show (entry_quotemark);
2056 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
2057 gtk_widget_set_usize (entry_quotemark, 64, -1);
2059 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2060 gtk_widget_show (scrolledwin_quotefmt);
2061 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2062 gtk_scrolled_window_set_policy
2063 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2064 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2066 text_quotefmt = gtk_text_new (NULL, NULL);
2067 gtk_widget_show (text_quotefmt);
2068 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2069 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2070 gtk_widget_set_usize(text_quotefmt, -1, 60);
2074 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
2076 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2077 gtk_widget_show (vbox_quote);
2078 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2079 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2081 hbox1 = gtk_hbox_new (FALSE, 32);
2082 gtk_widget_show (hbox1);
2083 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2085 hbox2 = gtk_hbox_new (FALSE, 8);
2086 gtk_widget_show (hbox2);
2087 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2089 label_quotemark = gtk_label_new (_("Quotation mark"));
2090 gtk_widget_show (label_quotemark);
2091 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2093 entry_fw_quotemark = gtk_entry_new ();
2094 gtk_widget_show (entry_fw_quotemark);
2095 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
2097 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2099 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2100 gtk_widget_show (scrolledwin_quotefmt);
2101 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2102 gtk_scrolled_window_set_policy
2103 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2104 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2106 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2107 gtk_widget_show (text_fw_quotefmt);
2108 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
2110 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2111 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
2113 hbox1 = gtk_hbox_new (FALSE, 32);
2114 gtk_widget_show (hbox1);
2115 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2118 gtk_button_new_with_label (_(" Description of symbols "));
2119 gtk_widget_show (btn_quotedesc);
2120 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
2121 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2122 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
2126 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
2128 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2129 gtk_widget_show (vbox_quote);
2130 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2131 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2133 hbox1 = gtk_hbox_new (FALSE, 32);
2134 gtk_widget_show (hbox1);
2135 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2137 hbox2 = gtk_hbox_new (FALSE, 8);
2138 gtk_widget_show (hbox2);
2139 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2141 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2142 gtk_widget_show (label_quote_chars);
2143 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2145 entry_quote_chars = gtk_entry_new ();
2146 gtk_widget_show (entry_quote_chars);
2147 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2149 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2152 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2153 quote.entry_quotemark = entry_quotemark;
2154 quote.text_quotefmt = text_quotefmt;
2155 quote.entry_fw_quotemark = entry_fw_quotemark;
2156 quote.text_fw_quotefmt = text_fw_quotefmt;
2157 quote.entry_quote_chars = entry_quote_chars;
2160 static void prefs_display_create(void)
2163 GtkWidget *frame_font;
2165 GtkWidget *label_textfont;
2166 GtkWidget *entry_textfont;
2167 GtkWidget *button_textfont;
2168 GtkWidget *chkbtn_transhdr;
2169 GtkWidget *chkbtn_folder_unread;
2171 GtkWidget *label_ng_abbrev;
2172 GtkWidget *spinbtn_ng_abbrev_len;
2173 GtkObject *spinbtn_ng_abbrev_len_adj;
2174 GtkWidget *frame_summary;
2176 GtkWidget *chkbtn_swapfrom;
2177 GtkWidget *chkbtn_useaddrbook;
2178 GtkWidget *chkbtn_threadsubj;
2180 GtkWidget *label_datefmt;
2181 GtkWidget *button_datefmt;
2182 GtkWidget *entry_datefmt;
2183 GtkWidget *button_dispitem;
2184 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2186 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2187 gtk_widget_show (vbox1);
2188 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2189 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2191 PACK_FRAME(vbox1, frame_font, _("Font"));
2193 table1 = gtk_table_new (4, 3, FALSE);
2195 gtk_widget_show (table1);
2196 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2197 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2198 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2199 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2201 label_textfont = gtk_label_new (_("Text"));
2202 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2203 gtk_widget_show (label_textfont);
2204 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2205 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2207 entry_textfont = gtk_entry_new ();
2208 gtk_widget_show (entry_textfont);
2209 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2210 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2212 button_textfont = gtk_button_new_with_label (" ... ");
2214 gtk_widget_show (button_textfont);
2215 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2217 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2218 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2220 tmplabel = gtk_label_new (_("Small"));
2221 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2222 gtk_widget_show (tmplabel);
2223 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2224 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2226 tmpentry = gtk_entry_new ();
2227 gtk_widget_show (tmpentry);
2228 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2229 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2231 tmpbutton = gtk_button_new_with_label (" ... ");
2232 gtk_widget_show (tmpbutton);
2233 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2235 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2236 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2237 display.entry_smallfont = tmpentry;
2239 tmplabel = gtk_label_new (_("Normal"));
2240 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2241 gtk_widget_show (tmplabel);
2242 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2243 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2245 tmpentry = gtk_entry_new ();
2246 gtk_widget_show (tmpentry);
2247 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2248 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2250 tmpbutton = gtk_button_new_with_label (" ... ");
2251 gtk_widget_show (tmpbutton);
2252 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2254 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2255 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2256 display.entry_normalfont = tmpentry;
2258 tmplabel = gtk_label_new (_("Bold"));
2259 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2260 gtk_widget_show (tmplabel);
2261 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2262 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2264 tmpentry = gtk_entry_new ();
2265 gtk_widget_show (tmpentry);
2266 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2267 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2269 tmpbutton = gtk_button_new_with_label (" ... ");
2270 gtk_widget_show (tmpbutton);
2271 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2273 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2274 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2275 display.entry_boldfont = tmpentry;
2277 vbox2 = gtk_vbox_new (FALSE, 0);
2278 gtk_widget_show (vbox2);
2279 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2282 (vbox2, chkbtn_transhdr,
2283 _("Translate header name (such as `From:', `Subject:')"));
2285 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2286 _("Display unread number next to folder name"));
2288 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2290 hbox1 = gtk_hbox_new (FALSE, 8);
2291 gtk_widget_show (hbox1);
2292 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2294 label_ng_abbrev = gtk_label_new
2295 (_("Abbreviate newsgroup names longer than"));
2296 gtk_widget_show (label_ng_abbrev);
2297 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2299 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2300 spinbtn_ng_abbrev_len = gtk_spin_button_new
2301 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2302 gtk_widget_show (spinbtn_ng_abbrev_len);
2303 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2305 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2306 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2309 label_ng_abbrev = gtk_label_new
2311 gtk_widget_show (label_ng_abbrev);
2312 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2314 /* ---- Summary ---- */
2316 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2318 vbox2 = gtk_vbox_new (FALSE, 0);
2319 gtk_widget_show (vbox2);
2320 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2321 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2324 (vbox2, chkbtn_swapfrom,
2325 _("Display recipient in `From' column if sender is yourself"));
2327 (vbox2, chkbtn_useaddrbook,
2328 _("Display sender using address book"));
2330 (vbox2, chkbtn_threadsubj,
2331 _("Thread using subject in addition to standard headers"));
2333 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2335 hbox1 = gtk_hbox_new (FALSE, 8);
2336 gtk_widget_show (hbox1);
2337 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2339 label_datefmt = gtk_label_new (_("Date format"));
2340 gtk_widget_show (label_datefmt);
2341 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2343 entry_datefmt = gtk_entry_new ();
2344 gtk_widget_show (entry_datefmt);
2345 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2347 button_datefmt = gtk_button_new_with_label (" ... ");
2349 gtk_widget_show (button_datefmt);
2350 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2351 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2352 GTK_SIGNAL_FUNC (date_format_create), NULL);
2354 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2356 hbox1 = gtk_hbox_new (FALSE, 8);
2357 gtk_widget_show (hbox1);
2358 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2360 button_dispitem = gtk_button_new_with_label
2361 (_(" Set displayed items in summary... "));
2362 gtk_widget_show (button_dispitem);
2363 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2364 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2365 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2368 display.entry_textfont = entry_textfont;
2369 display.button_textfont = button_textfont;
2371 display.chkbtn_transhdr = chkbtn_transhdr;
2372 display.chkbtn_folder_unread = chkbtn_folder_unread;
2373 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2374 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2376 display.chkbtn_swapfrom = chkbtn_swapfrom;
2377 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2378 display.chkbtn_threadsubj = chkbtn_threadsubj;
2379 display.entry_datefmt = entry_datefmt;
2382 static void prefs_message_create(void)
2388 GtkWidget *chkbtn_enablecol;
2389 GtkWidget *button_edit_col;
2390 GtkWidget *chkbtn_mbalnum;
2391 GtkWidget *chkbtn_disphdrpane;
2392 GtkWidget *chkbtn_disphdr;
2393 GtkWidget *button_edit_disphdr;
2394 GtkWidget *hbox_linespc;
2395 GtkWidget *label_linespc;
2396 GtkObject *spinbtn_linespc_adj;
2397 GtkWidget *spinbtn_linespc;
2398 GtkWidget *chkbtn_headspc;
2400 GtkWidget *frame_scr;
2401 GtkWidget *vbox_scr;
2402 GtkWidget *chkbtn_smoothscroll;
2403 GtkWidget *hbox_scr;
2404 GtkWidget *label_scr;
2405 GtkObject *spinbtn_scrollstep_adj;
2406 GtkWidget *spinbtn_scrollstep;
2407 GtkWidget *chkbtn_halfpage;
2409 GtkWidget *chkbtn_attach_desc;
2411 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2412 gtk_widget_show (vbox1);
2413 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2414 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2416 vbox2 = gtk_vbox_new (FALSE, 0);
2417 gtk_widget_show (vbox2);
2418 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2420 hbox1 = gtk_hbox_new (FALSE, 8);
2421 gtk_widget_show (hbox1);
2422 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2424 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2425 _("Enable coloration of message"));
2426 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2427 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2430 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2431 gtk_widget_show (button_edit_col);
2432 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2433 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2434 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2436 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2439 (vbox2, chkbtn_mbalnum,
2440 _("Display multi-byte alphanumeric as\n"
2441 "ASCII character (Japanese only)"));
2442 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
2445 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2446 _("Display header pane above message view"));
2448 hbox1 = gtk_hbox_new (FALSE, 8);
2449 gtk_widget_show (hbox1);
2450 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2452 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2453 _("Display short headers on message view"));
2455 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2456 gtk_widget_show (button_edit_disphdr);
2457 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2459 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2460 GTK_SIGNAL_FUNC (prefs_display_header_open),
2463 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2465 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2467 hbox1 = gtk_hbox_new (FALSE, 32);
2468 gtk_widget_show (hbox1);
2469 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2471 hbox_linespc = gtk_hbox_new (FALSE, 8);
2472 gtk_widget_show (hbox1);
2473 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2475 label_linespc = gtk_label_new (_("Line space"));
2476 gtk_widget_show (label_linespc);
2477 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2480 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2481 spinbtn_linespc = gtk_spin_button_new
2482 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2483 gtk_widget_show (spinbtn_linespc);
2484 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2486 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2487 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2489 label_linespc = gtk_label_new (_("pixel(s)"));
2490 gtk_widget_show (label_linespc);
2491 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2494 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2496 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2498 vbox_scr = gtk_vbox_new (FALSE, 0);
2499 gtk_widget_show (vbox_scr);
2500 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2501 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2503 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2505 hbox1 = gtk_hbox_new (FALSE, 32);
2506 gtk_widget_show (hbox1);
2507 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2509 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2511 hbox_scr = gtk_hbox_new (FALSE, 8);
2512 gtk_widget_show (hbox_scr);
2513 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2515 label_scr = gtk_label_new (_("Step"));
2516 gtk_widget_show (label_scr);
2517 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2519 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2520 spinbtn_scrollstep = gtk_spin_button_new
2521 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2522 gtk_widget_show (spinbtn_scrollstep);
2523 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2525 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2526 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2529 label_scr = gtk_label_new (_("pixel(s)"));
2530 gtk_widget_show (label_scr);
2531 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2533 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2535 vbox3 = gtk_vbox_new (FALSE, 0);
2536 gtk_widget_show (vbox3);
2537 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
2539 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
2540 _("Show attachment descriptions (rather than names)"));
2543 message.chkbtn_enablecol = chkbtn_enablecol;
2544 message.button_edit_col = button_edit_col;
2545 message.chkbtn_mbalnum = chkbtn_mbalnum;
2546 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2547 message.chkbtn_disphdr = chkbtn_disphdr;
2548 message.spinbtn_linespc = spinbtn_linespc;
2549 message.chkbtn_headspc = chkbtn_headspc;
2551 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2552 message.spinbtn_scrollstep = spinbtn_scrollstep;
2553 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2554 message.chkbtn_halfpage = chkbtn_halfpage;
2556 message.chkbtn_attach_desc = chkbtn_attach_desc;
2560 static void prefs_privacy_create(void)
2566 GtkWidget *hbox_spc;
2568 GtkWidget *checkbtn_auto_check_signatures;
2569 GtkWidget *checkbtn_gpg_signature_popup;
2570 GtkWidget *checkbtn_store_passphrase;
2571 GtkObject *spinbtn_store_passphrase_adj;
2572 GtkWidget *spinbtn_store_passphrase;
2573 GtkWidget *checkbtn_passphrase_grab;
2574 GtkWidget *checkbtn_gpg_warning;
2576 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2577 gtk_widget_show (vbox1);
2578 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2579 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2581 vbox2 = gtk_vbox_new (FALSE, 0);
2582 gtk_widget_show (vbox2);
2583 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2585 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2586 _("Automatically check signatures"));
2588 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2589 _("Show signature check result in a popup window"));
2591 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2592 _("Store passphrase in memory temporarily"));
2594 vbox3 = gtk_vbox_new (FALSE, 0);
2595 gtk_widget_show (vbox3);
2596 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2598 hbox1 = gtk_hbox_new (FALSE, 8);
2599 gtk_widget_show (hbox1);
2600 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2602 hbox_spc = gtk_hbox_new (FALSE, 0);
2603 gtk_widget_show (hbox_spc);
2604 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2605 gtk_widget_set_usize (hbox_spc, 12, -1);
2607 label = gtk_label_new (_("Expire after"));
2608 gtk_widget_show (label);
2609 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2611 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2612 spinbtn_store_passphrase = gtk_spin_button_new
2613 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2614 gtk_widget_show (spinbtn_store_passphrase);
2615 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2616 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2618 gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1);
2620 label = gtk_label_new (_("minute(s) "));
2621 gtk_widget_show (label);
2622 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2624 hbox1 = gtk_hbox_new (FALSE, 8);
2625 gtk_widget_show (hbox1);
2626 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2628 hbox_spc = gtk_hbox_new (FALSE, 0);
2629 gtk_widget_show (hbox_spc);
2630 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2631 gtk_widget_set_usize (hbox_spc, 12, -1);
2633 label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
2634 " for the whole session)"));
2635 gtk_widget_show (label);
2636 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2637 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2639 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2642 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2643 _("Grab input while entering a passphrase"));
2647 (vbox2, checkbtn_gpg_warning,
2648 _("Display warning on startup if GnuPG doesn't work"));
2650 hbox1 = gtk_hbox_new (FALSE, 8);
2651 gtk_widget_show (hbox1);
2652 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2654 privacy.checkbtn_auto_check_signatures
2655 = checkbtn_auto_check_signatures;
2656 privacy.checkbtn_gpg_signature_popup
2657 = checkbtn_gpg_signature_popup;
2658 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2659 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2660 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2661 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2662 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2664 #endif /* USE_GPGME */
2666 static void prefs_interface_create(void)
2671 /* GtkWidget *checkbtn_emacs; */
2672 GtkWidget *checkbtn_always_show_msg;
2673 GtkWidget *checkbtn_openunread;
2674 GtkWidget *checkbtn_mark_as_read_on_newwin;
2675 GtkWidget *checkbtn_openinbox;
2676 GtkWidget *checkbtn_immedexec;
2680 GtkWidget *menuitem;
2682 GtkWidget *button_keybind;
2684 GtkWidget *hbox_nextunreadmsgdialog;
2685 GtkWidget *optmenu_nextunreadmsgdialog;
2687 GtkWidget *frame_pixmap_theme;
2688 GtkWidget *vbox_pixmap_theme;
2689 GtkWidget *entry_pixmap_theme;
2690 GtkWidget *combo_pixmap_theme;
2691 GList *avail_pixmap_themes = NULL;
2693 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2694 gtk_widget_show (vbox1);
2695 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2696 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2698 vbox2 = gtk_vbox_new (FALSE, 0);
2699 gtk_widget_show (vbox2);
2700 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2702 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2703 _("Emulate the behavior of mouse operation of\n"
2704 "Emacs-based mailer"));
2705 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2706 GTK_JUSTIFY_LEFT); */
2709 (vbox2, checkbtn_always_show_msg,
2710 _("Always open messages in summary when selected"));
2713 (vbox2, checkbtn_openunread,
2714 _("Open first unread message when entering a folder"));
2717 (vbox2, checkbtn_mark_as_read_on_newwin,
2718 _("Only mark message as read when opened in new window"));
2721 (vbox2, checkbtn_openinbox,
2722 _("Go to inbox after receiving new mail"));
2724 vbox3 = gtk_vbox_new (FALSE, 0);
2725 gtk_widget_show (vbox3);
2726 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2729 (vbox3, checkbtn_immedexec,
2730 _("Execute immediately when moving or deleting messages"));
2732 hbox1 = gtk_hbox_new (FALSE, 0);
2733 gtk_widget_show (hbox1);
2734 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2736 label = gtk_label_new
2737 (_("(Messages will be marked until execution\n"
2738 " if this is turned off)"));
2739 gtk_widget_show (label);
2740 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2741 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2743 /* Next Unread Message Dialog */
2744 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
2745 gtk_widget_show (hbox1);
2746 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
2748 label = gtk_label_new (_("Show no-unread-message dialog"));
2749 gtk_widget_show (label);
2750 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
2752 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2753 gtk_widget_show (optmenu_nextunreadmsgdialog);
2754 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2756 menu = gtk_menu_new ();
2757 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2758 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2759 NEXTUNREADMSGDIALOG_ASSUME_YES);
2760 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2761 NEXTUNREADMSGDIALOG_ASSUME_NO);
2763 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2765 hbox1 = gtk_hbox_new (FALSE, 8);
2766 gtk_widget_show (hbox1);
2767 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2769 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2770 gtk_widget_show (button_keybind);
2771 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2772 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2773 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2775 PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme"));
2777 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2778 gtk_widget_show(vbox_pixmap_theme);
2779 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2780 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2782 avail_pixmap_themes = stock_pixmap_themes_list_new();
2784 combo_pixmap_theme = gtk_combo_new ();
2785 gtk_widget_show (combo_pixmap_theme);
2786 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2787 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2788 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2790 stock_pixmap_themes_list_free(avail_pixmap_themes);
2792 /* interface.checkbtn_emacs = checkbtn_emacs; */
2793 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2794 interface.checkbtn_openunread = checkbtn_openunread;
2795 interface.checkbtn_mark_as_read_on_newwin
2796 = checkbtn_mark_as_read_on_newwin;
2797 interface.checkbtn_openinbox = checkbtn_openinbox;
2798 interface.checkbtn_immedexec = checkbtn_immedexec;
2799 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2800 interface.combo_pixmap_theme = combo_pixmap_theme;
2801 interface.entry_pixmap_theme = entry_pixmap_theme;
2804 static void prefs_other_create(void)
2807 GtkWidget *ext_frame;
2808 GtkWidget *ext_table;
2811 GtkWidget *uri_label;
2812 GtkWidget *uri_combo;
2813 GtkWidget *uri_entry;
2815 GtkWidget *printcmd_label;
2816 GtkWidget *printcmd_entry;
2818 GtkWidget *exteditor_label;
2819 GtkWidget *exteditor_combo;
2820 GtkWidget *exteditor_entry;
2822 GtkWidget *frame_addr;
2823 GtkWidget *vbox_addr;
2824 GtkWidget *checkbtn_addaddrbyclick;
2826 GtkWidget *frame_cliplog;
2827 GtkWidget *vbox_cliplog;
2828 GtkWidget *hbox_cliplog;
2829 GtkWidget *checkbtn_cliplog;
2830 GtkWidget *loglength_label;
2831 GtkWidget *loglength_entry;
2833 GtkWidget *frame_exit;
2834 GtkWidget *vbox_exit;
2835 GtkWidget *checkbtn_confonexit;
2836 GtkWidget *checkbtn_cleanonexit;
2837 GtkWidget *checkbtn_askonclean;
2838 GtkWidget *checkbtn_warnqueued;
2840 GtkWidget *label_iotimeout;
2841 GtkWidget *spinbtn_iotimeout;
2842 GtkObject *spinbtn_iotimeout_adj;
2846 GtkWidget *frame_ssl;
2847 GtkWidget *vbox_ssl;
2848 GtkWidget *hbox_ssl;
2849 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2852 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2853 gtk_widget_show (vbox1);
2854 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2855 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2857 PACK_FRAME(vbox1, ext_frame,
2858 _("External commands (%s will be replaced with file name / URI)"));
2860 ext_table = gtk_table_new (3, 2, FALSE);
2861 gtk_widget_show (ext_table);
2862 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2863 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2864 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2865 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2867 uri_label = gtk_label_new (_("Web browser"));
2868 gtk_widget_show(uri_label);
2869 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2870 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2871 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2873 uri_combo = gtk_combo_new ();
2874 gtk_widget_show (uri_combo);
2875 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2876 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2877 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2878 DEFAULT_BROWSER_CMD,
2879 "galeon --new-tab '%s'",
2881 "mozilla -remote 'openurl(%s,new-window)'",
2882 "netscape -remote 'openURL(%s, new-window)'",
2884 "gnome-moz-remote --newwin '%s'",
2885 "kfmclient openURL '%s'",
2886 "opera -newwindow '%s'",
2887 "kterm -e w3m '%s'",
2888 "kterm -e lynx '%s'",
2890 uri_entry = GTK_COMBO (uri_combo)->entry;
2892 printcmd_label = gtk_label_new (_("Print"));
2893 gtk_widget_show (printcmd_label);
2894 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2895 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2896 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2898 printcmd_entry = gtk_entry_new ();
2899 gtk_widget_show (printcmd_entry);
2900 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2901 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2903 exteditor_label = gtk_label_new (_("Editor"));
2904 gtk_widget_show (exteditor_label);
2905 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2906 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2907 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2909 exteditor_combo = gtk_combo_new ();
2910 gtk_widget_show (exteditor_combo);
2911 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2912 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2913 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2916 "mgedit --no-fork %s",
2922 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2924 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2926 vbox_addr = gtk_vbox_new (FALSE, 0);
2927 gtk_widget_show (vbox_addr);
2928 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2929 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2932 (vbox_addr, checkbtn_addaddrbyclick,
2933 _("Add address to destination when double-clicked"));
2936 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2938 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2939 gtk_widget_show (vbox_cliplog);
2940 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2941 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2942 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2943 _("Clip the log size"));
2944 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2945 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2946 gtk_widget_show (hbox_cliplog);
2948 loglength_label = gtk_label_new (_("Log window length"));
2949 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2951 gtk_widget_show (GTK_WIDGET (loglength_label));
2952 loglength_entry = gtk_entry_new ();
2953 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2954 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2956 gtk_widget_show (GTK_WIDGET (loglength_entry));
2957 loglength_label = gtk_label_new (_("(0 to stop logging in the log window)"));
2958 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2960 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2965 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2967 vbox_ssl = gtk_vbox_new (FALSE, 0);
2968 gtk_widget_show (vbox_ssl);
2969 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2970 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2971 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2972 _("Ask before accepting SSL certificates"));
2973 hbox_ssl = gtk_hbox_new (FALSE, 3);
2974 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2975 gtk_widget_show (hbox_ssl);
2980 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2982 vbox_exit = gtk_vbox_new (FALSE, 0);
2983 gtk_widget_show (vbox_exit);
2984 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2985 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2987 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2988 _("Confirm on exit"));
2990 hbox1 = gtk_hbox_new (FALSE, 32);
2991 gtk_widget_show (hbox1);
2992 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2994 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2995 _("Empty trash on exit"));
2996 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2997 _("Ask before emptying"));
2998 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
3000 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
3001 _("Warn if there are queued messages"));
3003 hbox1 = gtk_hbox_new (FALSE, 8);
3004 gtk_widget_show (hbox1);
3005 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3007 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
3008 gtk_widget_show (label_iotimeout);
3009 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
3011 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
3012 spinbtn_iotimeout = gtk_spin_button_new
3013 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
3014 gtk_widget_show (spinbtn_iotimeout);
3015 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
3017 gtk_widget_set_usize (spinbtn_iotimeout, 64, -1);
3018 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
3020 label_iotimeout = gtk_label_new (_("second(s)"));
3021 gtk_widget_show (label_iotimeout);
3022 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
3024 other.uri_combo = uri_combo;
3025 other.uri_entry = uri_entry;
3026 other.printcmd_entry = printcmd_entry;
3028 other.exteditor_combo = exteditor_combo;
3029 other.exteditor_entry = exteditor_entry;
3031 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
3033 other.checkbtn_cliplog = checkbtn_cliplog;
3034 other.loglength_entry = loglength_entry;
3036 other.checkbtn_confonexit = checkbtn_confonexit;
3037 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
3038 other.checkbtn_askonclean = checkbtn_askonclean;
3039 other.checkbtn_warnqueued = checkbtn_warnqueued;
3041 other.spinbtn_iotimeout = spinbtn_iotimeout;
3042 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
3046 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
3051 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
3053 GtkWidget *datefmt_sample = NULL;
3056 g_return_if_fail(widget != NULL);
3057 g_return_if_fail(*widget != NULL);
3058 g_return_if_fail(display.entry_datefmt != NULL);
3060 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3061 (GTK_OBJECT(*widget), "datefmt_sample"));
3062 g_return_if_fail(datefmt_sample != NULL);
3064 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
3065 g_free(prefs_common.date_format);
3066 prefs_common.date_format = text;
3067 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
3069 gtk_widget_destroy(*widget);
3073 static void date_format_cancel_btn_clicked(GtkButton *button,
3076 g_return_if_fail(widget != NULL);
3077 g_return_if_fail(*widget != NULL);
3079 gtk_widget_destroy(*widget);
3083 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
3086 if (event && event->keyval == GDK_Escape)
3087 date_format_cancel_btn_clicked(NULL, widget);
3090 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
3091 GdkEventAny *event, GtkWidget **widget)
3093 g_return_val_if_fail(widget != NULL, FALSE);
3094 g_return_val_if_fail(*widget != NULL, FALSE);
3100 static void date_format_entry_on_change(GtkEditable *editable,
3104 struct tm *cal_time;
3108 cur_time = time(NULL);
3109 cal_time = localtime(&cur_time);
3111 text = gtk_editable_get_chars(editable, 0, -1);
3113 strftime(buffer, sizeof buffer, text, cal_time);
3115 gtk_label_set_text(example, buffer);
3118 static void date_format_select_row(GtkWidget *date_format_list, gint row,
3119 gint column, GdkEventButton *event,
3120 GtkWidget *date_format)
3126 GtkWidget *datefmt_sample;
3128 /* only on double click */
3129 if (!event || event->type != GDK_2BUTTON_PRESS) return;
3132 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3133 (GTK_OBJECT(date_format), "datefmt_sample"));
3135 g_return_if_fail(date_format_list != NULL);
3136 g_return_if_fail(date_format != NULL);
3137 g_return_if_fail(datefmt_sample != NULL);
3139 /* get format from clist */
3140 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
3142 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
3143 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
3145 /* insert the format into the text entry */
3146 new_format = g_malloc(strlen(old_format) + 3);
3148 strncpy(new_format, old_format, cur_pos);
3149 new_format[cur_pos] = '\0';
3150 strcat(new_format, format);
3151 strcat(new_format, &old_format[cur_pos]);
3153 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3154 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3159 static GtkWidget *date_format_create(GtkButton *button, void *data)
3161 static GtkWidget *datefmt_win = NULL;
3163 GtkWidget *scrolledwindow1;
3164 GtkWidget *datefmt_clist;
3169 GtkWidget *confirm_area;
3171 GtkWidget *cancel_btn;
3172 GtkWidget *datefmt_entry;
3201 const gint TIME_FORMAT_ELEMS =
3202 sizeof time_format / sizeof time_format[0];
3204 time_format[0].txt = _("the full abbreviated weekday name");
3205 time_format[1].txt = _("the full weekday name");
3206 time_format[2].txt = _("the abbreviated month name");
3207 time_format[3].txt = _("the full month name");
3208 time_format[4].txt = _("the preferred date and time for the current locale");
3209 time_format[5].txt = _("the century number (year/100)");
3210 time_format[6].txt = _("the day of the month as a decimal number");
3211 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3212 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3213 time_format[9].txt = _("the day of the year as a decimal number");
3214 time_format[10].txt = _("the month as a decimal number");
3215 time_format[11].txt = _("the minute as a decimal number");
3216 time_format[12].txt = _("either AM or PM");
3217 time_format[13].txt = _("the second as a decimal number");
3218 time_format[14].txt = _("the day of the week as a decimal number");
3219 time_format[15].txt = _("the preferred date for the current locale");
3220 time_format[16].txt = _("the last two digits of a year");
3221 time_format[17].txt = _("the year as a decimal number");
3222 time_format[18].txt = _("the time zone or name or abbreviation");
3224 if (datefmt_win) return datefmt_win;
3226 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3227 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3228 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3229 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3230 gtk_widget_set_usize(datefmt_win, 440, 280);
3232 vbox1 = gtk_vbox_new(FALSE, 10);
3233 gtk_widget_show(vbox1);
3234 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3236 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3237 gtk_scrolled_window_set_policy
3238 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3239 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3240 gtk_widget_show(scrolledwindow1);
3241 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3243 titles[0] = _("Specifier");
3244 titles[1] = _("Description");
3245 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3246 gtk_widget_show(datefmt_clist);
3247 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3248 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3249 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3250 GTK_SELECTION_BROWSE);
3252 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3254 /* phoney casting necessary because of gtk... */
3255 text[0] = (gchar *)time_format[i].fmt;
3256 text[1] = (gchar *)time_format[i].txt;
3257 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3260 table = gtk_table_new(2, 2, FALSE);
3261 gtk_widget_show(table);
3262 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3263 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3264 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3266 label1 = gtk_label_new(_("Date format"));
3267 gtk_widget_show(label1);
3268 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3270 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3271 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3273 datefmt_entry = gtk_entry_new_with_max_length(256);
3274 gtk_widget_show(datefmt_entry);
3275 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3276 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3278 /* we need the "sample" entry box; add it as data so callbacks can
3279 * get the entry box */
3280 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3283 label2 = gtk_label_new(_("Example"));
3284 gtk_widget_show(label2);
3285 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3287 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3288 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3290 label3 = gtk_label_new("");
3291 gtk_widget_show(label3);
3292 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3293 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3294 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3295 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3297 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3298 &cancel_btn, _("Cancel"), NULL, NULL);
3299 gtk_widget_grab_default(ok_btn);
3300 gtk_widget_show(confirm_area);
3302 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3304 /* set the current format */
3305 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3306 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3309 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3310 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3312 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3313 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3315 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3316 GTK_SIGNAL_FUNC(date_format_key_pressed),
3318 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3319 GTK_SIGNAL_FUNC(date_format_on_delete),
3321 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3322 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3325 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3326 GTK_SIGNAL_FUNC(date_format_select_row),
3329 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3330 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3332 gtk_widget_show(datefmt_win);
3333 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3335 gtk_widget_grab_focus(ok_btn);
3340 void prefs_quote_colors_dialog(void)
3342 if (!quote_color_win)
3343 prefs_quote_colors_dialog_create();
3344 gtk_widget_show(quote_color_win);
3345 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3348 gtk_widget_hide(quote_color_win);
3350 textview_update_message_colors();
3351 main_window_reflect_prefs_all();
3354 static void prefs_quote_colors_dialog_create(void)
3359 GtkWidget *quotelevel1_label;
3360 GtkWidget *quotelevel2_label;
3361 GtkWidget *quotelevel3_label;
3362 GtkWidget *uri_label;
3363 GtkWidget *signature_label;
3364 GtkWidget *tgt_folder_label;
3367 GtkWidget *recycle_colors_btn;
3368 GtkWidget *frame_colors;
3370 window = gtk_window_new(GTK_WINDOW_DIALOG);
3371 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3372 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3373 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3374 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3375 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3377 vbox = gtk_vbox_new (FALSE, VSPACING);
3378 gtk_container_add (GTK_CONTAINER (window), vbox);
3379 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3380 PACK_FRAME(vbox, frame_colors, _("Colors"));
3382 table = gtk_table_new (5, 2, FALSE);
3383 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3384 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3385 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3386 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3389 color_buttons.quote_level1_btn = gtk_button_new();
3390 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3391 0, 1, 0, 1, 0, 0, 0, 0);
3392 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3393 gtk_container_set_border_width
3394 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3396 color_buttons.quote_level2_btn = gtk_button_new();
3397 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3398 0, 1, 1, 2, 0, 0, 0, 0);
3399 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3400 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3402 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3403 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3404 0, 1, 2, 3, 0, 0, 0, 0);
3405 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3406 gtk_container_set_border_width
3407 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3409 color_buttons.uri_btn = gtk_button_new_with_label ("");
3410 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3411 0, 1, 3, 4, 0, 0, 0, 0);
3412 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3413 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3415 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3416 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3417 0, 1, 4, 5, 0, 0, 0, 0);
3418 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3419 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3421 color_buttons.signature_btn = gtk_button_new_with_label ("");
3422 gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn,
3423 0, 1, 5, 6, 0, 0, 0, 0);
3424 gtk_widget_set_usize (color_buttons.signature_btn, 40, 30);
3425 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5);
3427 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3428 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3429 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3430 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3431 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3433 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3434 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3435 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3436 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3437 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3439 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3440 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3441 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3442 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3443 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3445 uri_label = gtk_label_new (_("URI link"));
3446 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3447 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3448 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3449 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3451 tgt_folder_label = gtk_label_new (_("Target folder"));
3452 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3453 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3454 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3455 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3457 signature_label = gtk_label_new (_("Signatures"));
3458 gtk_table_attach (GTK_TABLE (table), signature_label, 1, 2, 5, 6,
3459 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3460 gtk_label_set_justify (GTK_LABEL (signature_label), GTK_JUSTIFY_LEFT);
3461 gtk_misc_set_alignment (GTK_MISC (signature_label), 0, 0.5);
3463 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3464 _("Recycle quote colors"));
3466 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3467 NULL, NULL, NULL, NULL);
3468 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3470 gtk_widget_grab_default(ok_btn);
3471 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3472 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3473 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3474 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3475 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3478 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3479 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3480 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3481 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3482 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3483 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3484 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3485 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3486 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3487 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3488 gtk_signal_connect(GTK_OBJECT(color_buttons.signature_btn), "clicked",
3489 GTK_SIGNAL_FUNC(quote_color_set_dialog), "SIGNATURE");
3490 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3491 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3492 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3493 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3495 /* show message button colors and recycle options */
3496 set_button_bg_color(color_buttons.quote_level1_btn,
3497 prefs_common.quote_level1_col);
3498 set_button_bg_color(color_buttons.quote_level2_btn,
3499 prefs_common.quote_level2_col);
3500 set_button_bg_color(color_buttons.quote_level3_btn,
3501 prefs_common.quote_level3_col);
3502 set_button_bg_color(color_buttons.uri_btn,
3503 prefs_common.uri_col);
3504 set_button_bg_color(color_buttons.tgt_folder_btn,
3505 prefs_common.tgt_folder_col);
3506 set_button_bg_color(color_buttons.signature_btn,
3507 prefs_common.signature_col);
3508 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3509 prefs_common.recycle_quote_colors);
3511 gtk_widget_show_all(vbox);
3512 quote_color_win = window;
3515 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3516 GdkEventKey *event, gpointer data)
3518 if (event && event->keyval == GDK_Escape)
3522 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3524 gchar *type = (gchar *)data;
3525 gchar *title = NULL;
3526 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
3528 GtkColorSelectionDialog *dialog;
3530 if(g_strcasecmp(type, "LEVEL1") == 0) {
3531 title = _("Pick color for quotation level 1");
3532 rgbvalue = prefs_common.quote_level1_col;
3533 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
3534 title = _("Pick color for quotation level 2");
3535 rgbvalue = prefs_common.quote_level2_col;
3536 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
3537 title = _("Pick color for quotation level 3");
3538 rgbvalue = prefs_common.quote_level3_col;
3539 } else if(g_strcasecmp(type, "URI") == 0) {
3540 title = _("Pick color for URI");
3541 rgbvalue = prefs_common.uri_col;
3542 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
3543 title = _("Pick color for target folder");
3544 rgbvalue = prefs_common.tgt_folder_col;
3545 } else if(g_strcasecmp(type, "SIGNATURE") == 0) {
3546 title = _("Pick color for signatures");
3547 rgbvalue = prefs_common.signature_col;
3549 } else if(g_strcasecmp(type, "Misspelled word") == 0) {
3550 title = _("Pick color for misspelled word");
3551 rgbvalue = prefs_common.misspelled_col;
3553 } else { /* Should never be called */
3554 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3558 color_dialog = gtk_color_selection_dialog_new(title);
3559 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3560 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3561 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3562 manage_window_set_transient(GTK_WINDOW(color_dialog));
3564 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3565 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3566 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3567 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3568 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3569 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3572 /* preselect the previous color in the color selection dialog */
3573 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3574 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3575 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3576 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3577 gtk_color_selection_set_color
3578 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3580 gtk_widget_show(color_dialog);
3583 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3585 GtkColorSelection *colorsel = (GtkColorSelection *)
3586 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3588 gint red, green, blue, rgbvalue;
3589 gchar *type = (gchar *)data;
3591 gtk_color_selection_get_color(colorsel, color);
3593 red = (gint) (color[0] * 255.0);
3594 green = (gint) (color[1] * 255.0);
3595 blue = (gint) (color[2] * 255.0);
3596 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3599 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3600 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3601 fprintf(stderr, "Color is %x\n", rgbvalue);
3604 if (g_strcasecmp(type, "LEVEL1") == 0) {
3605 prefs_common.quote_level1_col = rgbvalue;
3606 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3607 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3608 prefs_common.quote_level2_col = rgbvalue;
3609 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3610 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3611 prefs_common.quote_level3_col = rgbvalue;
3612 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3613 } else if (g_strcasecmp(type, "URI") == 0) {
3614 prefs_common.uri_col = rgbvalue;
3615 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3616 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3617 prefs_common.tgt_folder_col = rgbvalue;
3618 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3619 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3620 } else if (g_strcasecmp(type, "SIGNATURE") == 0) {
3621 prefs_common.signature_col = rgbvalue;
3622 set_button_bg_color(color_buttons.signature_btn, rgbvalue);
3624 } else if (g_strcasecmp(type, "Misspelled word") == 0) {
3625 prefs_common.misspelled_col = rgbvalue;
3626 set_button_bg_color(spelling.misspelled_btn, rgbvalue);
3629 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3631 gtk_widget_destroy(color_dialog);
3634 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3636 gtk_widget_destroy(color_dialog);
3639 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3643 gtk_widget_destroy(color_dialog);
3646 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3651 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3652 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3653 newstyle->bg[GTK_STATE_NORMAL] = color;
3654 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3655 newstyle->bg[GTK_STATE_ACTIVE] = color;
3657 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3660 static void prefs_enable_message_color_toggled(void)
3664 is_active = gtk_toggle_button_get_active
3665 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3666 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3667 prefs_common.enable_color = is_active;
3670 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3674 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3675 prefs_common.recycle_quote_colors = is_active;
3678 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3682 g_return_if_fail(entry != NULL);
3684 if (!font_sel_win) {
3685 font_sel_win = gtk_font_selection_dialog_new
3686 (_("Font selection"));
3687 gtk_window_position(GTK_WINDOW(font_sel_win),
3688 GTK_WIN_POS_CENTER);
3689 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3690 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3693 (GTK_OBJECT(font_sel_win), "key_press_event",
3694 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3696 gtk_signal_connect_object
3697 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3699 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3700 GTK_OBJECT(font_sel_win));
3703 if(font_sel_conn_id) {
3704 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3706 font_sel_conn_id = gtk_signal_connect
3707 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3709 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3711 printf("%i\n", font_sel_conn_id);
3713 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3714 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3716 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3717 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3718 gtk_widget_grab_focus
3719 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3720 gtk_widget_show(font_sel_win);
3723 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3727 if (event && event->keyval == GDK_Escape)
3728 gtk_widget_hide(font_sel_win);
3731 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3735 fontname = gtk_font_selection_dialog_get_font_name
3736 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3739 gtk_entry_set_text(entry, fontname);
3744 gtk_widget_hide(font_sel_win);
3747 static void prefs_keybind_select(void)
3754 GtkWidget *confirm_area;
3756 GtkWidget *cancel_btn;
3758 window = gtk_window_new (GTK_WINDOW_DIALOG);
3759 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
3760 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
3761 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
3762 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
3763 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
3764 manage_window_set_transient (GTK_WINDOW (window));
3766 vbox1 = gtk_vbox_new (FALSE, VSPACING);
3767 gtk_container_add (GTK_CONTAINER (window), vbox1);
3768 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
3770 hbox1 = gtk_hbox_new (FALSE, 8);
3771 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3773 label = gtk_label_new
3774 (_("Select preset:"));
3775 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3776 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3778 hbox1 = gtk_hbox_new (FALSE, 8);
3779 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3781 combo = gtk_combo_new ();
3782 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
3783 gtkut_combo_set_items (GTK_COMBO (combo),
3789 gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE);
3791 hbox1 = gtk_hbox_new (FALSE, 8);
3792 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3794 label = gtk_label_new
3795 (_("You can also modify each menu shortcut by pressing\n"
3796 "any key(s) when placing the mouse pointer on the item."));
3797 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3798 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3800 hbox1 = gtk_hbox_new (FALSE, 8);
3801 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3803 gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
3804 &cancel_btn, _("Cancel"), NULL, NULL);
3805 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
3806 gtk_widget_grab_default (ok_btn);
3808 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3809 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
3810 GTK_SIGNAL_FUNC (prefs_keybind_deleted), NULL);
3811 gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
3812 GTK_SIGNAL_FUNC (prefs_keybind_key_pressed), NULL);
3813 gtk_signal_connect (GTK_OBJECT (ok_btn), "clicked",
3814 GTK_SIGNAL_FUNC (prefs_keybind_apply_clicked),
3816 gtk_signal_connect (GTK_OBJECT (cancel_btn), "clicked",
3817 GTK_SIGNAL_FUNC (prefs_keybind_cancel),
3820 gtk_widget_show_all(window);
3822 keybind.window = window;
3823 keybind.combo = combo;
3826 static void prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
3829 if (event && event->keyval == GDK_Escape)
3830 prefs_keybind_cancel();
3833 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
3836 prefs_keybind_cancel();
3840 static void prefs_keybind_cancel(void)
3842 gtk_widget_destroy(keybind.window);
3843 keybind.window = NULL;
3844 keybind.combo = NULL;
3847 static void prefs_keybind_apply_clicked(GtkWidget *widget)
3849 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
3853 static gchar *default_menurc =
3854 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
3855 "(menu-path \"<Main>/File/Save as...\" \"<control>S\")\n"
3856 "(menu-path \"<Main>/File/Print...\" \"\")\n"
3857 "(menu-path \"<Main>/File/Exit\" \"<control>Q\")\n"
3859 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3860 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3861 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3862 "(menu-path \"<Main>/Edit/Search folder...\" \"<shift><control>F\")\n"
3864 "(menu-path \"<Main>/View/Expand Summary View\" \"V\")\n"
3865 "(menu-path \"<Main>/View/Expand Message View\" \"<shift>V\")\n"
3866 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
3867 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
3868 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
3869 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
3870 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
3871 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
3872 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3873 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3874 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
3875 "(menu-path \"<Main>/View/Update\" \"<control><alt>U\")\n"
3877 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3878 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3879 "(menu-path \"<Main>/Message/Compose an email message\" \"<control>M\")\n"
3880 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
3881 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><control>R\")\n"
3882 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3883 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3884 "(menu-path \"<Main>/Message/Forward\" \"<control><alt>F\")\n"
3885 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n" */
3886 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
3887 "(menu-path \"<Main>/Message/Copy...\" \"<shift><control>O\")\n"
3888 "(menu-path \"<Main>/Message/Delete\" \"<control>D\")\n"
3889 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
3890 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3891 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
3892 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
3894 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
3895 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
3896 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
3898 "(menu-path \"<Compose>/File/Close\" \"<control>W\")\n"
3899 "(menu-path \"<Compose>/Edit/Select all\" \"<control>A\")\n"
3900 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"\")\n"
3901 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"\")\n"
3902 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"\")\n"
3903 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"\")\n"
3904 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"\")";
3906 static gchar *mew_wl_menurc =
3907 "(menu-path \"<Main>/File/Empty trash\" \"<shift>D\")\n"
3908 "(menu-path \"<Main>/File/Save as...\" \"Y\")\n"
3909 "(menu-path \"<Main>/File/Print...\" \"<shift>numbersign\")\n"
3910 "(menu-path \"<Main>/File/Exit\" \"<shift>Q\")\n"
3912 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3913 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3914 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3915 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
3917 "(menu-path \"<Main>/View/Expand Summary View\" \"\")\n"
3918 "(menu-path \"<Main>/View/Expand Message View\" \"\")\n"
3919 "(menu-path \"<Main>/View/Thread view\" \"<shift>T\")\n"
3920 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
3921 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
3922 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
3923 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
3924 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
3925 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3926 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3927 "(menu-path \"<Main>/View/Show all headers\" \"<shift>H\")\n"
3928 "(menu-path \"<Main>/View/Update\" \"<shift>S\")\n"
3930 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3931 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3932 "(menu-path \"<Main>/Message/Compose an email message\" \"W\")\n"
3933 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
3934 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift>A\")\n"
3935 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3936 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3937 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
3938 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift>F\")\n" */
3939 "(menu-path \"<Main>/Message/Move...\" \"O\")\n"
3940 "(menu-path \"<Main>/Message/Copy...\" \"<shift>O\")\n"
3941 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
3942 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
3943 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3944 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
3945 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"<shift>R\")\n"
3947 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
3948 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
3949 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
3951 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
3952 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
3953 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
3954 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
3955 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
3956 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
3957 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
3959 static gchar *mutt_menurc =
3960 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
3961 "(menu-path \"<Main>/File/Save as...\" \"S\")\n"
3962 "(menu-path \"<Main>/File/Print...\" \"P\")\n"
3963 "(menu-path \"<Main>/File/Exit\" \"Q\")\n"
3965 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3966 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3967 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3968 "(menu-path \"<Main>/Edit/Search messages...\" \"slash\")\n"
3970 "(menu-path \"<Main>/View/Toggle summary view\" \"V\")\n"
3971 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
3972 "(menu-path \"<Main>/View/Go to/Prev message\" \"\")\n"
3973 "(menu-path \"<Main>/View/Go to/Next message\" \"\")\n"
3974 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"\")\n"
3975 "(menu-path \"<Main>/View/Go to/Next unread message\" \"\")\n"
3976 "(menu-path \"<Main>/View/Go to/Other folder...\" \"C\")\n"
3977 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3978 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3979 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
3980 "(menu-path \"<Main>/View/Update\" \"<control><alt>U\")\n"
3982 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3983 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3984 "(menu-path \"<Main>/Message/Compose new message\" \"M\")\n"
3985 "(menu-path \"<Main>/Message/Reply\" \"R\")\n"
3986 "(menu-path \"<Main>/Message/Reply to/all\" \"G\")\n"
3987 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3988 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3989 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
3990 "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n"
3991 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
3992 "(menu-path \"<Main>/Message/Copy...\" \"<shift>C\")\n"
3993 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
3994 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>F\")\n"
3995 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3996 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>N\")\n"
3997 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
3999 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
4000 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
4001 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
4003 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
4004 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
4005 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
4006 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
4007 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
4008 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
4009 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
4011 static gchar *old_sylpheed_menurc =
4012 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
4013 "(menu-path \"<Main>/File/Save as...\" \"\")\n"
4014 "(menu-path \"<Main>/File/Print...\" \"<alt>P\")\n"
4015 "(menu-path \"<Main>/File/Exit\" \"<alt>Q\")\n"
4017 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
4018 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
4019 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
4020 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
4022 "(menu-path \"<Main>/View/Expand Summary View\" \"\")\n"
4023 "(menu-path \"<Main>/View/Expand Message View\" \"\")\n"
4024 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
4025 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
4026 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
4027 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
4028 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
4029 "(menu-path \"<Main>/View/Go to/Other folder...\" \"<alt>G\")\n"
4030 "(menu-path \"<Main>/View/Open in new window\" \"<shift><control>N\")\n"
4031 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
4032 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
4033 "(menu-path \"<Main>/View/Update\" \"<alt>U\")\n"
4035 "(menu-path \"<Main>/Message/Get new mail\" \"<alt>I\")\n"
4036 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><alt>I\")\n"
4037 "(menu-path \"<Main>/Message/Compose an email message\" \"<alt>N\")\n"
4038 "(menu-path \"<Main>/Message/Reply\" \"<alt>R\")\n"
4039 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><alt>R\")\n"
4040 "(menu-path \"<Main>/Message/Reply to/sender\" \"<control><alt>R\")\n"
4041 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
4042 "(menu-path \"<Main>/Message/Forward\" \"<shift><alt>F\")\n"
4043 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift><control>F\")\n" */
4044 "(menu-path \"<Main>/Message/Move...\" \"<alt>O\")\n"
4045 "(menu-path \"<Main>/Message/Copy...\" \"\")\n"
4046 "(menu-path \"<Main>/Message/Delete\" \"<alt>D\")\n"
4047 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
4048 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
4049 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
4050 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
4052 "(menu-path \"<Main>/Tools/Address book\" \"<alt>A\")\n"
4053 "(menu-path \"<Main>/Tools/Execute\" \"<alt>X\")\n"
4054 "(menu-path \"<Main>/Tools/Log window\" \"<alt>L\")\n"
4056 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
4057 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
4058 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
4059 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
4060 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
4061 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
4062 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
4064 text = gtk_entry_get_text(entry);
4066 if (!strcmp(text, _("Default")))
4067 rc_str = default_menurc;
4068 else if (!strcmp(text, "Mew / Wanderlust"))
4069 rc_str = mew_wl_menurc;
4070 else if (!strcmp(text, "Mutt"))
4071 rc_str = mutt_menurc;
4072 else if (!strcmp(text, _("Old Sylpheed")))
4073 rc_str = old_sylpheed_menurc;
4077 menu_factory_clear_rc(rc_str);
4078 gtk_item_factory_parse_rc_string(rc_str);
4080 gtk_widget_destroy(keybind.window);
4081 keybind.window = NULL;
4082 keybind.combo = NULL;
4085 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
4088 GtkWidget *menuitem;
4091 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4092 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4093 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
4094 g_free(*((gchar **)pparam->data));
4095 *((gchar **)pparam->data) = g_strdup(charset);
4098 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
4100 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4103 g_return_if_fail(optmenu != NULL);
4104 g_return_if_fail(*((gchar **)pparam->data) != NULL);
4106 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
4107 (GCompareFunc)strcmp);
4109 gtk_option_menu_set_history(optmenu, index);
4111 gtk_option_menu_set_history(optmenu, 0);
4112 prefs_common_charset_set_data_from_optmenu(pparam);
4116 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
4119 GtkWidget *menuitem;
4121 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4122 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4123 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
4124 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4127 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
4129 TransferEncodingMethod method =
4130 *((TransferEncodingMethod *)pparam->data);
4131 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4134 g_return_if_fail(optmenu != NULL);
4136 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
4139 gtk_option_menu_set_history(optmenu, index);
4141 gtk_option_menu_set_history(optmenu, 0);
4142 prefs_common_encoding_set_data_from_optmenu(pparam);
4146 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
4149 GtkWidget *menuitem;
4151 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4152 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4153 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
4154 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4157 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
4159 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
4160 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4162 GtkWidget *menuitem;
4165 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
4168 gtk_option_menu_set_history(optmenu, index);
4170 gtk_option_menu_set_history(optmenu, 0);
4171 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
4174 menu = gtk_option_menu_get_menu(optmenu);
4175 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4176 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4179 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
4182 GtkWidget *menuitem;
4184 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4185 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4186 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
4187 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4190 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
4192 SendDialogMode mode = *((SendDialogMode *)pparam->data);
4193 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4195 GtkWidget *menuitem;
4198 case SEND_DIALOG_ALWAYS:
4199 gtk_option_menu_set_history(optmenu, 0);
4201 case SEND_DIALOG_NEVER:
4202 gtk_option_menu_set_history(optmenu, 1);
4208 menu = gtk_option_menu_get_menu(optmenu);
4209 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4210 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4213 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
4216 prefs_common_cancel();
4220 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
4223 if (event && event->keyval == GDK_Escape)
4224 prefs_common_cancel();
4227 static void prefs_common_ok(void)
4229 prefs_common_apply();
4230 gtk_widget_hide(dialog.window);
4235 static void prefs_common_apply(void)
4237 gchar *entry_pixmap_theme_str;
4238 gboolean update_pixmap_theme;
4239 gchar *backup_theme_path;
4241 entry_pixmap_theme_str = gtk_entry_get_text(GTK_ENTRY(interface.entry_pixmap_theme));
4242 if (entry_pixmap_theme_str &&
4243 (strcmp(prefs_common.pixmap_theme_path, entry_pixmap_theme_str) != 0) )
4244 update_pixmap_theme = TRUE;
4246 update_pixmap_theme = FALSE;
4248 /*!< FIXME: prefs_set_data_from_dialog() clears and frees all strings,
4249 * but prefs_common.pixmap_theme_path is stored in the StockPixmapData
4250 * in stock_pixmap.c::pixmaps[].icon_path, and used when reflecting
4251 * the pixmap changes. Work around by saving the old one and freeing
4253 backup_theme_path = prefs_common.pixmap_theme_path;
4254 prefs_common.pixmap_theme_path = g_strdup(backup_theme_path);
4255 prefs_set_data_from_dialog(param);
4256 sock_set_io_timeout(prefs_common.io_timeout_secs);
4258 if (update_pixmap_theme) {
4259 main_window_reflect_prefs_all_real(TRUE);
4260 compose_reflect_prefs_pixmap_theme();
4262 main_window_reflect_prefs_all_real(FALSE);
4264 /*!< FIXME: Now it's safe to delete the backup path */
4265 g_free(backup_theme_path);
4267 prefs_common_save_config();
4269 inc_autocheck_timer_remove();
4270 inc_autocheck_timer_set();
4273 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
4276 GtkWidget *menuitem;
4278 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4279 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4280 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
4281 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4284 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
4286 NextUnreadMsgDialogShow dialog_show;
4287 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4289 GtkWidget *menuitem;
4291 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
4293 switch (dialog_show) {
4294 case NEXTUNREADMSGDIALOG_ALWAYS:
4295 gtk_option_menu_set_history(optmenu, 0);
4297 case NEXTUNREADMSGDIALOG_ASSUME_YES:
4298 gtk_option_menu_set_history(optmenu, 1);
4300 case NEXTUNREADMSGDIALOG_ASSUME_NO:
4301 gtk_option_menu_set_history(optmenu, 2);
4305 menu = gtk_option_menu_get_menu(optmenu);
4306 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4307 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4310 static void prefs_common_cancel(void)
4312 gtk_widget_hide(dialog.window);
4317 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
4320 GtkWidget *menuitem;
4322 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4323 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4324 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
4325 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4328 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
4330 RecvDialogShow dialog_show;
4331 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4333 GtkWidget *menuitem;
4335 dialog_show = *((RecvDialogShow *)pparam->data);
4337 switch (dialog_show) {
4338 case RECVDIALOG_ALWAYS:
4339 gtk_option_menu_set_history(optmenu, 0);
4341 case RECVDIALOG_WINDOW_ACTIVE:
4342 gtk_option_menu_set_history(optmenu, 1);
4344 case RECVDIALOG_NEVER:
4345 gtk_option_menu_set_history(optmenu, 2);
4350 menu = gtk_option_menu_get_menu(optmenu);
4351 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4352 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));