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},
781 {"uri_open_command", DEFAULT_BROWSER_CMD,
782 &prefs_common.uri_cmd, P_STRING,
783 &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry},
784 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
785 &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry},
786 {"ext_editor_command", "gedit %s",
787 &prefs_common.ext_editor_cmd, P_STRING,
788 &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry},
790 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
791 P_BOOL, &other.checkbtn_addaddrbyclick,
792 prefs_set_data_from_toggle, prefs_set_toggle},
794 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
795 &other.checkbtn_confonexit,
796 prefs_set_data_from_toggle, prefs_set_toggle},
797 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
798 &other.checkbtn_cleanonexit,
799 prefs_set_data_from_toggle, prefs_set_toggle},
800 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
801 &other.checkbtn_askonclean,
802 prefs_set_data_from_toggle, prefs_set_toggle},
803 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
804 P_BOOL, &other.checkbtn_warnqueued,
805 prefs_set_data_from_toggle, prefs_set_toggle},
808 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
809 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
810 prefs_set_data_from_toggle, prefs_set_toggle},
813 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
815 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
818 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
819 P_INT, &other.spinbtn_iotimeout,
820 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
821 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
823 {"important_score", "1", &prefs_common.important_score, P_INT,
825 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
826 &other.checkbtn_cliplog,
827 prefs_set_data_from_toggle, prefs_set_toggle},
828 {"log_length", "500", &prefs_common.loglength, P_INT,
829 &other.loglength_entry,
830 prefs_set_data_from_entry, prefs_set_entry},
832 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
834 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
837 {"color_new", "179", &prefs_common.color_new, P_COLOR,
840 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
843 /* widget creating functions */
844 static void prefs_common_create (void);
845 static void prefs_receive_create (void);
846 static void prefs_send_create (void);
848 static void prefs_spelling_create (void);
850 static void prefs_compose_create (void);
851 static void prefs_quote_create (void);
852 static void prefs_display_create (void);
853 static void prefs_message_create (void);
855 static void prefs_privacy_create (void);
857 static void prefs_interface_create (void);
858 static void prefs_other_create (void);
860 static void date_format_ok_btn_clicked (GtkButton *button,
862 static void date_format_cancel_btn_clicked (GtkButton *button,
864 static void date_format_key_pressed (GtkWidget *keywidget,
867 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
870 static void date_format_entry_on_change (GtkEditable *editable,
872 static void date_format_select_row (GtkWidget *date_format_list,
875 GdkEventButton *event,
876 GtkWidget *date_format);
877 static GtkWidget *date_format_create (GtkButton *button,
880 static void prefs_quote_colors_dialog (void);
881 static void prefs_quote_colors_dialog_create (void);
882 static void prefs_quote_colors_key_pressed (GtkWidget *widget,
885 static void quote_color_set_dialog (GtkWidget *widget,
887 static void quote_colors_set_dialog_ok (GtkWidget *widget,
889 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
891 static void quote_colors_set_dialog_key_pressed (GtkWidget *widget,
894 static void set_button_bg_color (GtkWidget *widget,
896 static void prefs_enable_message_color_toggled (void);
897 static void prefs_recycle_colors_toggled (GtkWidget *widget);
899 static void prefs_font_select (GtkButton *button, GtkEntry *entry);
901 static void prefs_font_selection_key_pressed (GtkWidget *widget,
904 static void prefs_font_selection_ok (GtkButton *button, GtkEntry *entry);
906 static void prefs_keybind_select (void);
907 static gint prefs_keybind_deleted (GtkWidget *widget,
910 static void prefs_keybind_key_pressed (GtkWidget *widget,
913 static void prefs_keybind_cancel (void);
914 static void prefs_keybind_apply_clicked (GtkWidget *widget);
916 static gint prefs_common_deleted (GtkWidget *widget,
919 static void prefs_common_key_pressed (GtkWidget *widget,
922 static void prefs_common_ok (void);
923 static void prefs_common_apply (void);
924 static void prefs_common_cancel (void);
926 void prefs_common_init(void)
928 prefs_common.disphdr_list = NULL;
931 PrefsCommon *prefs_common_get(void)
933 return &prefs_common;
936 void prefs_common_read_config(void)
940 gchar buf[PREFSBUFSIZE];
942 prefs_read_config(param, "Common", COMMON_RC);
944 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
946 if ((fp = fopen(path, "rb")) == NULL) {
947 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
952 while (fgets(buf, sizeof(buf), fp) != NULL) {
954 if (buf[0] == '\0') continue;
955 prefs_common.mime_open_cmd_history =
956 add_history(prefs_common.mime_open_cmd_history, buf);
960 prefs_common.mime_open_cmd_history =
961 g_list_reverse(prefs_common.mime_open_cmd_history);
964 void prefs_common_save_config(void)
970 prefs_save_config(param, "Common", COMMON_RC);
972 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
974 if ((fp = fopen(path, "wb")) == NULL) {
975 FILE_OP_ERROR(path, "fopen");
980 for (cur = prefs_common.mime_open_cmd_history;
981 cur != NULL; cur = cur->next) {
982 fputs((gchar *)cur->data, fp);
990 void prefs_common_open(void)
992 if (prefs_rc_is_readonly(COMMON_RC))
997 if (!dialog.window) {
998 prefs_common_create();
1001 manage_window_set_transient(GTK_WINDOW(dialog.window));
1002 gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0);
1003 gtk_widget_grab_focus(dialog.ok_btn);
1005 prefs_set_dialog(param);
1007 gtk_widget_show(dialog.window);
1010 static void prefs_common_create(void)
1014 debug_print("Creating common preferences window...\n");
1016 prefs_dialog_create(&dialog);
1017 gtk_window_set_title (GTK_WINDOW(dialog.window),
1018 _("Common Preferences"));
1019 gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event",
1020 GTK_SIGNAL_FUNC(prefs_common_deleted), NULL);
1021 gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event",
1022 GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL);
1023 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
1025 gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked",
1026 GTK_SIGNAL_FUNC(prefs_common_ok), NULL);
1027 gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked",
1028 GTK_SIGNAL_FUNC(prefs_common_apply), NULL);
1029 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
1030 GTK_SIGNAL_FUNC(prefs_common_cancel),
1031 GTK_OBJECT(dialog.window));
1033 /* create all widgets on notebook */
1034 prefs_receive_create();
1035 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
1036 prefs_send_create();
1037 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
1038 prefs_compose_create();
1039 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
1041 prefs_spelling_create();
1042 SET_NOTEBOOK_LABEL(dialog.notebook, _("Spell Checker"), page++);
1044 prefs_quote_create();
1045 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
1046 prefs_display_create();
1047 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
1048 prefs_message_create();
1049 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
1051 prefs_privacy_create();
1052 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
1054 prefs_interface_create();
1055 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
1056 prefs_other_create();
1057 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
1059 gtk_widget_show_all(dialog.window);
1062 static void prefs_receive_create(void)
1066 GtkWidget *frame_incext;
1067 GtkWidget *checkbtn_incext;
1069 GtkWidget *label_incext;
1070 GtkWidget *entry_incext;
1071 /* GtkWidget *button_incext; */
1073 GtkWidget *frame_spool;
1074 GtkWidget *checkbtn_local;
1075 GtkWidget *checkbtn_filter_on_inc;
1076 GtkWidget *label_spool;
1077 GtkWidget *entry_spool;
1079 GtkWidget *hbox_autochk;
1080 GtkWidget *checkbtn_autochk;
1081 GtkWidget *label_autochk1;
1082 GtkObject *spinbtn_autochk_adj;
1083 GtkWidget *spinbtn_autochk;
1084 GtkWidget *label_autochk2;
1085 GtkWidget *checkbtn_chkonstartup;
1086 GtkWidget *checkbtn_scan_after_inc;
1089 GtkWidget *frame_newmail;
1090 GtkWidget *hbox_newmail_notify;
1091 GtkWidget *checkbtn_newmail_auto;
1092 GtkWidget *checkbtn_newmail_manu;
1093 GtkWidget *entry_newmail_notify_cmd;
1094 GtkWidget *label_newmail_notify_cmd;
1096 GtkWidget *hbox_recvdialog;
1097 GtkWidget *label_recvdialog;
1099 GtkWidget *menuitem;
1100 GtkWidget *optmenu_recvdialog;
1101 GtkWidget *checkbtn_no_recv_err_panel;
1102 GtkWidget *checkbtn_close_recv_dialog;
1104 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1105 gtk_widget_show (vbox1);
1106 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1107 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1109 PACK_FRAME(vbox1, frame_incext, _("External program"));
1111 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1112 gtk_widget_show (vbox2);
1113 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1114 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1116 /* Use of external incorporation program */
1117 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1118 _("Use external program for incorporation"));
1120 hbox = gtk_hbox_new (FALSE, 8);
1121 gtk_widget_show (hbox);
1122 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1123 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1125 label_incext = gtk_label_new (_("Command"));
1126 gtk_widget_show (label_incext);
1127 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1129 entry_incext = gtk_entry_new ();
1130 gtk_widget_show (entry_incext);
1131 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1134 button_incext = gtk_button_new_with_label ("... ");
1135 gtk_widget_show (button_incext);
1136 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1139 PACK_FRAME(vbox1, frame_spool, _("Local spool"));
1141 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1142 gtk_widget_show (vbox2);
1143 gtk_container_add (GTK_CONTAINER (frame_spool), vbox2);
1144 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1146 hbox = gtk_hbox_new (FALSE, 32);
1147 gtk_widget_show (hbox);
1148 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1150 PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool"));
1151 PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc,
1152 _("Filter on incorporation"));
1153 SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc);
1155 hbox = gtk_hbox_new (FALSE, 8);
1156 gtk_widget_show (hbox);
1157 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1158 SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox);
1160 label_spool = gtk_label_new (_("Spool directory"));
1161 gtk_widget_show (label_spool);
1162 gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0);
1164 entry_spool = gtk_entry_new ();
1165 gtk_widget_show (entry_spool);
1166 gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0);
1168 vbox2 = gtk_vbox_new (FALSE, 0);
1169 gtk_widget_show (vbox2);
1170 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1173 hbox_autochk = gtk_hbox_new (FALSE, 8);
1174 gtk_widget_show (hbox_autochk);
1175 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1177 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1178 _("Auto-check new mail"));
1180 label_autochk1 = gtk_label_new (_("every"));
1181 gtk_widget_show (label_autochk1);
1182 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1184 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1185 spinbtn_autochk = gtk_spin_button_new
1186 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1187 gtk_widget_show (spinbtn_autochk);
1188 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1189 gtk_widget_set_usize (spinbtn_autochk, 64, -1);
1190 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1192 label_autochk2 = gtk_label_new (_("minute(s)"));
1193 gtk_widget_show (label_autochk2);
1194 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1196 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1197 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1198 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1200 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1201 _("Check new mail on startup"));
1202 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1203 _("Update all local folders after incorporation"));
1206 /* receive dialog */
1207 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1208 gtk_widget_show (hbox_recvdialog);
1209 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1211 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1212 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1213 gtk_widget_show (label_recvdialog);
1214 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1216 optmenu_recvdialog = gtk_option_menu_new ();
1217 gtk_widget_show (optmenu_recvdialog);
1218 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1220 menu = gtk_menu_new ();
1221 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1222 MENUITEM_ADD (menu, menuitem, _("Only if a window is active"),
1223 RECV_DIALOG_ACTIVE);
1224 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1226 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1228 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1229 _("Don't popup error dialog on receive error"));
1231 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1232 _("Close receive dialog when finished"));
1234 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1236 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1237 gtk_widget_show (vbox2);
1238 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1239 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1241 hbox = gtk_hbox_new (TRUE, 8);
1242 gtk_widget_show (hbox);
1243 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1244 _("after autochecking"));
1245 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1246 _("after manual checking"));
1247 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1248 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_auto), "toggled",
1249 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1251 gtk_signal_connect(GTK_OBJECT(checkbtn_newmail_manu), "toggled",
1252 GTK_SIGNAL_FUNC(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1255 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1256 gtk_widget_show (hbox);
1257 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1260 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1261 "(use %d as number of new "
1263 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1265 gtk_widget_show (label_newmail_notify_cmd);
1266 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1267 label_newmail_notify_cmd, FALSE, FALSE, 0);
1269 entry_newmail_notify_cmd = gtk_entry_new ();
1270 gtk_widget_show (entry_newmail_notify_cmd);
1271 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1272 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1274 gtk_widget_set_sensitive(hbox_newmail_notify,
1275 prefs_common.newmail_notify_auto ||
1276 prefs_common.newmail_notify_manu);
1278 receive.checkbtn_incext = checkbtn_incext;
1279 receive.entry_incext = entry_incext;
1280 /* receive.button_incext = button_incext; */
1282 receive.checkbtn_local = checkbtn_local;
1283 receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc;
1284 receive.entry_spool = entry_spool;
1286 receive.checkbtn_autochk = checkbtn_autochk;
1287 receive.spinbtn_autochk = spinbtn_autochk;
1288 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1290 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1291 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1294 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1295 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1296 receive.hbox_newmail_notify = hbox_newmail_notify;
1297 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1298 receive.optmenu_recvdialog = optmenu_recvdialog;
1299 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1300 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1303 static void prefs_send_create(void)
1307 GtkWidget *frame_extsend;
1308 GtkWidget *vbox_extsend;
1309 GtkWidget *checkbtn_extsend;
1311 GtkWidget *label_extsend;
1312 GtkWidget *entry_extsend;
1313 /* GtkWidget *button_extsend; */
1314 GtkWidget *checkbtn_savemsg;
1315 GtkWidget *checkbtn_queuemsg;
1316 GtkWidget *label_outcharset;
1317 GtkWidget *optmenu_charset;
1318 GtkWidget *optmenu_menu;
1319 GtkWidget *menuitem;
1320 GtkWidget *label_charset_desc;
1321 GtkWidget *optmenu_encoding;
1322 GtkWidget *label_encoding;
1323 GtkWidget *label_encoding_desc;
1324 GtkWidget *label_senddialog;
1326 GtkWidget *optmenu_senddialog;
1327 GtkWidget *hbox_senddialog;
1329 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1330 gtk_widget_show (vbox1);
1331 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1332 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1334 PACK_FRAME(vbox1, frame_extsend, _("External program"));
1336 vbox_extsend = gtk_vbox_new (FALSE, VSPACING_NARROW);
1337 gtk_widget_show (vbox_extsend);
1338 gtk_container_add (GTK_CONTAINER (frame_extsend), vbox_extsend);
1339 gtk_container_set_border_width (GTK_CONTAINER (vbox_extsend), 8);
1341 PACK_CHECK_BUTTON (vbox_extsend, checkbtn_extsend,
1342 _("Use external program for sending"));
1344 hbox1 = gtk_hbox_new (FALSE, 8);
1345 gtk_widget_show (hbox1);
1346 gtk_box_pack_start (GTK_BOX (vbox_extsend), hbox1, FALSE, FALSE, 0);
1347 SET_TOGGLE_SENSITIVITY(checkbtn_extsend, hbox1);
1349 label_extsend = gtk_label_new (_("Command"));
1350 gtk_widget_show (label_extsend);
1351 gtk_box_pack_start (GTK_BOX (hbox1), label_extsend, FALSE, FALSE, 0);
1353 entry_extsend = gtk_entry_new ();
1354 gtk_widget_show (entry_extsend);
1355 gtk_box_pack_start (GTK_BOX (hbox1), entry_extsend, TRUE, TRUE, 0);
1358 button_extsend = gtk_button_new_with_label ("... ");
1359 gtk_widget_show (button_extsend);
1360 gtk_box_pack_start (GTK_BOX (hbox1), button_extsend, FALSE, FALSE, 0);
1363 vbox2 = gtk_vbox_new (FALSE, 0);
1364 gtk_widget_show (vbox2);
1365 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1367 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1368 _("Save sent messages to Sent folder"));
1369 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1370 _("Queue messages that fail to send"));
1372 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1373 gtk_widget_show (hbox1);
1374 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1376 label_senddialog = gtk_label_new (_("Show send dialog"));
1377 gtk_widget_show (label_senddialog);
1378 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1380 optmenu_senddialog = gtk_option_menu_new ();
1381 gtk_widget_show (optmenu_senddialog);
1382 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1384 menu = gtk_menu_new ();
1385 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1386 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1388 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1390 hbox1 = gtk_hbox_new (FALSE, 8);
1391 gtk_widget_show (hbox1);
1392 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1394 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1395 gtk_widget_show (label_outcharset);
1396 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1398 optmenu_charset = gtk_option_menu_new ();
1399 gtk_widget_show (optmenu_charset);
1400 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1402 optmenu_menu = gtk_menu_new ();
1404 #define SET_MENUITEM(str, data) \
1406 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1409 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1410 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1412 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1414 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1415 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1416 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1417 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1418 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1419 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1420 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1422 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1424 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1426 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1427 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1429 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1431 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1432 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1434 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1435 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1437 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1438 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1440 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1441 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1442 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1444 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1447 hbox1 = gtk_hbox_new (FALSE, 8);
1448 gtk_widget_show (hbox1);
1449 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1451 label_charset_desc = gtk_label_new
1452 (_("If `Automatic' is selected, the optimal encoding\n"
1453 "for the current locale will be used."));
1454 gtk_widget_show (label_charset_desc);
1455 gtk_box_pack_start (GTK_BOX (hbox1), label_charset_desc,
1457 gtk_label_set_justify (GTK_LABEL (label_charset_desc),
1460 hbox1 = gtk_hbox_new (FALSE, 8);
1461 gtk_widget_show (hbox1);
1462 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1464 label_encoding = gtk_label_new (_("Transfer encoding"));
1465 gtk_widget_show (label_encoding);
1466 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1468 optmenu_encoding = gtk_option_menu_new ();
1469 gtk_widget_show (optmenu_encoding);
1470 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1472 optmenu_menu = gtk_menu_new ();
1474 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1475 SET_MENUITEM("base64", CTE_BASE64);
1476 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1477 SET_MENUITEM("8bit", CTE_8BIT);
1479 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1482 hbox1 = gtk_hbox_new (FALSE, 8);
1483 gtk_widget_show (hbox1);
1484 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1486 label_encoding_desc = gtk_label_new
1487 (_("Specify Content-Transfer-Encoding used when\n"
1488 "message body contains non-ASCII characters."));
1489 gtk_widget_show (label_encoding_desc);
1490 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding_desc,
1492 gtk_label_set_justify (GTK_LABEL (label_encoding_desc),
1495 p_send.checkbtn_extsend = checkbtn_extsend;
1496 p_send.entry_extsend = entry_extsend;
1497 /* p_send.button_extsend = button_extsend; */
1499 p_send.checkbtn_savemsg = checkbtn_savemsg;
1500 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1501 p_send.optmenu_senddialog = optmenu_senddialog;
1503 p_send.optmenu_charset = optmenu_charset;
1504 p_send.optmenu_encoding_method = optmenu_encoding;
1507 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1511 toggled = gtk_toggle_button_get_active
1512 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1513 gtk_toggle_button_get_active
1514 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1515 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1519 static void prefs_dictionary_set_data_from_optmenu(PrefParam *param)
1522 gchar *dict_fullname;
1524 g_return_if_fail(param);
1525 g_return_if_fail(param->data);
1526 g_return_if_fail(param->widget);
1527 g_return_if_fail(*(param->widget));
1529 dict_fullname = gtkaspell_get_dictionary_menu_active_item
1530 (gtk_option_menu_get_menu(GTK_OPTION_MENU(*(param->widget))));
1531 str = *((gchar **) param->data);
1534 *((gchar **) param->data) = dict_fullname;
1537 static void prefs_dictionary_set_optmenu(PrefParam *pparam)
1540 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1542 GtkWidget *menuitem;
1546 g_return_if_fail(optmenu != NULL);
1547 g_return_if_fail(pparam->data != NULL);
1549 if (*(gchar **) pparam->data) {
1550 menu = gtk_option_menu_get_menu(optmenu);
1551 for (cur = GTK_MENU_SHELL(menu)->children;
1552 cur != NULL; cur = cur->next) {
1553 menuitem = GTK_WIDGET(cur->data);
1554 dict_name = gtk_object_get_data(GTK_OBJECT(menuitem),
1556 if (!strcmp2(dict_name, *((gchar **)pparam->data))) {
1557 gtk_option_menu_set_history(optmenu, n);
1564 gtk_option_menu_set_history(optmenu, 0);
1565 prefs_dictionary_set_data_from_optmenu(pparam);
1568 static void prefs_speller_sugmode_set_data_from_optmenu(PrefParam *param)
1571 g_return_if_fail(param);
1572 g_return_if_fail(param->data);
1573 g_return_if_fail(param->widget);
1574 g_return_if_fail(*(param->widget));
1576 sugmode = gtkaspell_get_sugmode_from_option_menu
1577 (GTK_OPTION_MENU(*(param->widget)));
1578 *((gint *) param->data) = sugmode;
1581 static void prefs_speller_sugmode_set_optmenu(PrefParam *pparam)
1583 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
1586 g_return_if_fail(optmenu != NULL);
1587 g_return_if_fail(pparam->data != NULL);
1589 sugmode = *(gint *) pparam->data;
1590 gtkaspell_sugmode_option_menu_set(optmenu, sugmode);
1594 static void prefs_spelling_checkbtn_enable_aspell_toggle_cb
1600 toggled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
1602 gtk_widget_set_sensitive(spelling.entry_aspell_path, toggled);
1603 gtk_widget_set_sensitive(spelling.optmenu_dictionary, toggled);
1604 gtk_widget_set_sensitive(spelling.optmenu_sugmode, toggled);
1605 gtk_widget_set_sensitive(spelling.btn_aspell_path, toggled);
1606 gtk_widget_set_sensitive(spelling.misspelled_btn, toggled);
1607 gtk_widget_set_sensitive(spelling.checkbtn_use_alternate, toggled);
1608 gtk_widget_set_sensitive(spelling.checkbtn_check_while_typing, toggled);
1611 static void prefs_spelling_btn_aspell_path_clicked_cb(GtkWidget *widget,
1614 gchar *file_path, *tmp;
1615 GtkWidget *new_menu;
1617 file_path = filesel_select_file(_("Select dictionaries location"),
1618 prefs_common.aspell_path);
1619 if (file_path == NULL) {
1623 tmp=g_dirname(file_path);
1625 if (prefs_common.aspell_path)
1626 g_free(prefs_common.aspell_path);
1627 prefs_common.aspell_path = g_strdup_printf("%s%s",tmp,
1630 new_menu = gtkaspell_dictionary_option_menu_new(prefs_common.aspell_path);
1631 gtk_option_menu_set_menu(GTK_OPTION_MENU(spelling.optmenu_dictionary),
1634 gtk_entry_set_text(GTK_ENTRY(spelling.entry_aspell_path),
1635 prefs_common.aspell_path);
1636 /* select first one */
1637 gtk_option_menu_set_history(GTK_OPTION_MENU(
1638 spelling.optmenu_dictionary), 0);
1640 if (prefs_common.dictionary)
1641 g_free(prefs_common.dictionary);
1643 prefs_common.dictionary =
1644 gtkaspell_get_dictionary_menu_active_item(
1645 gtk_option_menu_get_menu(
1647 spelling.optmenu_dictionary)));
1653 static void prefs_spelling_create()
1656 GtkWidget *frame_spell;
1657 GtkWidget *vbox_spell;
1658 GtkWidget *hbox_aspell_path;
1659 GtkWidget *checkbtn_enable_aspell;
1660 GtkWidget *label_aspell_path;
1661 GtkWidget *entry_aspell_path;
1662 GtkWidget *btn_aspell_path;
1663 GtkWidget *spell_table;
1664 GtkWidget *label_dictionary;
1665 GtkWidget *optmenu_dictionary;
1666 GtkWidget *sugmode_label;
1667 GtkWidget *sugmode_optmenu;
1668 GtkWidget *checkbtn_use_alternate;
1669 GtkWidget *help_label;
1670 GtkWidget *checkbtn_check_while_typing;
1671 GtkWidget *color_label;
1672 GtkWidget *col_align;
1674 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1675 gtk_widget_show (vbox1);
1676 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1677 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1679 /* spell checker defaults */
1680 PACK_FRAME(vbox1, frame_spell, _("Global spelling checker settings"));
1681 vbox_spell = gtk_vbox_new(FALSE, VSPACING_NARROW);
1682 gtk_widget_show (vbox_spell);
1683 gtk_container_add(GTK_CONTAINER(frame_spell), vbox_spell);
1684 gtk_container_set_border_width(GTK_CONTAINER(vbox_spell), 8);
1686 PACK_CHECK_BUTTON(vbox_spell, checkbtn_enable_aspell,
1687 _("Enable spell checker"));
1689 gtk_signal_connect(GTK_OBJECT(checkbtn_enable_aspell), "toggled",
1690 GTK_SIGNAL_FUNC(prefs_spelling_checkbtn_enable_aspell_toggle_cb),
1693 /* Check while typing */
1694 PACK_CHECK_BUTTON(vbox_spell, checkbtn_check_while_typing,
1695 _("Check while typing"));
1697 PACK_CHECK_BUTTON(vbox_spell, checkbtn_use_alternate,
1698 _("Enable alternate dictionary"));
1700 help_label = gtk_label_new(_("Enabling an alternate dictionary makes switching\n"
1701 "with the last used dictionary faster."));
1702 gtk_misc_set_alignment (GTK_MISC (help_label), 0, 0);
1703 gtk_widget_show(help_label);
1704 gtk_box_pack_start(GTK_BOX(vbox_spell), help_label, FALSE, TRUE, 0);
1706 spell_table = gtk_table_new(4, 3, FALSE);
1707 gtk_container_set_border_width (GTK_CONTAINER (spell_table), VSPACING);
1708 gtk_table_set_row_spacings(GTK_TABLE(spell_table), 8);
1709 gtk_table_set_col_spacings(GTK_TABLE(spell_table), 8);
1711 gtk_box_pack_start(GTK_BOX(vbox_spell), spell_table, TRUE, TRUE, 0);
1713 label_aspell_path = gtk_label_new (_("Dictionaries path:"));
1714 gtk_misc_set_alignment(GTK_MISC(label_aspell_path), 1.0, 0.5);
1715 gtk_widget_show(label_aspell_path);
1716 gtk_table_attach (GTK_TABLE (spell_table), label_aspell_path, 0, 1, 0,
1717 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1719 hbox_aspell_path = gtk_hbox_new (FALSE, 8);
1720 gtk_table_attach (GTK_TABLE (spell_table), hbox_aspell_path, 1, 2, 0,
1721 1, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1722 gtk_widget_show(hbox_aspell_path);
1724 entry_aspell_path = gtk_entry_new();
1725 gtk_widget_show(entry_aspell_path);
1726 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), entry_aspell_path, TRUE,
1729 gtk_widget_set_sensitive(entry_aspell_path, prefs_common.enable_aspell);
1731 btn_aspell_path = gtk_button_new_with_label(" ... ");
1732 gtk_widget_show(btn_aspell_path);
1733 gtk_box_pack_start(GTK_BOX(hbox_aspell_path), btn_aspell_path, FALSE, FALSE, 0);
1734 gtk_widget_set_sensitive(btn_aspell_path, prefs_common.enable_aspell);
1736 gtk_signal_connect(GTK_OBJECT(btn_aspell_path), "clicked",
1737 GTK_SIGNAL_FUNC(prefs_spelling_btn_aspell_path_clicked_cb),
1740 label_dictionary = gtk_label_new(_("Default dictionary:"));
1741 gtk_misc_set_alignment(GTK_MISC(label_dictionary), 1.0, 0.5);
1742 gtk_widget_show(label_dictionary);
1743 gtk_table_attach (GTK_TABLE (spell_table), label_dictionary, 0, 1, 1, 2,
1744 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1746 optmenu_dictionary = gtk_option_menu_new();
1747 gtk_widget_show(optmenu_dictionary);
1748 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_dictionary),
1749 gtkaspell_dictionary_option_menu_new(
1750 prefs_common.aspell_path));
1751 gtk_table_attach (GTK_TABLE (spell_table), optmenu_dictionary, 1, 2, 1,
1752 2, GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1753 gtk_widget_set_sensitive(optmenu_dictionary, prefs_common.enable_aspell);
1755 /* Suggestion mode */
1756 sugmode_label = gtk_label_new(_("Default suggestion mode"));
1757 gtk_misc_set_alignment(GTK_MISC(sugmode_label), 1.0, 0.5);
1758 gtk_widget_show(sugmode_label);
1759 gtk_table_attach(GTK_TABLE (spell_table), sugmode_label, 0, 1, 2, 3,
1760 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1762 sugmode_optmenu = gtk_option_menu_new();
1763 gtk_widget_show(sugmode_optmenu);
1764 gtk_option_menu_set_menu(GTK_OPTION_MENU(sugmode_optmenu),
1765 gtkaspell_sugmode_option_menu_new(prefs_common.aspell_sugmode));
1766 gtk_table_attach(GTK_TABLE(spell_table), sugmode_optmenu, 1, 2, 2, 3,
1767 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
1768 gtk_widget_set_sensitive(sugmode_optmenu, prefs_common.enable_aspell);
1771 color_label = gtk_label_new(_("Misspelled word color:"));
1772 gtk_misc_set_alignment(GTK_MISC(color_label), 1.0, 0.5);
1773 gtk_table_attach (GTK_TABLE (spell_table), color_label, 0, 1, 3, 4,
1774 GTK_FILL, GTK_SHRINK, 0, 0);
1775 gtk_widget_show(color_label);
1777 col_align = gtk_alignment_new(0.0, 0.5, 0, 0);
1778 gtk_widget_show(col_align);
1779 gtk_table_attach (GTK_TABLE (spell_table), col_align, 1, 2, 3, 4,
1780 GTK_FILL, GTK_SHRINK, 0, 0);
1782 spelling.misspelled_btn = gtk_button_new_with_label ("");
1783 set_button_bg_color(spelling.misspelled_btn,
1784 prefs_common.misspelled_col);
1785 gtk_widget_set_usize (spelling.misspelled_btn, 30, 20);
1786 gtk_widget_set_sensitive(spelling.misspelled_btn, prefs_common.enable_aspell);
1787 gtk_signal_connect (GTK_OBJECT (spelling.misspelled_btn), "clicked",
1788 GTK_SIGNAL_FUNC(quote_color_set_dialog), "Misspelled word");
1789 gtk_container_add(GTK_CONTAINER(col_align), spelling.misspelled_btn);
1792 spelling.checkbtn_enable_aspell = checkbtn_enable_aspell;
1793 spelling.entry_aspell_path = entry_aspell_path;
1794 spelling.btn_aspell_path = btn_aspell_path;
1795 spelling.optmenu_dictionary = optmenu_dictionary;
1796 spelling.optmenu_sugmode = sugmode_optmenu;
1797 spelling.checkbtn_use_alternate = checkbtn_use_alternate;
1798 spelling.checkbtn_check_while_typing = checkbtn_check_while_typing;
1804 static void prefs_compose_create(void)
1809 GtkWidget *checkbtn_autoextedit;
1811 GtkWidget *frame_autosel;
1812 GtkWidget *hbox_autosel;
1813 GtkWidget *checkbtn_reply_account_autosel;
1814 GtkWidget *checkbtn_forward_account_autosel;
1815 GtkWidget *checkbtn_reedit_account_autosel;
1817 GtkWidget *hbox_undolevel;
1818 GtkWidget *label_undolevel;
1819 GtkObject *spinbtn_undolevel_adj;
1820 GtkWidget *spinbtn_undolevel;
1822 GtkWidget *vbox_linewrap;
1827 GtkWidget *label_linewrap;
1828 GtkObject *spinbtn_linewrap_adj;
1829 GtkWidget *spinbtn_linewrap;
1830 GtkWidget *checkbtn_wrapquote;
1831 GtkWidget *checkbtn_autowrap;
1832 GtkWidget *checkbtn_wrapatsend;
1834 GtkWidget *checkbtn_default_reply_list;
1836 GtkWidget *checkbtn_forward_as_attachment;
1837 GtkWidget *checkbtn_redirect_keep_from;
1838 GtkWidget *checkbtn_smart_wrapping;
1839 GtkWidget *checkbtn_block_cursor;
1840 GtkWidget *frame_msgwrap;
1842 GtkWidget *hbox_autosave;
1843 GtkWidget *checkbtn_autosave;
1844 GtkWidget *entry_autosave_length;
1845 GtkWidget *label_autosave_length;
1847 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1848 gtk_widget_show (vbox1);
1849 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1850 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1852 /* Account autoselection */
1853 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1855 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1856 gtk_widget_show (hbox_autosel);
1857 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1858 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1860 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1861 _("when replying"));
1862 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1863 _("when forwarding"));
1864 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1865 _("when re-editing"));
1867 vbox2 = gtk_vbox_new (FALSE, 0);
1868 gtk_widget_show (vbox2);
1869 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1871 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1872 _("Reply button invokes mailing list reply"));
1874 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1875 _("Automatically launch the external editor"));
1877 hbox5 = gtk_hbox_new (FALSE, 8);
1878 gtk_widget_show (hbox5);
1879 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1881 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1882 _("Forward as attachment"));
1884 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1887 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1888 _("Keep the original 'From' header when redirecting"));
1891 hbox_autosave = gtk_hbox_new (FALSE, 8);
1892 gtk_widget_show (hbox_autosave);
1893 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1895 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1896 _("Autosave to Drafts folder every "));
1898 entry_autosave_length = gtk_entry_new();
1899 gtk_widget_set_usize (entry_autosave_length, 64, -1);
1900 gtk_widget_show (entry_autosave_length);
1901 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1903 label_autosave_length = gtk_label_new(_("characters"));
1904 gtk_widget_show (label_autosave_length);
1905 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1907 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1908 gtk_widget_show (hbox_undolevel);
1909 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1911 label_undolevel = gtk_label_new (_("Undo level"));
1912 gtk_widget_show (label_undolevel);
1913 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1915 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1916 spinbtn_undolevel = gtk_spin_button_new
1917 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1918 gtk_widget_show (spinbtn_undolevel);
1919 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1920 gtk_widget_set_usize (spinbtn_undolevel, 64, -1);
1921 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1924 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1926 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1927 gtk_widget_show (vbox_linewrap);
1928 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1929 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1931 hbox3 = gtk_hbox_new (FALSE, 8);
1932 gtk_widget_show (hbox3);
1933 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1936 label_linewrap = gtk_label_new (_("Wrap messages at"));
1937 gtk_widget_show (label_linewrap);
1938 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1940 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1941 spinbtn_linewrap = gtk_spin_button_new
1942 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1943 gtk_widget_show (spinbtn_linewrap);
1944 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1945 gtk_widget_set_usize (spinbtn_linewrap, 64, -1);
1946 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1948 label_linewrap = gtk_label_new (_("characters"));
1949 gtk_widget_show (label_linewrap);
1950 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1952 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1953 gtk_widget_show (hbox4);
1954 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1956 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1958 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1961 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1963 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1964 _("Smart wrapping (EXPERIMENTAL)"));
1967 compose.checkbtn_quote = checkbtn_quote;
1968 compose.entry_quotemark = entry_quotemark;
1969 compose.text_quotefmt = text_quotefmt;
1972 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1974 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1975 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1976 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1978 compose.spinbtn_undolevel = spinbtn_undolevel;
1979 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1981 compose.spinbtn_linewrap = spinbtn_linewrap;
1982 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1983 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1984 compose.checkbtn_autowrap = checkbtn_autowrap;
1985 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1987 compose.checkbtn_autosave = checkbtn_autosave;
1988 compose.entry_autosave_length = entry_autosave_length;
1990 compose.checkbtn_forward_as_attachment =
1991 checkbtn_forward_as_attachment;
1992 compose.checkbtn_redirect_keep_from =
1993 checkbtn_redirect_keep_from;
1994 compose.checkbtn_smart_wrapping =
1995 checkbtn_smart_wrapping;
1996 compose.checkbtn_block_cursor =
1997 checkbtn_block_cursor;
1998 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
2001 static void prefs_quote_create(void)
2004 GtkWidget *frame_quote;
2005 GtkWidget *vbox_quote;
2008 GtkWidget *label_quotemark;
2009 GtkWidget *entry_quotemark;
2010 GtkWidget *scrolledwin_quotefmt;
2011 GtkWidget *text_quotefmt;
2013 GtkWidget *entry_fw_quotemark;
2014 GtkWidget *text_fw_quotefmt;
2016 GtkWidget *entry_quote_chars;
2017 GtkWidget *label_quote_chars;
2019 GtkWidget *btn_quotedesc;
2021 GtkWidget *checkbtn_reply_with_quote;
2023 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2024 gtk_widget_show (vbox1);
2025 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2026 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2030 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
2032 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
2034 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2035 gtk_widget_show (vbox_quote);
2036 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2037 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2039 hbox1 = gtk_hbox_new (FALSE, 32);
2040 gtk_widget_show (hbox1);
2041 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2043 hbox2 = gtk_hbox_new (FALSE, 8);
2044 gtk_widget_show (hbox2);
2045 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2047 label_quotemark = gtk_label_new (_("Quotation mark"));
2048 gtk_widget_show (label_quotemark);
2049 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2051 entry_quotemark = gtk_entry_new ();
2052 gtk_widget_show (entry_quotemark);
2053 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
2054 gtk_widget_set_usize (entry_quotemark, 64, -1);
2056 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2057 gtk_widget_show (scrolledwin_quotefmt);
2058 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2059 gtk_scrolled_window_set_policy
2060 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2061 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2063 text_quotefmt = gtk_text_new (NULL, NULL);
2064 gtk_widget_show (text_quotefmt);
2065 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
2066 gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE);
2067 gtk_widget_set_usize(text_quotefmt, -1, 60);
2071 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
2073 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2074 gtk_widget_show (vbox_quote);
2075 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2076 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2078 hbox1 = gtk_hbox_new (FALSE, 32);
2079 gtk_widget_show (hbox1);
2080 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2082 hbox2 = gtk_hbox_new (FALSE, 8);
2083 gtk_widget_show (hbox2);
2084 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2086 label_quotemark = gtk_label_new (_("Quotation mark"));
2087 gtk_widget_show (label_quotemark);
2088 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
2090 entry_fw_quotemark = gtk_entry_new ();
2091 gtk_widget_show (entry_fw_quotemark);
2092 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
2094 gtk_widget_set_usize (entry_fw_quotemark, 64, -1);
2096 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
2097 gtk_widget_show (scrolledwin_quotefmt);
2098 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
2099 gtk_scrolled_window_set_policy
2100 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
2101 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2103 text_fw_quotefmt = gtk_text_new (NULL, NULL);
2104 gtk_widget_show (text_fw_quotefmt);
2105 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
2107 gtk_text_set_editable (GTK_TEXT (text_fw_quotefmt), TRUE);
2108 gtk_widget_set_usize(text_fw_quotefmt, -1, 60);
2110 hbox1 = gtk_hbox_new (FALSE, 32);
2111 gtk_widget_show (hbox1);
2112 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2115 gtk_button_new_with_label (_(" Description of symbols "));
2116 gtk_widget_show (btn_quotedesc);
2117 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
2118 gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked",
2119 GTK_SIGNAL_FUNC(quote_fmt_quote_description), NULL);
2123 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
2125 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
2126 gtk_widget_show (vbox_quote);
2127 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
2128 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
2130 hbox1 = gtk_hbox_new (FALSE, 32);
2131 gtk_widget_show (hbox1);
2132 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
2134 hbox2 = gtk_hbox_new (FALSE, 8);
2135 gtk_widget_show (hbox2);
2136 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
2138 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
2139 gtk_widget_show (label_quote_chars);
2140 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
2142 entry_quote_chars = gtk_entry_new ();
2143 gtk_widget_show (entry_quote_chars);
2144 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
2146 gtk_widget_set_usize (entry_quote_chars, 64, -1);
2149 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
2150 quote.entry_quotemark = entry_quotemark;
2151 quote.text_quotefmt = text_quotefmt;
2152 quote.entry_fw_quotemark = entry_fw_quotemark;
2153 quote.text_fw_quotefmt = text_fw_quotefmt;
2154 quote.entry_quote_chars = entry_quote_chars;
2157 static void prefs_display_create(void)
2160 GtkWidget *frame_font;
2162 GtkWidget *label_textfont;
2163 GtkWidget *entry_textfont;
2164 GtkWidget *button_textfont;
2165 GtkWidget *chkbtn_transhdr;
2166 GtkWidget *chkbtn_folder_unread;
2168 GtkWidget *label_ng_abbrev;
2169 GtkWidget *spinbtn_ng_abbrev_len;
2170 GtkObject *spinbtn_ng_abbrev_len_adj;
2171 GtkWidget *frame_summary;
2173 GtkWidget *chkbtn_swapfrom;
2174 GtkWidget *chkbtn_useaddrbook;
2175 GtkWidget *chkbtn_threadsubj;
2177 GtkWidget *label_datefmt;
2178 GtkWidget *button_datefmt;
2179 GtkWidget *entry_datefmt;
2180 GtkWidget *button_dispitem;
2181 GtkWidget *tmplabel, *tmpbutton, *tmpentry;
2183 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2184 gtk_widget_show (vbox1);
2185 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2186 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2188 PACK_FRAME(vbox1, frame_font, _("Font"));
2190 table1 = gtk_table_new (4, 3, FALSE);
2192 gtk_widget_show (table1);
2193 gtk_container_add (GTK_CONTAINER (frame_font), table1);
2194 gtk_container_set_border_width (GTK_CONTAINER (table1), 8);
2195 gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
2196 gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
2198 label_textfont = gtk_label_new (_("Text"));
2199 gtk_misc_set_alignment(GTK_MISC(label_textfont), 0, 0.5);
2200 gtk_widget_show (label_textfont);
2201 gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1,
2202 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2204 entry_textfont = gtk_entry_new ();
2205 gtk_widget_show (entry_textfont);
2206 gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1,
2207 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2209 button_textfont = gtk_button_new_with_label (" ... ");
2211 gtk_widget_show (button_textfont);
2212 gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1,
2214 gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked",
2215 GTK_SIGNAL_FUNC (prefs_font_select), entry_textfont);
2217 tmplabel = gtk_label_new (_("Small"));
2218 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2219 gtk_widget_show (tmplabel);
2220 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 1, 2,
2221 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2223 tmpentry = gtk_entry_new ();
2224 gtk_widget_show (tmpentry);
2225 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 1, 2,
2226 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2228 tmpbutton = gtk_button_new_with_label (" ... ");
2229 gtk_widget_show (tmpbutton);
2230 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 1, 2,
2232 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2233 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2234 display.entry_smallfont = tmpentry;
2236 tmplabel = gtk_label_new (_("Normal"));
2237 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2238 gtk_widget_show (tmplabel);
2239 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 2, 3,
2240 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2242 tmpentry = gtk_entry_new ();
2243 gtk_widget_show (tmpentry);
2244 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 2, 3,
2245 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2247 tmpbutton = gtk_button_new_with_label (" ... ");
2248 gtk_widget_show (tmpbutton);
2249 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 2, 3,
2251 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2252 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2253 display.entry_normalfont = tmpentry;
2255 tmplabel = gtk_label_new (_("Bold"));
2256 gtk_misc_set_alignment(GTK_MISC(tmplabel), 0, 0.5);
2257 gtk_widget_show (tmplabel);
2258 gtk_table_attach (GTK_TABLE (table1), tmplabel, 0, 1, 3, 4,
2259 GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0);
2261 tmpentry = gtk_entry_new ();
2262 gtk_widget_show (tmpentry);
2263 gtk_table_attach (GTK_TABLE (table1), tmpentry, 1, 2, 3, 4,
2264 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2266 tmpbutton = gtk_button_new_with_label (" ... ");
2267 gtk_widget_show (tmpbutton);
2268 gtk_table_attach (GTK_TABLE (table1), tmpbutton, 2, 3, 3, 4,
2270 gtk_signal_connect (GTK_OBJECT(tmpbutton), "clicked",
2271 GTK_SIGNAL_FUNC(prefs_font_select), tmpentry);
2272 display.entry_boldfont = tmpentry;
2274 vbox2 = gtk_vbox_new (FALSE, 0);
2275 gtk_widget_show (vbox2);
2276 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
2279 (vbox2, chkbtn_transhdr,
2280 _("Translate header name (such as `From:', `Subject:')"));
2282 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
2283 _("Display unread number next to folder name"));
2285 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2287 hbox1 = gtk_hbox_new (FALSE, 8);
2288 gtk_widget_show (hbox1);
2289 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2291 label_ng_abbrev = gtk_label_new
2292 (_("Abbreviate newsgroup names longer than"));
2293 gtk_widget_show (label_ng_abbrev);
2294 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2296 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
2297 spinbtn_ng_abbrev_len = gtk_spin_button_new
2298 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
2299 gtk_widget_show (spinbtn_ng_abbrev_len);
2300 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
2302 gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
2303 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
2306 label_ng_abbrev = gtk_label_new
2308 gtk_widget_show (label_ng_abbrev);
2309 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
2311 /* ---- Summary ---- */
2313 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
2315 vbox2 = gtk_vbox_new (FALSE, 0);
2316 gtk_widget_show (vbox2);
2317 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
2318 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
2321 (vbox2, chkbtn_swapfrom,
2322 _("Display recipient in `From' column if sender is yourself"));
2324 (vbox2, chkbtn_useaddrbook,
2325 _("Display sender using address book"));
2327 (vbox2, chkbtn_threadsubj,
2328 _("Thread using subject in addition to standard headers"));
2330 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2332 hbox1 = gtk_hbox_new (FALSE, 8);
2333 gtk_widget_show (hbox1);
2334 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2336 label_datefmt = gtk_label_new (_("Date format"));
2337 gtk_widget_show (label_datefmt);
2338 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
2340 entry_datefmt = gtk_entry_new ();
2341 gtk_widget_show (entry_datefmt);
2342 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
2344 button_datefmt = gtk_button_new_with_label (" ... ");
2346 gtk_widget_show (button_datefmt);
2347 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
2348 gtk_signal_connect (GTK_OBJECT (button_datefmt), "clicked",
2349 GTK_SIGNAL_FUNC (date_format_create), NULL);
2351 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
2353 hbox1 = gtk_hbox_new (FALSE, 8);
2354 gtk_widget_show (hbox1);
2355 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2357 button_dispitem = gtk_button_new_with_label
2358 (_(" Set displayed items in summary... "));
2359 gtk_widget_show (button_dispitem);
2360 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
2361 gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked",
2362 GTK_SIGNAL_FUNC (prefs_summary_column_open),
2365 display.entry_textfont = entry_textfont;
2366 display.button_textfont = button_textfont;
2368 display.chkbtn_transhdr = chkbtn_transhdr;
2369 display.chkbtn_folder_unread = chkbtn_folder_unread;
2370 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
2371 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
2373 display.chkbtn_swapfrom = chkbtn_swapfrom;
2374 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
2375 display.chkbtn_threadsubj = chkbtn_threadsubj;
2376 display.entry_datefmt = entry_datefmt;
2379 static void prefs_message_create(void)
2385 GtkWidget *chkbtn_enablecol;
2386 GtkWidget *button_edit_col;
2387 GtkWidget *chkbtn_mbalnum;
2388 GtkWidget *chkbtn_disphdrpane;
2389 GtkWidget *chkbtn_disphdr;
2390 GtkWidget *button_edit_disphdr;
2391 GtkWidget *hbox_linespc;
2392 GtkWidget *label_linespc;
2393 GtkObject *spinbtn_linespc_adj;
2394 GtkWidget *spinbtn_linespc;
2395 GtkWidget *chkbtn_headspc;
2397 GtkWidget *frame_scr;
2398 GtkWidget *vbox_scr;
2399 GtkWidget *chkbtn_smoothscroll;
2400 GtkWidget *hbox_scr;
2401 GtkWidget *label_scr;
2402 GtkObject *spinbtn_scrollstep_adj;
2403 GtkWidget *spinbtn_scrollstep;
2404 GtkWidget *chkbtn_halfpage;
2406 GtkWidget *chkbtn_attach_desc;
2408 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2409 gtk_widget_show (vbox1);
2410 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2411 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2413 vbox2 = gtk_vbox_new (FALSE, 0);
2414 gtk_widget_show (vbox2);
2415 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2417 hbox1 = gtk_hbox_new (FALSE, 8);
2418 gtk_widget_show (hbox1);
2419 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2421 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
2422 _("Enable coloration of message"));
2423 gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled",
2424 GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled),
2427 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
2428 gtk_widget_show (button_edit_col);
2429 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
2430 gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked",
2431 GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL);
2433 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
2436 (vbox2, chkbtn_mbalnum,
2437 _("Display multi-byte alphanumeric as\n"
2438 "ASCII character (Japanese only)"));
2439 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
2442 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
2443 _("Display header pane above message view"));
2445 hbox1 = gtk_hbox_new (FALSE, 8);
2446 gtk_widget_show (hbox1);
2447 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2449 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
2450 _("Display short headers on message view"));
2452 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
2453 gtk_widget_show (button_edit_disphdr);
2454 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
2456 gtk_signal_connect (GTK_OBJECT (button_edit_disphdr), "clicked",
2457 GTK_SIGNAL_FUNC (prefs_display_header_open),
2460 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
2462 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
2464 hbox1 = gtk_hbox_new (FALSE, 32);
2465 gtk_widget_show (hbox1);
2466 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
2468 hbox_linespc = gtk_hbox_new (FALSE, 8);
2469 gtk_widget_show (hbox1);
2470 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
2472 label_linespc = gtk_label_new (_("Line space"));
2473 gtk_widget_show (label_linespc);
2474 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2477 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
2478 spinbtn_linespc = gtk_spin_button_new
2479 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
2480 gtk_widget_show (spinbtn_linespc);
2481 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
2483 gtk_widget_set_usize (spinbtn_linespc, 64, -1);
2484 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
2486 label_linespc = gtk_label_new (_("pixel(s)"));
2487 gtk_widget_show (label_linespc);
2488 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
2491 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
2493 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
2495 vbox_scr = gtk_vbox_new (FALSE, 0);
2496 gtk_widget_show (vbox_scr);
2497 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
2498 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
2500 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
2502 hbox1 = gtk_hbox_new (FALSE, 32);
2503 gtk_widget_show (hbox1);
2504 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
2506 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
2508 hbox_scr = gtk_hbox_new (FALSE, 8);
2509 gtk_widget_show (hbox_scr);
2510 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
2512 label_scr = gtk_label_new (_("Step"));
2513 gtk_widget_show (label_scr);
2514 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2516 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
2517 spinbtn_scrollstep = gtk_spin_button_new
2518 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
2519 gtk_widget_show (spinbtn_scrollstep);
2520 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
2522 gtk_widget_set_usize (spinbtn_scrollstep, 64, -1);
2523 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
2526 label_scr = gtk_label_new (_("pixel(s)"));
2527 gtk_widget_show (label_scr);
2528 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2530 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2532 vbox3 = gtk_vbox_new (FALSE, 0);
2533 gtk_widget_show (vbox3);
2534 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
2536 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
2537 _("Show attachment descriptions (rather than names)"));
2540 message.chkbtn_enablecol = chkbtn_enablecol;
2541 message.button_edit_col = button_edit_col;
2542 message.chkbtn_mbalnum = chkbtn_mbalnum;
2543 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2544 message.chkbtn_disphdr = chkbtn_disphdr;
2545 message.spinbtn_linespc = spinbtn_linespc;
2546 message.chkbtn_headspc = chkbtn_headspc;
2548 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2549 message.spinbtn_scrollstep = spinbtn_scrollstep;
2550 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2551 message.chkbtn_halfpage = chkbtn_halfpage;
2553 message.chkbtn_attach_desc = chkbtn_attach_desc;
2557 static void prefs_privacy_create(void)
2563 GtkWidget *hbox_spc;
2565 GtkWidget *checkbtn_auto_check_signatures;
2566 GtkWidget *checkbtn_gpg_signature_popup;
2567 GtkWidget *checkbtn_store_passphrase;
2568 GtkObject *spinbtn_store_passphrase_adj;
2569 GtkWidget *spinbtn_store_passphrase;
2570 GtkWidget *checkbtn_passphrase_grab;
2571 GtkWidget *checkbtn_gpg_warning;
2573 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2574 gtk_widget_show (vbox1);
2575 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2576 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2578 vbox2 = gtk_vbox_new (FALSE, 0);
2579 gtk_widget_show (vbox2);
2580 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2582 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2583 _("Automatically check signatures"));
2585 PACK_CHECK_BUTTON (vbox2, checkbtn_gpg_signature_popup,
2586 _("Show signature check result in a popup window"));
2588 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2589 _("Store passphrase in memory temporarily"));
2591 vbox3 = gtk_vbox_new (FALSE, 0);
2592 gtk_widget_show (vbox3);
2593 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2595 hbox1 = gtk_hbox_new (FALSE, 8);
2596 gtk_widget_show (hbox1);
2597 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2599 hbox_spc = gtk_hbox_new (FALSE, 0);
2600 gtk_widget_show (hbox_spc);
2601 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2602 gtk_widget_set_usize (hbox_spc, 12, -1);
2604 label = gtk_label_new (_("Expire after"));
2605 gtk_widget_show (label);
2606 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2608 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2609 spinbtn_store_passphrase = gtk_spin_button_new
2610 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2611 gtk_widget_show (spinbtn_store_passphrase);
2612 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2613 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2615 gtk_widget_set_usize (spinbtn_store_passphrase, 64, -1);
2617 label = gtk_label_new (_("minute(s) "));
2618 gtk_widget_show (label);
2619 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2621 hbox1 = gtk_hbox_new (FALSE, 8);
2622 gtk_widget_show (hbox1);
2623 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2625 hbox_spc = gtk_hbox_new (FALSE, 0);
2626 gtk_widget_show (hbox_spc);
2627 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2628 gtk_widget_set_usize (hbox_spc, 12, -1);
2630 label = gtk_label_new (_("(Setting to '0' will store the passphrase\n"
2631 " for the whole session)"));
2632 gtk_widget_show (label);
2633 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2634 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2636 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2639 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2640 _("Grab input while entering a passphrase"));
2644 (vbox2, checkbtn_gpg_warning,
2645 _("Display warning on startup if GnuPG doesn't work"));
2647 hbox1 = gtk_hbox_new (FALSE, 8);
2648 gtk_widget_show (hbox1);
2649 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2651 privacy.checkbtn_auto_check_signatures
2652 = checkbtn_auto_check_signatures;
2653 privacy.checkbtn_gpg_signature_popup
2654 = checkbtn_gpg_signature_popup;
2655 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2656 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2657 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2658 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2659 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2661 #endif /* USE_GPGME */
2663 static void prefs_interface_create(void)
2668 /* GtkWidget *checkbtn_emacs; */
2669 GtkWidget *checkbtn_always_show_msg;
2670 GtkWidget *checkbtn_openunread;
2671 GtkWidget *checkbtn_mark_as_read_on_newwin;
2672 GtkWidget *checkbtn_openinbox;
2673 GtkWidget *checkbtn_immedexec;
2677 GtkWidget *menuitem;
2679 GtkWidget *button_keybind;
2681 GtkWidget *hbox_nextunreadmsgdialog;
2682 GtkWidget *optmenu_nextunreadmsgdialog;
2684 GtkWidget *frame_pixmap_theme;
2685 GtkWidget *vbox_pixmap_theme;
2686 GtkWidget *entry_pixmap_theme;
2687 GtkWidget *combo_pixmap_theme;
2688 GList *avail_pixmap_themes = NULL;
2690 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2691 gtk_widget_show (vbox1);
2692 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2693 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2695 vbox2 = gtk_vbox_new (FALSE, 0);
2696 gtk_widget_show (vbox2);
2697 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2699 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2700 _("Emulate the behavior of mouse operation of\n"
2701 "Emacs-based mailer"));
2702 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2703 GTK_JUSTIFY_LEFT); */
2706 (vbox2, checkbtn_always_show_msg,
2707 _("Always open messages in summary when selected"));
2710 (vbox2, checkbtn_openunread,
2711 _("Open first unread message when entering a folder"));
2714 (vbox2, checkbtn_mark_as_read_on_newwin,
2715 _("Only mark message as read when opened in new window"));
2718 (vbox2, checkbtn_openinbox,
2719 _("Go to inbox after receiving new mail"));
2721 vbox3 = gtk_vbox_new (FALSE, 0);
2722 gtk_widget_show (vbox3);
2723 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2726 (vbox3, checkbtn_immedexec,
2727 _("Execute immediately when moving or deleting messages"));
2729 hbox1 = gtk_hbox_new (FALSE, 0);
2730 gtk_widget_show (hbox1);
2731 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2733 label = gtk_label_new
2734 (_("(Messages will be marked until execution\n"
2735 " if this is turned off)"));
2736 gtk_widget_show (label);
2737 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8);
2738 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2740 /* Next Unread Message Dialog */
2741 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
2742 gtk_widget_show (hbox1);
2743 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
2745 label = gtk_label_new (_("Show no-unread-message dialog"));
2746 gtk_widget_show (label);
2747 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
2749 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2750 gtk_widget_show (optmenu_nextunreadmsgdialog);
2751 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2753 menu = gtk_menu_new ();
2754 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2755 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2756 NEXTUNREADMSGDIALOG_ASSUME_YES);
2757 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2758 NEXTUNREADMSGDIALOG_ASSUME_NO);
2760 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2762 hbox1 = gtk_hbox_new (FALSE, 8);
2763 gtk_widget_show (hbox1);
2764 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2766 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2767 gtk_widget_show (button_keybind);
2768 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2769 gtk_signal_connect (GTK_OBJECT (button_keybind), "clicked",
2770 GTK_SIGNAL_FUNC (prefs_keybind_select), NULL);
2772 PACK_FRAME(vbox1, frame_pixmap_theme, _("Icon theme"));
2774 vbox_pixmap_theme = gtk_vbox_new(FALSE, 0);
2775 gtk_widget_show(vbox_pixmap_theme);
2776 gtk_container_add(GTK_CONTAINER(frame_pixmap_theme), vbox_pixmap_theme);
2777 gtk_container_set_border_width(GTK_CONTAINER(vbox_pixmap_theme), 8);
2779 avail_pixmap_themes = stock_pixmap_themes_list_new();
2781 combo_pixmap_theme = gtk_combo_new ();
2782 gtk_widget_show (combo_pixmap_theme);
2783 gtk_box_pack_start (GTK_BOX (vbox_pixmap_theme), combo_pixmap_theme, TRUE, TRUE, 0);
2784 gtk_combo_set_popdown_strings(GTK_COMBO(combo_pixmap_theme), avail_pixmap_themes);
2785 entry_pixmap_theme = GTK_COMBO (combo_pixmap_theme)->entry;
2787 stock_pixmap_themes_list_free(avail_pixmap_themes);
2789 /* interface.checkbtn_emacs = checkbtn_emacs; */
2790 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2791 interface.checkbtn_openunread = checkbtn_openunread;
2792 interface.checkbtn_mark_as_read_on_newwin
2793 = checkbtn_mark_as_read_on_newwin;
2794 interface.checkbtn_openinbox = checkbtn_openinbox;
2795 interface.checkbtn_immedexec = checkbtn_immedexec;
2796 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2797 interface.combo_pixmap_theme = combo_pixmap_theme;
2798 interface.entry_pixmap_theme = entry_pixmap_theme;
2801 static void prefs_other_create(void)
2804 GtkWidget *ext_frame;
2805 GtkWidget *ext_table;
2808 GtkWidget *uri_label;
2809 GtkWidget *uri_combo;
2810 GtkWidget *uri_entry;
2812 GtkWidget *printcmd_label;
2813 GtkWidget *printcmd_entry;
2815 GtkWidget *exteditor_label;
2816 GtkWidget *exteditor_combo;
2817 GtkWidget *exteditor_entry;
2819 GtkWidget *frame_addr;
2820 GtkWidget *vbox_addr;
2821 GtkWidget *checkbtn_addaddrbyclick;
2823 GtkWidget *frame_cliplog;
2824 GtkWidget *vbox_cliplog;
2825 GtkWidget *hbox_cliplog;
2826 GtkWidget *checkbtn_cliplog;
2827 GtkWidget *loglength_label;
2828 GtkWidget *loglength_entry;
2830 GtkWidget *frame_exit;
2831 GtkWidget *vbox_exit;
2832 GtkWidget *checkbtn_confonexit;
2833 GtkWidget *checkbtn_cleanonexit;
2834 GtkWidget *checkbtn_askonclean;
2835 GtkWidget *checkbtn_warnqueued;
2837 GtkWidget *label_iotimeout;
2838 GtkWidget *spinbtn_iotimeout;
2839 GtkObject *spinbtn_iotimeout_adj;
2843 GtkWidget *frame_ssl;
2844 GtkWidget *vbox_ssl;
2845 GtkWidget *hbox_ssl;
2846 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2849 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2850 gtk_widget_show (vbox1);
2851 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2852 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2854 PACK_FRAME(vbox1, ext_frame,
2855 _("External commands (%s will be replaced with file name / URI)"));
2857 ext_table = gtk_table_new (3, 2, FALSE);
2858 gtk_widget_show (ext_table);
2859 gtk_container_add (GTK_CONTAINER (ext_frame), ext_table);
2860 gtk_container_set_border_width (GTK_CONTAINER (ext_table), 8);
2861 gtk_table_set_row_spacings (GTK_TABLE (ext_table), VSPACING_NARROW);
2862 gtk_table_set_col_spacings (GTK_TABLE (ext_table), 8);
2864 uri_label = gtk_label_new (_("Web browser"));
2865 gtk_widget_show(uri_label);
2866 gtk_table_attach (GTK_TABLE (ext_table), uri_label, 0, 1, 0, 1,
2867 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2868 gtk_misc_set_alignment (GTK_MISC (uri_label), 1, 0.5);
2870 uri_combo = gtk_combo_new ();
2871 gtk_widget_show (uri_combo);
2872 gtk_table_attach (GTK_TABLE (ext_table), uri_combo, 1, 2, 0, 1,
2873 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2874 gtkut_combo_set_items (GTK_COMBO (uri_combo),
2875 DEFAULT_BROWSER_CMD,
2876 "galeon --new-tab '%s'",
2878 "mozilla -remote 'openurl(%s,new-window)'",
2879 "netscape -remote 'openURL(%s, new-window)'",
2881 "gnome-moz-remote --newwin '%s'",
2882 "kfmclient openURL '%s'",
2883 "opera -newwindow '%s'",
2884 "kterm -e w3m '%s'",
2885 "kterm -e lynx '%s'",
2887 uri_entry = GTK_COMBO (uri_combo)->entry;
2889 printcmd_label = gtk_label_new (_("Print"));
2890 gtk_widget_show (printcmd_label);
2891 gtk_table_attach (GTK_TABLE (ext_table), printcmd_label, 0, 1, 1, 2,
2892 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2893 gtk_misc_set_alignment (GTK_MISC (printcmd_label), 1, 0.5);
2895 printcmd_entry = gtk_entry_new ();
2896 gtk_widget_show (printcmd_entry);
2897 gtk_table_attach (GTK_TABLE (ext_table), printcmd_entry, 1, 2, 1, 2,
2898 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2900 exteditor_label = gtk_label_new (_("Editor"));
2901 gtk_widget_show (exteditor_label);
2902 gtk_table_attach (GTK_TABLE (ext_table), exteditor_label, 0, 1, 2, 3,
2903 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
2904 gtk_misc_set_alignment (GTK_MISC (exteditor_label), 1, 0.5);
2906 exteditor_combo = gtk_combo_new ();
2907 gtk_widget_show (exteditor_combo);
2908 gtk_table_attach (GTK_TABLE (ext_table), exteditor_combo, 1, 2, 2, 3,
2909 GTK_EXPAND | GTK_FILL, 0, 0, 0);
2910 gtkut_combo_set_items (GTK_COMBO (exteditor_combo),
2913 "mgedit --no-fork %s",
2919 exteditor_entry = GTK_COMBO (exteditor_combo)->entry;
2921 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2923 vbox_addr = gtk_vbox_new (FALSE, 0);
2924 gtk_widget_show (vbox_addr);
2925 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2926 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2929 (vbox_addr, checkbtn_addaddrbyclick,
2930 _("Add address to destination when double-clicked"));
2933 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2935 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2936 gtk_widget_show (vbox_cliplog);
2937 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2938 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2939 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2940 _("Clip the log size"));
2941 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2942 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2943 gtk_widget_show (hbox_cliplog);
2945 loglength_label = gtk_label_new (_("Log window length"));
2946 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2948 gtk_widget_show (GTK_WIDGET (loglength_label));
2949 loglength_entry = gtk_entry_new ();
2950 gtk_widget_set_usize (GTK_WIDGET (loglength_entry), 64, -1);
2951 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2953 gtk_widget_show (GTK_WIDGET (loglength_entry));
2954 loglength_label = gtk_label_new (_("(0 to stop logging in the log window)"));
2955 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2957 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2962 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2964 vbox_ssl = gtk_vbox_new (FALSE, 0);
2965 gtk_widget_show (vbox_ssl);
2966 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2967 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2968 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2969 _("Ask before accepting SSL certificates"));
2970 hbox_ssl = gtk_hbox_new (FALSE, 3);
2971 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2972 gtk_widget_show (hbox_ssl);
2977 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2979 vbox_exit = gtk_vbox_new (FALSE, 0);
2980 gtk_widget_show (vbox_exit);
2981 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2982 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2984 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2985 _("Confirm on exit"));
2987 hbox1 = gtk_hbox_new (FALSE, 32);
2988 gtk_widget_show (hbox1);
2989 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2991 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2992 _("Empty trash on exit"));
2993 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2994 _("Ask before emptying"));
2995 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2997 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2998 _("Warn if there are queued messages"));
3000 hbox1 = gtk_hbox_new (FALSE, 8);
3001 gtk_widget_show (hbox1);
3002 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3004 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
3005 gtk_widget_show (label_iotimeout);
3006 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
3008 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
3009 spinbtn_iotimeout = gtk_spin_button_new
3010 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
3011 gtk_widget_show (spinbtn_iotimeout);
3012 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
3014 gtk_widget_set_usize (spinbtn_iotimeout, 64, -1);
3015 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
3017 label_iotimeout = gtk_label_new (_("second(s)"));
3018 gtk_widget_show (label_iotimeout);
3019 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
3021 other.uri_combo = uri_combo;
3022 other.uri_entry = uri_entry;
3023 other.printcmd_entry = printcmd_entry;
3025 other.exteditor_combo = exteditor_combo;
3026 other.exteditor_entry = exteditor_entry;
3028 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
3030 other.checkbtn_cliplog = checkbtn_cliplog;
3031 other.loglength_entry = loglength_entry;
3033 other.checkbtn_confonexit = checkbtn_confonexit;
3034 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
3035 other.checkbtn_askonclean = checkbtn_askonclean;
3036 other.checkbtn_warnqueued = checkbtn_warnqueued;
3038 other.spinbtn_iotimeout = spinbtn_iotimeout;
3039 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
3043 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
3048 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
3050 GtkWidget *datefmt_sample = NULL;
3053 g_return_if_fail(widget != NULL);
3054 g_return_if_fail(*widget != NULL);
3055 g_return_if_fail(display.entry_datefmt != NULL);
3057 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3058 (GTK_OBJECT(*widget), "datefmt_sample"));
3059 g_return_if_fail(datefmt_sample != NULL);
3061 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
3062 g_free(prefs_common.date_format);
3063 prefs_common.date_format = text;
3064 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
3066 gtk_widget_destroy(*widget);
3070 static void date_format_cancel_btn_clicked(GtkButton *button,
3073 g_return_if_fail(widget != NULL);
3074 g_return_if_fail(*widget != NULL);
3076 gtk_widget_destroy(*widget);
3080 static void date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
3083 if (event && event->keyval == GDK_Escape)
3084 date_format_cancel_btn_clicked(NULL, widget);
3087 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
3088 GdkEventAny *event, GtkWidget **widget)
3090 g_return_val_if_fail(widget != NULL, FALSE);
3091 g_return_val_if_fail(*widget != NULL, FALSE);
3097 static void date_format_entry_on_change(GtkEditable *editable,
3101 struct tm *cal_time;
3105 cur_time = time(NULL);
3106 cal_time = localtime(&cur_time);
3108 text = gtk_editable_get_chars(editable, 0, -1);
3110 strftime(buffer, sizeof buffer, text, cal_time);
3112 gtk_label_set_text(example, buffer);
3115 static void date_format_select_row(GtkWidget *date_format_list, gint row,
3116 gint column, GdkEventButton *event,
3117 GtkWidget *date_format)
3123 GtkWidget *datefmt_sample;
3125 /* only on double click */
3126 if (!event || event->type != GDK_2BUTTON_PRESS) return;
3129 datefmt_sample = GTK_WIDGET(gtk_object_get_data
3130 (GTK_OBJECT(date_format), "datefmt_sample"));
3132 g_return_if_fail(date_format_list != NULL);
3133 g_return_if_fail(date_format != NULL);
3134 g_return_if_fail(datefmt_sample != NULL);
3136 /* get format from clist */
3137 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
3139 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
3140 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
3142 /* insert the format into the text entry */
3143 new_format = g_malloc(strlen(old_format) + 3);
3145 strncpy(new_format, old_format, cur_pos);
3146 new_format[cur_pos] = '\0';
3147 strcat(new_format, format);
3148 strcat(new_format, &old_format[cur_pos]);
3150 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
3151 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
3156 static GtkWidget *date_format_create(GtkButton *button, void *data)
3158 static GtkWidget *datefmt_win = NULL;
3160 GtkWidget *scrolledwindow1;
3161 GtkWidget *datefmt_clist;
3166 GtkWidget *confirm_area;
3168 GtkWidget *cancel_btn;
3169 GtkWidget *datefmt_entry;
3198 const gint TIME_FORMAT_ELEMS =
3199 sizeof time_format / sizeof time_format[0];
3201 time_format[0].txt = _("the full abbreviated weekday name");
3202 time_format[1].txt = _("the full weekday name");
3203 time_format[2].txt = _("the abbreviated month name");
3204 time_format[3].txt = _("the full month name");
3205 time_format[4].txt = _("the preferred date and time for the current locale");
3206 time_format[5].txt = _("the century number (year/100)");
3207 time_format[6].txt = _("the day of the month as a decimal number");
3208 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
3209 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
3210 time_format[9].txt = _("the day of the year as a decimal number");
3211 time_format[10].txt = _("the month as a decimal number");
3212 time_format[11].txt = _("the minute as a decimal number");
3213 time_format[12].txt = _("either AM or PM");
3214 time_format[13].txt = _("the second as a decimal number");
3215 time_format[14].txt = _("the day of the week as a decimal number");
3216 time_format[15].txt = _("the preferred date for the current locale");
3217 time_format[16].txt = _("the last two digits of a year");
3218 time_format[17].txt = _("the year as a decimal number");
3219 time_format[18].txt = _("the time zone or name or abbreviation");
3221 if (datefmt_win) return datefmt_win;
3223 datefmt_win = gtk_window_new(GTK_WINDOW_DIALOG);
3224 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
3225 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
3226 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3227 gtk_widget_set_usize(datefmt_win, 440, 280);
3229 vbox1 = gtk_vbox_new(FALSE, 10);
3230 gtk_widget_show(vbox1);
3231 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
3233 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
3234 gtk_scrolled_window_set_policy
3235 (GTK_SCROLLED_WINDOW(scrolledwindow1),
3236 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3237 gtk_widget_show(scrolledwindow1);
3238 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
3240 titles[0] = _("Specifier");
3241 titles[1] = _("Description");
3242 datefmt_clist = gtk_clist_new_with_titles(2, titles);
3243 gtk_widget_show(datefmt_clist);
3244 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
3245 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
3246 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
3247 GTK_SELECTION_BROWSE);
3249 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
3251 /* phoney casting necessary because of gtk... */
3252 text[0] = (gchar *)time_format[i].fmt;
3253 text[1] = (gchar *)time_format[i].txt;
3254 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
3257 table = gtk_table_new(2, 2, FALSE);
3258 gtk_widget_show(table);
3259 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
3260 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
3261 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
3263 label1 = gtk_label_new(_("Date format"));
3264 gtk_widget_show(label1);
3265 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
3267 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
3268 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
3270 datefmt_entry = gtk_entry_new_with_max_length(256);
3271 gtk_widget_show(datefmt_entry);
3272 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
3273 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3275 /* we need the "sample" entry box; add it as data so callbacks can
3276 * get the entry box */
3277 gtk_object_set_data(GTK_OBJECT(datefmt_win), "datefmt_sample",
3280 label2 = gtk_label_new(_("Example"));
3281 gtk_widget_show(label2);
3282 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
3284 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
3285 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
3287 label3 = gtk_label_new("");
3288 gtk_widget_show(label3);
3289 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
3290 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3291 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
3292 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
3294 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
3295 &cancel_btn, _("Cancel"), NULL, NULL);
3296 gtk_widget_grab_default(ok_btn);
3297 gtk_widget_show(confirm_area);
3299 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
3301 /* set the current format */
3302 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
3303 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
3306 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3307 GTK_SIGNAL_FUNC(date_format_ok_btn_clicked),
3309 gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
3310 GTK_SIGNAL_FUNC(date_format_cancel_btn_clicked),
3312 gtk_signal_connect(GTK_OBJECT(datefmt_win), "key_press_event",
3313 GTK_SIGNAL_FUNC(date_format_key_pressed),
3315 gtk_signal_connect(GTK_OBJECT(datefmt_win), "delete_event",
3316 GTK_SIGNAL_FUNC(date_format_on_delete),
3318 gtk_signal_connect(GTK_OBJECT(datefmt_entry), "changed",
3319 GTK_SIGNAL_FUNC(date_format_entry_on_change),
3322 gtk_signal_connect(GTK_OBJECT(datefmt_clist), "select_row",
3323 GTK_SIGNAL_FUNC(date_format_select_row),
3326 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
3327 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
3329 gtk_widget_show(datefmt_win);
3330 manage_window_set_transient(GTK_WINDOW(datefmt_win));
3332 gtk_widget_grab_focus(ok_btn);
3337 void prefs_quote_colors_dialog(void)
3339 if (!quote_color_win)
3340 prefs_quote_colors_dialog_create();
3341 gtk_widget_show(quote_color_win);
3342 manage_window_set_transient(GTK_WINDOW(quote_color_win));
3345 gtk_widget_hide(quote_color_win);
3347 textview_update_message_colors();
3348 main_window_reflect_prefs_all();
3351 static void prefs_quote_colors_dialog_create(void)
3356 GtkWidget *quotelevel1_label;
3357 GtkWidget *quotelevel2_label;
3358 GtkWidget *quotelevel3_label;
3359 GtkWidget *uri_label;
3360 GtkWidget *signature_label;
3361 GtkWidget *tgt_folder_label;
3364 GtkWidget *recycle_colors_btn;
3365 GtkWidget *frame_colors;
3367 window = gtk_window_new(GTK_WINDOW_DIALOG);
3368 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
3369 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
3370 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
3371 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
3372 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
3374 vbox = gtk_vbox_new (FALSE, VSPACING);
3375 gtk_container_add (GTK_CONTAINER (window), vbox);
3376 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
3377 PACK_FRAME(vbox, frame_colors, _("Colors"));
3379 table = gtk_table_new (5, 2, FALSE);
3380 gtk_container_add (GTK_CONTAINER (frame_colors), table);
3381 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
3382 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
3383 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
3386 color_buttons.quote_level1_btn = gtk_button_new();
3387 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
3388 0, 1, 0, 1, 0, 0, 0, 0);
3389 gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30);
3390 gtk_container_set_border_width
3391 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
3393 color_buttons.quote_level2_btn = gtk_button_new();
3394 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
3395 0, 1, 1, 2, 0, 0, 0, 0);
3396 gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30);
3397 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
3399 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
3400 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
3401 0, 1, 2, 3, 0, 0, 0, 0);
3402 gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30);
3403 gtk_container_set_border_width
3404 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
3406 color_buttons.uri_btn = gtk_button_new_with_label ("");
3407 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
3408 0, 1, 3, 4, 0, 0, 0, 0);
3409 gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
3410 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
3412 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
3413 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
3414 0, 1, 4, 5, 0, 0, 0, 0);
3415 gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
3416 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
3418 color_buttons.signature_btn = gtk_button_new_with_label ("");
3419 gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn,
3420 0, 1, 5, 6, 0, 0, 0, 0);
3421 gtk_widget_set_usize (color_buttons.signature_btn, 40, 30);
3422 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5);
3424 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
3425 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
3426 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3427 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
3428 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
3430 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
3431 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
3432 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3433 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
3434 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
3436 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
3437 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
3438 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3439 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
3440 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
3442 uri_label = gtk_label_new (_("URI link"));
3443 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
3444 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3445 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
3446 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
3448 tgt_folder_label = gtk_label_new (_("Target folder"));
3449 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
3450 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3451 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
3452 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
3454 signature_label = gtk_label_new (_("Signatures"));
3455 gtk_table_attach (GTK_TABLE (table), signature_label, 1, 2, 5, 6,
3456 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
3457 gtk_label_set_justify (GTK_LABEL (signature_label), GTK_JUSTIFY_LEFT);
3458 gtk_misc_set_alignment (GTK_MISC (signature_label), 0, 0.5);
3460 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
3461 _("Recycle quote colors"));
3463 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
3464 NULL, NULL, NULL, NULL);
3465 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
3467 gtk_widget_grab_default(ok_btn);
3468 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3469 gtk_signal_connect(GTK_OBJECT(window), "delete_event",
3470 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3471 gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
3472 GTK_SIGNAL_FUNC(prefs_quote_colors_key_pressed),
3475 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked",
3476 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1");
3477 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked",
3478 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2");
3479 gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked",
3480 GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
3481 gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
3482 GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
3483 gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
3484 GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
3485 gtk_signal_connect(GTK_OBJECT(color_buttons.signature_btn), "clicked",
3486 GTK_SIGNAL_FUNC(quote_color_set_dialog), "SIGNATURE");
3487 gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
3488 GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
3489 gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
3490 GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
3492 /* show message button colors and recycle options */
3493 set_button_bg_color(color_buttons.quote_level1_btn,
3494 prefs_common.quote_level1_col);
3495 set_button_bg_color(color_buttons.quote_level2_btn,
3496 prefs_common.quote_level2_col);
3497 set_button_bg_color(color_buttons.quote_level3_btn,
3498 prefs_common.quote_level3_col);
3499 set_button_bg_color(color_buttons.uri_btn,
3500 prefs_common.uri_col);
3501 set_button_bg_color(color_buttons.tgt_folder_btn,
3502 prefs_common.tgt_folder_col);
3503 set_button_bg_color(color_buttons.signature_btn,
3504 prefs_common.signature_col);
3505 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
3506 prefs_common.recycle_quote_colors);
3508 gtk_widget_show_all(vbox);
3509 quote_color_win = window;
3512 static void prefs_quote_colors_key_pressed(GtkWidget *widget,
3513 GdkEventKey *event, gpointer data)
3515 if (event && event->keyval == GDK_Escape)
3519 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
3521 gchar *type = (gchar *)data;
3522 gchar *title = NULL;
3523 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
3525 GtkColorSelectionDialog *dialog;
3527 if(g_strcasecmp(type, "LEVEL1") == 0) {
3528 title = _("Pick color for quotation level 1");
3529 rgbvalue = prefs_common.quote_level1_col;
3530 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
3531 title = _("Pick color for quotation level 2");
3532 rgbvalue = prefs_common.quote_level2_col;
3533 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
3534 title = _("Pick color for quotation level 3");
3535 rgbvalue = prefs_common.quote_level3_col;
3536 } else if(g_strcasecmp(type, "URI") == 0) {
3537 title = _("Pick color for URI");
3538 rgbvalue = prefs_common.uri_col;
3539 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
3540 title = _("Pick color for target folder");
3541 rgbvalue = prefs_common.tgt_folder_col;
3542 } else if(g_strcasecmp(type, "SIGNATURE") == 0) {
3543 title = _("Pick color for signatures");
3544 rgbvalue = prefs_common.signature_col;
3546 } else if(g_strcasecmp(type, "Misspelled word") == 0) {
3547 title = _("Pick color for misspelled word");
3548 rgbvalue = prefs_common.misspelled_col;
3550 } else { /* Should never be called */
3551 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
3555 color_dialog = gtk_color_selection_dialog_new(title);
3556 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
3557 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
3558 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
3559 manage_window_set_transient(GTK_WINDOW(color_dialog));
3561 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
3562 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data);
3563 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
3564 "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data);
3565 gtk_signal_connect(GTK_OBJECT(color_dialog), "key_press_event",
3566 GTK_SIGNAL_FUNC(quote_colors_set_dialog_key_pressed),
3569 /* preselect the previous color in the color selection dialog */
3570 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
3571 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
3572 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
3573 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
3574 gtk_color_selection_set_color
3575 (GTK_COLOR_SELECTION(dialog->colorsel), color);
3577 gtk_widget_show(color_dialog);
3580 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
3582 GtkColorSelection *colorsel = (GtkColorSelection *)
3583 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
3585 gint red, green, blue, rgbvalue;
3586 gchar *type = (gchar *)data;
3588 gtk_color_selection_get_color(colorsel, color);
3590 red = (gint) (color[0] * 255.0);
3591 green = (gint) (color[1] * 255.0);
3592 blue = (gint) (color[2] * 255.0);
3593 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
3596 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
3597 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
3598 fprintf(stderr, "Color is %x\n", rgbvalue);
3601 if (g_strcasecmp(type, "LEVEL1") == 0) {
3602 prefs_common.quote_level1_col = rgbvalue;
3603 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
3604 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
3605 prefs_common.quote_level2_col = rgbvalue;
3606 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
3607 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
3608 prefs_common.quote_level3_col = rgbvalue;
3609 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
3610 } else if (g_strcasecmp(type, "URI") == 0) {
3611 prefs_common.uri_col = rgbvalue;
3612 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
3613 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
3614 prefs_common.tgt_folder_col = rgbvalue;
3615 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
3616 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
3617 } else if (g_strcasecmp(type, "SIGNATURE") == 0) {
3618 prefs_common.signature_col = rgbvalue;
3619 set_button_bg_color(color_buttons.signature_btn, rgbvalue);
3621 } else if (g_strcasecmp(type, "Misspelled word") == 0) {
3622 prefs_common.misspelled_col = rgbvalue;
3623 set_button_bg_color(spelling.misspelled_btn, rgbvalue);
3626 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
3628 gtk_widget_destroy(color_dialog);
3631 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
3633 gtk_widget_destroy(color_dialog);
3636 static void quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3640 gtk_widget_destroy(color_dialog);
3643 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3648 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3649 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3650 newstyle->bg[GTK_STATE_NORMAL] = color;
3651 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3652 newstyle->bg[GTK_STATE_ACTIVE] = color;
3654 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3657 static void prefs_enable_message_color_toggled(void)
3661 is_active = gtk_toggle_button_get_active
3662 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3663 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3664 prefs_common.enable_color = is_active;
3667 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3671 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3672 prefs_common.recycle_quote_colors = is_active;
3675 static void prefs_font_select(GtkButton *button, GtkEntry *entry)
3679 g_return_if_fail(entry != NULL);
3681 if (!font_sel_win) {
3682 font_sel_win = gtk_font_selection_dialog_new
3683 (_("Font selection"));
3684 gtk_window_position(GTK_WINDOW(font_sel_win),
3685 GTK_WIN_POS_CENTER);
3686 gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event",
3687 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3690 (GTK_OBJECT(font_sel_win), "key_press_event",
3691 GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed),
3693 gtk_signal_connect_object
3694 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button),
3696 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete),
3697 GTK_OBJECT(font_sel_win));
3700 if(font_sel_conn_id) {
3701 gtk_signal_disconnect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), font_sel_conn_id);
3703 font_sel_conn_id = gtk_signal_connect
3704 (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button),
3706 GTK_SIGNAL_FUNC(prefs_font_selection_ok),
3708 printf("%i\n", font_sel_conn_id);
3710 font_name = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
3711 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(font_sel_win), font_name);
3713 manage_window_set_transient(GTK_WINDOW(font_sel_win));
3714 gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE);
3715 gtk_widget_grab_focus
3716 (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button);
3717 gtk_widget_show(font_sel_win);
3720 static void prefs_font_selection_key_pressed(GtkWidget *widget,
3724 if (event && event->keyval == GDK_Escape)
3725 gtk_widget_hide(font_sel_win);
3728 static void prefs_font_selection_ok(GtkButton *button, GtkEntry *entry)
3732 fontname = gtk_font_selection_dialog_get_font_name
3733 (GTK_FONT_SELECTION_DIALOG(font_sel_win));
3736 gtk_entry_set_text(entry, fontname);
3741 gtk_widget_hide(font_sel_win);
3744 static void prefs_keybind_select(void)
3751 GtkWidget *confirm_area;
3753 GtkWidget *cancel_btn;
3755 window = gtk_window_new (GTK_WINDOW_DIALOG);
3756 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
3757 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
3758 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
3759 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
3760 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
3761 manage_window_set_transient (GTK_WINDOW (window));
3763 vbox1 = gtk_vbox_new (FALSE, VSPACING);
3764 gtk_container_add (GTK_CONTAINER (window), vbox1);
3765 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
3767 hbox1 = gtk_hbox_new (FALSE, 8);
3768 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3770 label = gtk_label_new
3771 (_("Select preset:"));
3772 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3773 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3775 hbox1 = gtk_hbox_new (FALSE, 8);
3776 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3778 combo = gtk_combo_new ();
3779 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
3780 gtkut_combo_set_items (GTK_COMBO (combo),
3786 gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE);
3788 hbox1 = gtk_hbox_new (FALSE, 8);
3789 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3791 label = gtk_label_new
3792 (_("You can also modify each menu shortcut by pressing\n"
3793 "any key(s) when placing the mouse pointer on the item."));
3794 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3795 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3797 hbox1 = gtk_hbox_new (FALSE, 8);
3798 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3800 gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
3801 &cancel_btn, _("Cancel"), NULL, NULL);
3802 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
3803 gtk_widget_grab_default (ok_btn);
3805 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3806 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
3807 GTK_SIGNAL_FUNC (prefs_keybind_deleted), NULL);
3808 gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
3809 GTK_SIGNAL_FUNC (prefs_keybind_key_pressed), NULL);
3810 gtk_signal_connect (GTK_OBJECT (ok_btn), "clicked",
3811 GTK_SIGNAL_FUNC (prefs_keybind_apply_clicked),
3813 gtk_signal_connect (GTK_OBJECT (cancel_btn), "clicked",
3814 GTK_SIGNAL_FUNC (prefs_keybind_cancel),
3817 gtk_widget_show_all(window);
3819 keybind.window = window;
3820 keybind.combo = combo;
3823 static void prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
3826 if (event && event->keyval == GDK_Escape)
3827 prefs_keybind_cancel();
3830 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
3833 prefs_keybind_cancel();
3837 static void prefs_keybind_cancel(void)
3839 gtk_widget_destroy(keybind.window);
3840 keybind.window = NULL;
3841 keybind.combo = NULL;
3844 static void prefs_keybind_apply_clicked(GtkWidget *widget)
3846 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
3850 static gchar *default_menurc =
3851 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
3852 "(menu-path \"<Main>/File/Save as...\" \"<control>S\")\n"
3853 "(menu-path \"<Main>/File/Print...\" \"\")\n"
3854 "(menu-path \"<Main>/File/Exit\" \"<control>Q\")\n"
3856 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3857 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3858 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3859 "(menu-path \"<Main>/Edit/Search folder...\" \"<shift><control>F\")\n"
3861 "(menu-path \"<Main>/View/Expand Summary View\" \"V\")\n"
3862 "(menu-path \"<Main>/View/Expand Message View\" \"<shift>V\")\n"
3863 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
3864 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
3865 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
3866 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
3867 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
3868 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
3869 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3870 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3871 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
3872 "(menu-path \"<Main>/View/Update\" \"<control><alt>U\")\n"
3874 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3875 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3876 "(menu-path \"<Main>/Message/Compose an email message\" \"<control>M\")\n"
3877 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
3878 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><control>R\")\n"
3879 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3880 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3881 "(menu-path \"<Main>/Message/Forward\" \"<control><alt>F\")\n"
3882 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n" */
3883 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
3884 "(menu-path \"<Main>/Message/Copy...\" \"<shift><control>O\")\n"
3885 "(menu-path \"<Main>/Message/Delete\" \"<control>D\")\n"
3886 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
3887 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3888 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
3889 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
3891 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
3892 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
3893 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
3895 "(menu-path \"<Compose>/File/Close\" \"<control>W\")\n"
3896 "(menu-path \"<Compose>/Edit/Select all\" \"<control>A\")\n"
3897 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"\")\n"
3898 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"\")\n"
3899 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"\")\n"
3900 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"\")\n"
3901 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"\")";
3903 static gchar *mew_wl_menurc =
3904 "(menu-path \"<Main>/File/Empty trash\" \"<shift>D\")\n"
3905 "(menu-path \"<Main>/File/Save as...\" \"Y\")\n"
3906 "(menu-path \"<Main>/File/Print...\" \"<shift>numbersign\")\n"
3907 "(menu-path \"<Main>/File/Exit\" \"<shift>Q\")\n"
3909 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3910 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3911 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3912 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
3914 "(menu-path \"<Main>/View/Expand Summary View\" \"\")\n"
3915 "(menu-path \"<Main>/View/Expand Message View\" \"\")\n"
3916 "(menu-path \"<Main>/View/Thread view\" \"<shift>T\")\n"
3917 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
3918 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
3919 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
3920 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
3921 "(menu-path \"<Main>/View/Go to/Other folder...\" \"G\")\n"
3922 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3923 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3924 "(menu-path \"<Main>/View/Show all headers\" \"<shift>H\")\n"
3925 "(menu-path \"<Main>/View/Update\" \"<shift>S\")\n"
3927 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3928 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3929 "(menu-path \"<Main>/Message/Compose an email message\" \"W\")\n"
3930 "(menu-path \"<Main>/Message/Reply\" \"<control>R\")\n"
3931 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift>A\")\n"
3932 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3933 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3934 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
3935 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift>F\")\n" */
3936 "(menu-path \"<Main>/Message/Move...\" \"O\")\n"
3937 "(menu-path \"<Main>/Message/Copy...\" \"<shift>O\")\n"
3938 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
3939 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
3940 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3941 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
3942 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"<shift>R\")\n"
3944 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
3945 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
3946 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
3948 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
3949 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
3950 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
3951 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
3952 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
3953 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
3954 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
3956 static gchar *mutt_menurc =
3957 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
3958 "(menu-path \"<Main>/File/Save as...\" \"S\")\n"
3959 "(menu-path \"<Main>/File/Print...\" \"P\")\n"
3960 "(menu-path \"<Main>/File/Exit\" \"Q\")\n"
3962 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
3963 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
3964 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
3965 "(menu-path \"<Main>/Edit/Search messages...\" \"slash\")\n"
3967 "(menu-path \"<Main>/View/Toggle summary view\" \"V\")\n"
3968 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
3969 "(menu-path \"<Main>/View/Go to/Prev message\" \"\")\n"
3970 "(menu-path \"<Main>/View/Go to/Next message\" \"\")\n"
3971 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"\")\n"
3972 "(menu-path \"<Main>/View/Go to/Next unread message\" \"\")\n"
3973 "(menu-path \"<Main>/View/Go to/Other folder...\" \"C\")\n"
3974 "(menu-path \"<Main>/View/Open in new window\" \"<control><alt>N\")\n"
3975 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
3976 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
3977 "(menu-path \"<Main>/View/Update\" \"<control><alt>U\")\n"
3979 "(menu-path \"<Main>/Message/Get new mail\" \"<control>I\")\n"
3980 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><control>I\")\n"
3981 "(menu-path \"<Main>/Message/Compose new message\" \"M\")\n"
3982 "(menu-path \"<Main>/Message/Reply\" \"R\")\n"
3983 "(menu-path \"<Main>/Message/Reply to/all\" \"G\")\n"
3984 "(menu-path \"<Main>/Message/Reply to/sender\" \"\")\n"
3985 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
3986 "(menu-path \"<Main>/Message/Forward\" \"F\")\n"
3987 "(menu-path \"<Main>/Message/Forward as attachment\" \"\")\n"
3988 "(menu-path \"<Main>/Message/Move...\" \"<control>O\")\n"
3989 "(menu-path \"<Main>/Message/Copy...\" \"<shift>C\")\n"
3990 "(menu-path \"<Main>/Message/Delete\" \"D\")\n"
3991 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>F\")\n"
3992 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
3993 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>N\")\n"
3994 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
3996 "(menu-path \"<Main>/Tools/Address book\" \"<shift><control>A\")\n"
3997 "(menu-path \"<Main>/Tools/Execute\" \"X\")\n"
3998 "(menu-path \"<Main>/Tools/Log window\" \"<shift><control>L\")\n"
4000 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
4001 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
4002 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
4003 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
4004 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
4005 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
4006 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
4008 static gchar *old_sylpheed_menurc =
4009 "(menu-path \"<Main>/File/Empty trash\" \"\")\n"
4010 "(menu-path \"<Main>/File/Save as...\" \"\")\n"
4011 "(menu-path \"<Main>/File/Print...\" \"<alt>P\")\n"
4012 "(menu-path \"<Main>/File/Exit\" \"<alt>Q\")\n"
4014 "(menu-path \"<Main>/Edit/Copy\" \"<control>C\")\n"
4015 "(menu-path \"<Main>/Edit/Select all\" \"<control>A\")\n"
4016 "(menu-path \"<Main>/Edit/Find in current message...\" \"<control>F\")\n"
4017 "(menu-path \"<Main>/Edit/Search folder...\" \"<control>S\")\n"
4019 "(menu-path \"<Main>/View/Expand Summary View\" \"\")\n"
4020 "(menu-path \"<Main>/View/Expand Message View\" \"\")\n"
4021 "(menu-path \"<Main>/View/Thread view\" \"<control>T\")\n"
4022 "(menu-path \"<Main>/View/Go to/Prev message\" \"P\")\n"
4023 "(menu-path \"<Main>/View/Go to/Next message\" \"N\")\n"
4024 "(menu-path \"<Main>/View/Go to/Prev unread message\" \"<shift>P\")\n"
4025 "(menu-path \"<Main>/View/Go to/Next unread message\" \"<shift>N\")\n"
4026 "(menu-path \"<Main>/View/Go to/Other folder...\" \"<alt>G\")\n"
4027 "(menu-path \"<Main>/View/Open in new window\" \"<shift><control>N\")\n"
4028 "(menu-path \"<Main>/View/View source\" \"<control>U\")\n"
4029 "(menu-path \"<Main>/View/Show all headers\" \"<control>H\")\n"
4030 "(menu-path \"<Main>/View/Update\" \"<alt>U\")\n"
4032 "(menu-path \"<Main>/Message/Get new mail\" \"<alt>I\")\n"
4033 "(menu-path \"<Main>/Message/Get from all accounts\" \"<shift><alt>I\")\n"
4034 "(menu-path \"<Main>/Message/Compose an email message\" \"<alt>N\")\n"
4035 "(menu-path \"<Main>/Message/Reply\" \"<alt>R\")\n"
4036 "(menu-path \"<Main>/Message/Reply to/all\" \"<shift><alt>R\")\n"
4037 "(menu-path \"<Main>/Message/Reply to/sender\" \"<control><alt>R\")\n"
4038 "(menu-path \"<Main>/Message/Reply to/mailing list\" \"<control>L\")\n"
4039 "(menu-path \"<Main>/Message/Forward\" \"<shift><alt>F\")\n"
4040 /* "(menu-path \"<Main>/Message/Forward as attachment\" \"<shift><control>F\")\n" */
4041 "(menu-path \"<Main>/Message/Move...\" \"<alt>O\")\n"
4042 "(menu-path \"<Main>/Message/Copy...\" \"\")\n"
4043 "(menu-path \"<Main>/Message/Delete\" \"<alt>D\")\n"
4044 "(menu-path \"<Main>/Message/Mark/Mark\" \"<shift>asterisk\")\n"
4045 "(menu-path \"<Main>/Message/Mark/Unmark\" \"U\")\n"
4046 "(menu-path \"<Main>/Message/Mark/Mark as unread\" \"<shift>exclam\")\n"
4047 "(menu-path \"<Main>/Message/Mark/Mark as read\" \"\")\n"
4049 "(menu-path \"<Main>/Tools/Address book\" \"<alt>A\")\n"
4050 "(menu-path \"<Main>/Tools/Execute\" \"<alt>X\")\n"
4051 "(menu-path \"<Main>/Tools/Log window\" \"<alt>L\")\n"
4053 "(menu-path \"<Compose>/File/Close\" \"<alt>W\")\n"
4054 "(menu-path \"<Compose>/Edit/Select all\" \"\")\n"
4055 "(menu-path \"<Compose>/Edit/Advanced/Move a word backward\" \"<alt>B\")\n"
4056 "(menu-path \"<Compose>/Edit/Advanced/Move a word forward\" \"<alt>F\")\n"
4057 "(menu-path \"<Compose>/Edit/Advanced/Move to beginning of line\" \"<control>A\")\n"
4058 "(menu-path \"<Compose>/Edit/Advanced/Delete a word backward\" \"<control>W\")\n"
4059 "(menu-path \"<Compose>/Edit/Advanced/Delete a word forward\" \"<alt>D\")";
4061 text = gtk_entry_get_text(entry);
4063 if (!strcmp(text, _("Default")))
4064 rc_str = default_menurc;
4065 else if (!strcmp(text, "Mew / Wanderlust"))
4066 rc_str = mew_wl_menurc;
4067 else if (!strcmp(text, "Mutt"))
4068 rc_str = mutt_menurc;
4069 else if (!strcmp(text, _("Old Sylpheed")))
4070 rc_str = old_sylpheed_menurc;
4074 menu_factory_clear_rc(rc_str);
4075 gtk_item_factory_parse_rc_string(rc_str);
4077 gtk_widget_destroy(keybind.window);
4078 keybind.window = NULL;
4079 keybind.combo = NULL;
4082 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
4085 GtkWidget *menuitem;
4088 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4089 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4090 charset = gtk_object_get_user_data(GTK_OBJECT(menuitem));
4091 g_free(*((gchar **)pparam->data));
4092 *((gchar **)pparam->data) = g_strdup(charset);
4095 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
4097 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4100 g_return_if_fail(optmenu != NULL);
4101 g_return_if_fail(*((gchar **)pparam->data) != NULL);
4103 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
4104 (GCompareFunc)strcmp);
4106 gtk_option_menu_set_history(optmenu, index);
4108 gtk_option_menu_set_history(optmenu, 0);
4109 prefs_common_charset_set_data_from_optmenu(pparam);
4113 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
4116 GtkWidget *menuitem;
4118 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4119 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4120 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
4121 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4124 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
4126 TransferEncodingMethod method =
4127 *((TransferEncodingMethod *)pparam->data);
4128 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4131 g_return_if_fail(optmenu != NULL);
4133 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
4136 gtk_option_menu_set_history(optmenu, index);
4138 gtk_option_menu_set_history(optmenu, 0);
4139 prefs_common_encoding_set_data_from_optmenu(pparam);
4143 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
4146 GtkWidget *menuitem;
4148 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4149 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4150 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
4151 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4154 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
4156 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
4157 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4159 GtkWidget *menuitem;
4162 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
4165 gtk_option_menu_set_history(optmenu, index);
4167 gtk_option_menu_set_history(optmenu, 0);
4168 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
4171 menu = gtk_option_menu_get_menu(optmenu);
4172 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4173 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4176 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
4179 GtkWidget *menuitem;
4181 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4182 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4183 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
4184 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4187 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
4189 SendDialogMode mode = *((SendDialogMode *)pparam->data);
4190 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4192 GtkWidget *menuitem;
4195 case SEND_DIALOG_ALWAYS:
4196 gtk_option_menu_set_history(optmenu, 0);
4198 case SEND_DIALOG_NEVER:
4199 gtk_option_menu_set_history(optmenu, 1);
4205 menu = gtk_option_menu_get_menu(optmenu);
4206 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4207 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4210 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
4213 prefs_common_cancel();
4217 static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
4220 if (event && event->keyval == GDK_Escape)
4221 prefs_common_cancel();
4224 static void prefs_common_ok(void)
4226 prefs_common_apply();
4227 gtk_widget_hide(dialog.window);
4232 static void prefs_common_apply(void)
4234 gchar *entry_pixmap_theme_str;
4235 gboolean update_pixmap_theme;
4236 gchar *backup_theme_path;
4238 entry_pixmap_theme_str = gtk_entry_get_text(GTK_ENTRY(interface.entry_pixmap_theme));
4239 if (entry_pixmap_theme_str &&
4240 (strcmp(prefs_common.pixmap_theme_path, entry_pixmap_theme_str) != 0) )
4241 update_pixmap_theme = TRUE;
4243 update_pixmap_theme = FALSE;
4245 /*!< FIXME: prefs_set_data_from_dialog() clears and frees all strings,
4246 * but prefs_common.pixmap_theme_path is stored in the StockPixmapData
4247 * in stock_pixmap.c::pixmaps[].icon_path, and used when reflecting
4248 * the pixmap changes. Work around by saving the old one and freeing
4250 backup_theme_path = prefs_common.pixmap_theme_path;
4251 prefs_common.pixmap_theme_path = g_strdup(backup_theme_path);
4252 prefs_set_data_from_dialog(param);
4253 sock_set_io_timeout(prefs_common.io_timeout_secs);
4255 if (update_pixmap_theme) {
4256 main_window_reflect_prefs_all_real(TRUE);
4257 compose_reflect_prefs_pixmap_theme();
4259 main_window_reflect_prefs_all_real(FALSE);
4261 /*!< FIXME: Now it's safe to delete the backup path */
4262 g_free(backup_theme_path);
4264 prefs_common_save_config();
4266 inc_autocheck_timer_remove();
4267 inc_autocheck_timer_set();
4270 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
4273 GtkWidget *menuitem;
4275 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4276 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4277 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
4278 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4281 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
4283 NextUnreadMsgDialogShow dialog_show;
4284 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4286 GtkWidget *menuitem;
4288 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
4290 switch (dialog_show) {
4291 case NEXTUNREADMSGDIALOG_ALWAYS:
4292 gtk_option_menu_set_history(optmenu, 0);
4294 case NEXTUNREADMSGDIALOG_ASSUME_YES:
4295 gtk_option_menu_set_history(optmenu, 1);
4297 case NEXTUNREADMSGDIALOG_ASSUME_NO:
4298 gtk_option_menu_set_history(optmenu, 2);
4302 menu = gtk_option_menu_get_menu(optmenu);
4303 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4304 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
4307 static void prefs_common_cancel(void)
4309 gtk_widget_hide(dialog.window);
4314 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
4317 GtkWidget *menuitem;
4319 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
4320 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4321 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
4322 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
4325 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
4327 RecvDialogShow dialog_show;
4328 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
4330 GtkWidget *menuitem;
4332 dialog_show = *((RecvDialogShow *)pparam->data);
4334 switch (dialog_show) {
4335 case RECVDIALOG_ALWAYS:
4336 gtk_option_menu_set_history(optmenu, 0);
4338 case RECVDIALOG_WINDOW_ACTIVE:
4339 gtk_option_menu_set_history(optmenu, 1);
4341 case RECVDIALOG_NEVER:
4342 gtk_option_menu_set_history(optmenu, 2);
4347 menu = gtk_option_menu_get_menu(optmenu);
4348 menuitem = gtk_menu_get_active(GTK_MENU(menu));
4349 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));