2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2004 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"
60 PrefsCommon prefs_common;
62 static PrefsDialog dialog;
64 static struct Receive {
65 GtkWidget *checkbtn_incext;
66 GtkWidget *entry_incext;
67 GtkWidget *button_incext;
69 GtkWidget *checkbtn_autochk;
70 GtkWidget *spinbtn_autochk;
71 GtkObject *spinbtn_autochk_adj;
73 GtkWidget *checkbtn_chkonstartup;
74 GtkWidget *checkbtn_scan_after_inc;
77 GtkWidget *checkbtn_newmail_auto;
78 GtkWidget *checkbtn_newmail_manu;
79 GtkWidget *entry_newmail_notify_cmd;
80 GtkWidget *hbox_newmail_notify;
81 GtkWidget *optmenu_recvdialog;
82 GtkWidget *checkbtn_no_recv_err_panel;
83 GtkWidget *checkbtn_close_recv_dialog;
87 GtkWidget *checkbtn_savemsg;
88 GtkWidget *checkbtn_queuemsg;
89 GtkWidget *optmenu_senddialog;
91 GtkWidget *optmenu_charset;
92 GtkWidget *optmenu_encoding_method;
95 static struct Compose {
96 GtkWidget *entry_fw_quotemark;
97 GtkWidget *text_fw_quotefmt;
99 GtkWidget *checkbtn_autoextedit;
100 GtkWidget *spinbtn_undolevel;
101 GtkObject *spinbtn_undolevel_adj;
102 GtkWidget *spinbtn_linewrap;
103 GtkObject *spinbtn_linewrap_adj;
104 GtkWidget *checkbtn_wrapquote;
105 GtkWidget *checkbtn_autowrap;
106 GtkWidget *checkbtn_wrapatsend;
108 GtkWidget *checkbtn_reply_account_autosel;
109 GtkWidget *checkbtn_forward_account_autosel;
110 GtkWidget *checkbtn_reedit_account_autosel;
111 GtkWidget *checkbtn_quote;
112 GtkWidget *checkbtn_default_reply_list;
113 GtkWidget *checkbtn_forward_as_attachment;
114 GtkWidget *checkbtn_redirect_keep_from;
115 GtkWidget *checkbtn_smart_wrapping;
116 GtkWidget *checkbtn_block_cursor;
117 GtkWidget *checkbtn_reply_with_quote;
119 GtkWidget *checkbtn_autosave;
120 GtkWidget *entry_autosave_length;
123 static struct Quote {
124 GtkWidget *entry_quotemark;
125 GtkWidget *text_quotefmt;
127 GtkWidget *entry_fw_quotemark;
128 GtkWidget *text_fw_quotefmt;
130 GtkWidget *entry_quote_chars;
133 static struct Display {
134 GtkWidget *chkbtn_folder_unread;
135 GtkWidget *entry_ng_abbrev_len;
136 GtkWidget *spinbtn_ng_abbrev_len;
137 GtkObject *spinbtn_ng_abbrev_len_adj;
139 GtkWidget *chkbtn_transhdr;
141 GtkWidget *chkbtn_swapfrom;
142 GtkWidget *chkbtn_useaddrbook;
143 GtkWidget *chkbtn_threadsubj;
144 GtkWidget *entry_datefmt;
147 static struct Message {
148 GtkWidget *chkbtn_enablecol;
149 GtkWidget *button_edit_col;
150 GtkWidget *chkbtn_mbalnum;
151 GtkWidget *chkbtn_disphdrpane;
152 GtkWidget *chkbtn_disphdr;
153 GtkWidget *spinbtn_linespc;
154 GtkObject *spinbtn_linespc_adj;
155 GtkWidget *chkbtn_headspc;
157 GtkWidget *chkbtn_smoothscroll;
158 GtkWidget *spinbtn_scrollstep;
159 GtkObject *spinbtn_scrollstep_adj;
160 GtkWidget *chkbtn_halfpage;
162 GtkWidget *chkbtn_attach_desc;
166 static struct Privacy {
167 GtkWidget *checkbtn_auto_check_signatures;
168 GtkWidget *checkbtn_store_passphrase;
169 GtkWidget *spinbtn_store_passphrase;
170 GtkObject *spinbtn_store_passphrase_adj;
171 GtkWidget *checkbtn_passphrase_grab;
172 GtkWidget *checkbtn_gpg_warning;
176 static struct Interface {
177 /* GtkWidget *checkbtn_emacs; */
178 GtkWidget *checkbtn_always_show_msg;
179 GtkWidget *checkbtn_openunread;
180 GtkWidget *checkbtn_mark_as_read_on_newwin;
181 GtkWidget *checkbtn_openinbox;
182 GtkWidget *checkbtn_immedexec;
183 GtkWidget *optmenu_nextunreadmsgdialog;
186 static struct Other {
187 GtkWidget *checkbtn_addaddrbyclick;
188 GtkWidget *checkbtn_confonexit;
189 GtkWidget *checkbtn_cleanonexit;
190 GtkWidget *checkbtn_askonclean;
191 GtkWidget *checkbtn_warnqueued;
192 GtkWidget *checkbtn_cliplog;
193 GtkWidget *loglength_entry;
196 GtkWidget *checkbtn_ssl_ask_unknown_valid;
200 GtkWidget *spinbtn_iotimeout;
201 GtkObject *spinbtn_iotimeout_adj;
204 static struct MessageColorButtons {
205 GtkWidget *quote_level1_btn;
206 GtkWidget *quote_level2_btn;
207 GtkWidget *quote_level3_btn;
209 GtkWidget *tgt_folder_btn;
210 GtkWidget *signature_btn;
213 static struct KeybindDialog {
218 static GtkWidget *quote_color_win;
219 static GtkWidget *color_dialog;
221 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
222 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
223 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
224 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
225 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
226 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
227 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
229 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
230 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
231 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
232 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
233 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
234 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
237 parameter name, default value, pointer to the prefs variable, data type,
238 pointer to the widget pointer,
239 pointer to the function for data setting,
240 pointer to the function for widget setting
243 static PrefParam param[] = {
245 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
246 &receive.checkbtn_incext,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
249 &receive.entry_incext,
250 prefs_set_data_from_entry, prefs_set_entry},
252 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
253 &receive.checkbtn_autochk,
254 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
256 &receive.spinbtn_autochk,
257 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
258 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
259 &receive.checkbtn_chkonstartup,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
262 P_BOOL, &receive.checkbtn_scan_after_inc,
263 prefs_set_data_from_toggle, prefs_set_toggle},
264 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
265 P_BOOL, &receive.checkbtn_newmail_manu,
266 prefs_set_data_from_toggle, prefs_set_toggle},
267 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
268 P_BOOL, &receive.checkbtn_newmail_auto,
269 prefs_set_data_from_toggle, prefs_set_toggle},
270 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
271 &receive.entry_newmail_notify_cmd,
272 prefs_set_data_from_entry, prefs_set_entry},
273 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
274 &receive.optmenu_recvdialog,
275 prefs_common_recv_dialog_set_data_from_optmenu,
276 prefs_common_recv_dialog_set_optmenu},
277 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
278 P_BOOL, &receive.checkbtn_no_recv_err_panel,
279 prefs_set_data_from_toggle, prefs_set_toggle},
280 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
281 P_BOOL, &receive.checkbtn_close_recv_dialog,
282 prefs_set_data_from_toggle, prefs_set_toggle},
285 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
286 &p_send.checkbtn_savemsg,
287 prefs_set_data_from_toggle, prefs_set_toggle},
288 {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL,
289 &p_send.checkbtn_queuemsg,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
292 &p_send.optmenu_senddialog,
293 prefs_common_send_dialog_set_data_from_optmenu,
294 prefs_common_send_dialog_set_optmenu},
296 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
297 &p_send.optmenu_charset,
298 prefs_common_charset_set_data_from_optmenu,
299 prefs_common_charset_set_optmenu},
300 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
301 &p_send.optmenu_encoding_method,
302 prefs_common_encoding_set_data_from_optmenu,
303 prefs_common_encoding_set_optmenu},
305 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
306 P_BOOL, NULL, NULL, NULL},
309 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
310 &compose.checkbtn_autoextedit,
311 prefs_set_data_from_toggle, prefs_set_toggle},
312 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
313 P_BOOL, &compose.checkbtn_forward_as_attachment,
314 prefs_set_data_from_toggle, prefs_set_toggle},
315 {"redirect_keep_from", "FALSE",
316 &prefs_common.redirect_keep_from, P_BOOL,
317 &compose.checkbtn_redirect_keep_from,
318 prefs_set_data_from_toggle, prefs_set_toggle},
319 {"undo_level", "50", &prefs_common.undolevels, P_INT,
320 &compose.spinbtn_undolevel,
321 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
322 {"block_cursor", "FALSE", &prefs_common.block_cursor,
323 P_BOOL, &compose.checkbtn_block_cursor,
324 prefs_set_data_from_toggle, prefs_set_toggle},
326 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
327 &compose.spinbtn_linewrap,
328 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
329 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
330 &compose.checkbtn_wrapquote,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
333 &compose.checkbtn_autowrap,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"linewrap_before_sending", "FALSE",
336 &prefs_common.linewrap_at_send, P_BOOL,
337 &compose.checkbtn_wrapatsend,
338 prefs_set_data_from_toggle, prefs_set_toggle},
339 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping,
340 P_BOOL, &compose.checkbtn_smart_wrapping,
341 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"autosave", "FALSE", &prefs_common.autosave,
343 P_BOOL, &compose.checkbtn_autosave,
344 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"autosave_length", "50", &prefs_common.autosave_length,
346 P_INT, &compose.entry_autosave_length,
347 prefs_set_data_from_entry, prefs_set_entry},
349 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
351 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
353 {"dictionary", "", &prefs_common.dictionary, P_STRING,
355 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
357 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
359 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
361 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
364 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
365 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
367 /* Account autoselection */
368 {"reply_account_autoselect", "TRUE",
369 &prefs_common.reply_account_autosel, P_BOOL,
370 &compose.checkbtn_reply_account_autosel,
371 prefs_set_data_from_toggle, prefs_set_toggle},
372 {"forward_account_autoselect", "TRUE",
373 &prefs_common.forward_account_autosel, P_BOOL,
374 &compose.checkbtn_forward_account_autosel,
375 prefs_set_data_from_toggle, prefs_set_toggle},
376 {"reedit_account_autoselect", "TRUE",
377 &prefs_common.reedit_account_autosel, P_BOOL,
378 &compose.checkbtn_reedit_account_autosel,
379 prefs_set_data_from_toggle, prefs_set_toggle},
381 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
382 &compose.checkbtn_default_reply_list,
383 prefs_set_data_from_toggle, prefs_set_toggle},
385 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
389 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
390 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
391 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
392 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
393 prefs_set_data_from_text, prefs_set_text},
395 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
396 "e.entry_fw_quotemark,
397 prefs_set_data_from_entry, prefs_set_entry},
398 {"forward_quote_format",
399 "\\n\\nBegin forwarded message:\\n\\n"
400 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
401 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
402 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
403 prefs_set_data_from_text, prefs_set_text},
404 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
405 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
408 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
409 {"widget_font", NULL,
410 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
411 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
412 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
413 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
414 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
415 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
416 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
417 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
418 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
421 {"widget_font_gtk2", NULL,
422 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
423 {"message_font_gtk2", "fixed 9",
424 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
425 {"small_font_gtk2", "Sans 9",
426 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
427 {"bold_font_gtk2", "Sans Bold 9",
428 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
429 {"normal_font_gtk2", "Sans 9",
430 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
432 {"display_folder_unread_num", "TRUE",
433 &prefs_common.display_folder_unread, P_BOOL,
434 &display.chkbtn_folder_unread,
435 prefs_set_data_from_toggle, prefs_set_toggle},
436 {"newsgroup_abbrev_len", "16",
437 &prefs_common.ng_abbrev_len, P_INT,
438 &display.spinbtn_ng_abbrev_len,
439 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
441 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
442 &display.chkbtn_transhdr,
443 prefs_set_data_from_toggle, prefs_set_toggle},
445 /* Display: Summary View */
446 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
447 &display.chkbtn_swapfrom,
448 prefs_set_data_from_toggle, prefs_set_toggle},
449 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
450 &display.chkbtn_useaddrbook,
451 prefs_set_data_from_toggle, prefs_set_toggle},
452 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
453 &display.chkbtn_threadsubj,
454 prefs_set_data_from_toggle, prefs_set_toggle},
455 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
456 P_STRING, &display.entry_datefmt,
457 prefs_set_data_from_entry, prefs_set_entry},
459 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
461 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
463 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
464 P_INT, NULL, NULL, NULL },
466 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
468 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
470 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
472 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
475 {"folderview_vscrollbar_policy", "0",
476 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
479 {"summary_col_show_mark", "TRUE",
480 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
481 {"summary_col_show_unread", "TRUE",
482 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
483 {"summary_col_show_mime", "TRUE",
484 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
485 {"summary_col_show_subject", "TRUE",
486 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
487 {"summary_col_show_from", "TRUE",
488 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
489 {"summary_col_show_date", "TRUE",
490 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
491 {"summary_col_show_size", "TRUE",
492 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
493 {"summary_col_show_number", "FALSE",
494 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
495 {"summary_col_show_score", "FALSE",
496 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
497 {"summary_col_show_locked", "FALSE",
498 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
500 {"summary_col_pos_mark", "0",
501 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
502 {"summary_col_pos_unread", "1",
503 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
504 {"summary_col_pos_mime", "2",
505 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
506 {"summary_col_pos_subject", "3",
507 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
508 {"summary_col_pos_from", "4",
509 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
510 {"summary_col_pos_date", "5",
511 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
512 {"summary_col_pos_size", "6",
513 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
514 {"summary_col_pos_number", "7",
515 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
516 {"summary_col_pos_score", "8",
517 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
518 {"summary_col_pos_locked", "9",
519 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
521 {"summary_col_size_mark", "10",
522 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
523 {"summary_col_size_unread", "13",
524 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
525 {"summary_col_size_mime", "10",
526 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
527 {"summary_col_size_subject", "200",
528 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
529 {"summary_col_size_from", "120",
530 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
531 {"summary_col_size_date", "118",
532 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
533 {"summary_col_size_size", "45",
534 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
535 {"summary_col_size_number", "40",
536 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
537 {"summary_col_size_score", "40",
538 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
539 {"summary_col_size_locked", "13",
540 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
543 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
545 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
547 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
549 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
551 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
554 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
556 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
558 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
560 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
563 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
565 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
568 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
570 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
572 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
574 {"messageview_height", "540", &prefs_common.msgview_height, P_INT,
576 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
579 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
581 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
583 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
585 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
587 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
589 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
591 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
593 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
595 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
597 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
599 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
601 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
603 {"compose_width", "600", &prefs_common.compose_width, P_INT,
605 {"compose_height", "560", &prefs_common.compose_height, P_INT,
607 {"compose_x", "0", &prefs_common.compose_x, P_INT,
609 {"compose_y", "0", &prefs_common.compose_y, P_INT,
612 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
613 &message.chkbtn_enablecol,
614 prefs_set_data_from_toggle, prefs_set_toggle},
616 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
618 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
620 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
622 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
624 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
626 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
628 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
629 P_BOOL, NULL, NULL, NULL},
631 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
632 &message.chkbtn_mbalnum,
633 prefs_set_data_from_toggle, prefs_set_toggle},
634 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
635 P_BOOL, &message.chkbtn_disphdrpane,
636 prefs_set_data_from_toggle, prefs_set_toggle},
637 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
638 &message.chkbtn_disphdr,
639 prefs_set_data_from_toggle, prefs_set_toggle},
640 {"line_space", "2", &prefs_common.line_space, P_INT,
641 &message.spinbtn_linespc,
642 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
643 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
644 &message.chkbtn_headspc,
645 prefs_set_data_from_toggle, prefs_set_toggle},
647 {"enable_smooth_scroll", "FALSE",
648 &prefs_common.enable_smooth_scroll, P_BOOL,
649 &message.chkbtn_smoothscroll,
650 prefs_set_data_from_toggle, prefs_set_toggle},
651 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
652 &message.spinbtn_scrollstep,
653 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
654 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
655 &message.chkbtn_halfpage,
656 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
661 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
662 &message.chkbtn_attach_desc,
663 prefs_set_data_from_toggle, prefs_set_toggle},
666 {"mime_image_viewer", "display '%s'",
667 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
668 {"mime_audio_player", "play '%s'",
669 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
670 {"mime_open_command", "gedit '%s'",
671 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
675 {"auto_check_signatures", "TRUE",
676 &prefs_common.auto_check_signatures, P_BOOL,
677 &privacy.checkbtn_auto_check_signatures,
678 prefs_set_data_from_toggle, prefs_set_toggle},
679 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
680 &privacy.checkbtn_store_passphrase,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"store_passphrase_timeout", "0",
683 &prefs_common.store_passphrase_timeout, P_INT,
684 &privacy.spinbtn_store_passphrase,
685 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
687 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
688 &privacy.checkbtn_passphrase_grab,
689 prefs_set_data_from_toggle, prefs_set_toggle},
690 #endif /* __MINGW32__ */
691 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
692 &privacy.checkbtn_gpg_warning,
693 prefs_set_data_from_toggle, prefs_set_toggle},
694 #endif /* USE_GPGME */
697 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
699 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
702 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
703 NULL, NULL, NULL}, */
704 {"always_show_message_when_selected", "FALSE",
705 &prefs_common.always_show_msg,
706 P_BOOL, &interface.checkbtn_always_show_msg,
707 prefs_set_data_from_toggle, prefs_set_toggle},
708 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
709 P_BOOL, &interface.checkbtn_openunread,
710 prefs_set_data_from_toggle, prefs_set_toggle},
711 {"mark_as_read_on_new_window", "FALSE",
712 &prefs_common.mark_as_read_on_new_window,
713 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
714 prefs_set_data_from_toggle, prefs_set_toggle},
715 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
716 P_BOOL, &interface.checkbtn_openinbox,
717 prefs_set_data_from_toggle, prefs_set_toggle},
718 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
719 &interface.checkbtn_immedexec,
720 prefs_set_data_from_toggle, prefs_set_toggle},
721 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
722 &interface.optmenu_nextunreadmsgdialog,
723 prefs_nextunreadmsgdialog_set_data_from_optmenu,
724 prefs_nextunreadmsgdialog_set_optmenu},
726 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
727 &prefs_common.pixmap_theme_path, P_STRING,
730 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
734 {"uri_open_command", DEFAULT_BROWSER_CMD,
735 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
736 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
738 {"ext_editor_command", "gedit %s",
739 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
741 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
742 P_BOOL, &other.checkbtn_addaddrbyclick,
743 prefs_set_data_from_toggle, prefs_set_toggle},
745 {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL,
746 &other.checkbtn_confonexit,
747 prefs_set_data_from_toggle, prefs_set_toggle},
748 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
749 &other.checkbtn_cleanonexit,
750 prefs_set_data_from_toggle, prefs_set_toggle},
751 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
752 &other.checkbtn_askonclean,
753 prefs_set_data_from_toggle, prefs_set_toggle},
754 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
755 P_BOOL, &other.checkbtn_warnqueued,
756 prefs_set_data_from_toggle, prefs_set_toggle},
759 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
760 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
761 prefs_set_data_from_toggle, prefs_set_toggle},
764 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
766 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
769 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
770 P_INT, &other.spinbtn_iotimeout,
771 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
772 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
774 {"important_score", "1", &prefs_common.important_score, P_INT,
776 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
777 &other.checkbtn_cliplog,
778 prefs_set_data_from_toggle, prefs_set_toggle},
779 {"log_length", "500", &prefs_common.loglength, P_INT,
780 &other.loglength_entry,
781 prefs_set_data_from_entry, prefs_set_entry},
783 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
785 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
788 {"color_new", "179", &prefs_common.color_new, P_COLOR,
791 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
794 /* widget creating functions */
795 static void prefs_common_create (void);
796 static void prefs_receive_create (void);
797 static void prefs_send_create (void);
798 static void prefs_compose_create (void);
799 static void prefs_quote_create (void);
800 static void prefs_display_create (void);
801 static void prefs_message_create (void);
803 static void prefs_privacy_create (void);
805 static void prefs_interface_create (void);
806 static void prefs_other_create (void);
808 static void date_format_ok_btn_clicked (GtkButton *button,
810 static void date_format_cancel_btn_clicked (GtkButton *button,
812 static gboolean date_format_key_pressed (GtkWidget *keywidget,
815 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
818 static void date_format_entry_on_change (GtkEditable *editable,
820 static void date_format_select_row (GtkWidget *date_format_list,
823 GdkEventButton *event,
824 GtkWidget *date_format);
825 static GtkWidget *date_format_create (GtkButton *button,
828 static void prefs_quote_colors_dialog (void);
829 static void prefs_quote_colors_dialog_create (void);
830 static gboolean prefs_quote_colors_key_pressed (GtkWidget *widget,
833 static void quote_color_set_dialog (GtkWidget *widget,
835 static void quote_colors_set_dialog_ok (GtkWidget *widget,
837 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
839 static gboolean quote_colors_set_dialog_key_pressed (GtkWidget *widget,
842 static void set_button_bg_color (GtkWidget *widget,
844 static void prefs_enable_message_color_toggled (void);
845 static void prefs_recycle_colors_toggled (GtkWidget *widget);
847 static void prefs_keybind_select (void);
848 static gint prefs_keybind_deleted (GtkWidget *widget,
851 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
854 static void prefs_keybind_cancel (void);
855 static void prefs_keybind_apply_clicked (GtkWidget *widget);
857 static gint prefs_common_deleted (GtkWidget *widget,
860 static gboolean prefs_common_key_pressed(GtkWidget *widget,
863 static void prefs_common_ok (void);
864 static void prefs_common_apply (void);
865 static void prefs_common_cancel (void);
867 void prefs_common_init(void)
869 prefs_common.disphdr_list = NULL;
872 PrefsCommon *prefs_common_get(void)
874 return &prefs_common;
877 void prefs_common_read_config(void)
881 gchar buf[PREFSBUFSIZE];
883 prefs_read_config(param, "Common", COMMON_RC);
885 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
887 if ((fp = fopen(path, "rb")) == NULL) {
888 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
893 while (fgets(buf, sizeof(buf), fp) != NULL) {
895 if (buf[0] == '\0') continue;
896 prefs_common.mime_open_cmd_history =
897 add_history(prefs_common.mime_open_cmd_history, buf);
901 prefs_common.mime_open_cmd_history =
902 g_list_reverse(prefs_common.mime_open_cmd_history);
905 void prefs_common_save_config(void)
911 prefs_save_config(param, "Common", COMMON_RC);
913 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMAND_HISTORY,
915 if ((fp = fopen(path, "wb")) == NULL) {
916 FILE_OP_ERROR(path, "fopen");
921 for (cur = prefs_common.mime_open_cmd_history;
922 cur != NULL; cur = cur->next) {
923 fputs((gchar *)cur->data, fp);
931 void prefs_common_open(void)
933 if (prefs_rc_is_readonly(COMMON_RC))
938 if (!dialog.window) {
939 prefs_common_create();
942 manage_window_set_transient(GTK_WINDOW(dialog.window));
943 gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
944 gtk_widget_grab_focus(dialog.ok_btn);
946 prefs_set_dialog(param);
948 gtk_widget_show(dialog.window);
951 static void prefs_common_create(void)
955 debug_print("Creating common preferences window...\n");
957 prefs_dialog_create(&dialog);
958 gtk_window_set_title (GTK_WINDOW(dialog.window),
959 _("Common Preferences"));
960 g_signal_connect (G_OBJECT(dialog.window), "delete_event",
961 G_CALLBACK(prefs_common_deleted), NULL);
962 g_signal_connect (G_OBJECT(dialog.window), "key_press_event",
963 G_CALLBACK(prefs_common_key_pressed), NULL);
964 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
966 g_signal_connect (G_OBJECT(dialog.ok_btn), "clicked",
967 G_CALLBACK(prefs_common_ok), NULL);
968 g_signal_connect (G_OBJECT(dialog.apply_btn), "clicked",
969 G_CALLBACK(prefs_common_apply), NULL);
970 gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked",
971 GTK_SIGNAL_FUNC(prefs_common_cancel),
972 GTK_OBJECT(dialog.window));
974 /* create all widgets on notebook */
975 prefs_receive_create();
976 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
978 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
979 prefs_compose_create();
980 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
981 prefs_quote_create();
982 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
983 prefs_display_create();
984 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
985 prefs_message_create();
986 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
988 prefs_privacy_create();
989 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
991 prefs_interface_create();
992 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
993 prefs_other_create();
994 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
996 gtk_widget_show_all(dialog.window);
999 static void prefs_receive_create(void)
1003 GtkWidget *frame_incext;
1004 GtkWidget *checkbtn_incext;
1006 GtkWidget *label_incext;
1007 GtkWidget *entry_incext;
1008 /* GtkWidget *button_incext; */
1010 GtkWidget *hbox_autochk;
1011 GtkWidget *checkbtn_autochk;
1012 GtkWidget *label_autochk1;
1013 GtkObject *spinbtn_autochk_adj;
1014 GtkWidget *spinbtn_autochk;
1015 GtkWidget *label_autochk2;
1016 GtkWidget *checkbtn_chkonstartup;
1017 GtkWidget *checkbtn_scan_after_inc;
1020 GtkWidget *frame_newmail;
1021 GtkWidget *hbox_newmail_notify;
1022 GtkWidget *checkbtn_newmail_auto;
1023 GtkWidget *checkbtn_newmail_manu;
1024 GtkWidget *entry_newmail_notify_cmd;
1025 GtkWidget *label_newmail_notify_cmd;
1027 GtkWidget *hbox_recvdialog;
1028 GtkWidget *label_recvdialog;
1030 GtkWidget *menuitem;
1031 GtkWidget *optmenu_recvdialog;
1032 GtkWidget *checkbtn_no_recv_err_panel;
1033 GtkWidget *checkbtn_close_recv_dialog;
1035 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1036 gtk_widget_show (vbox1);
1037 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1038 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1040 PACK_FRAME(vbox1, frame_incext, _("External program"));
1042 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1043 gtk_widget_show (vbox2);
1044 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1045 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1047 /* Use of external incorporation program */
1048 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1049 _("Use external program for incorporation"));
1051 hbox = gtk_hbox_new (FALSE, 8);
1052 gtk_widget_show (hbox);
1053 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1054 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1056 label_incext = gtk_label_new (_("Command"));
1057 gtk_widget_show (label_incext);
1058 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1060 entry_incext = gtk_entry_new ();
1061 gtk_widget_show (entry_incext);
1062 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1065 button_incext = gtk_button_new_with_label ("... ");
1066 gtk_widget_show (button_incext);
1067 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1070 vbox2 = gtk_vbox_new (FALSE, 0);
1071 gtk_widget_show (vbox2);
1072 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1075 hbox_autochk = gtk_hbox_new (FALSE, 8);
1076 gtk_widget_show (hbox_autochk);
1077 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1079 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1080 _("Auto-check new mail"));
1082 label_autochk1 = gtk_label_new (_("every"));
1083 gtk_widget_show (label_autochk1);
1084 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1086 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1087 spinbtn_autochk = gtk_spin_button_new
1088 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1089 gtk_widget_show (spinbtn_autochk);
1090 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1091 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1092 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1094 label_autochk2 = gtk_label_new (_("minute(s)"));
1095 gtk_widget_show (label_autochk2);
1096 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1098 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1099 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1100 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1102 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1103 _("Check new mail on startup"));
1104 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1105 _("Update all local folders after incorporation"));
1108 /* receive dialog */
1109 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1110 gtk_widget_show (hbox_recvdialog);
1111 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1113 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1114 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1115 gtk_widget_show (label_recvdialog);
1116 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1118 optmenu_recvdialog = gtk_option_menu_new ();
1119 gtk_widget_show (optmenu_recvdialog);
1120 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1122 menu = gtk_menu_new ();
1123 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1124 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1125 RECV_DIALOG_MANUAL);
1126 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1128 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1130 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1131 _("Don't popup error dialog on receive error"));
1133 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1134 _("Close receive dialog when finished"));
1136 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1138 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1139 gtk_widget_show (vbox2);
1140 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1141 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1143 hbox = gtk_hbox_new (TRUE, 8);
1144 gtk_widget_show (hbox);
1145 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1146 _("after autochecking"));
1147 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1148 _("after manual checking"));
1149 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1150 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1151 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1153 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1154 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1157 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1158 gtk_widget_show (hbox);
1159 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1162 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1163 "(use %d as number of new "
1165 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1167 gtk_widget_show (label_newmail_notify_cmd);
1168 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1169 label_newmail_notify_cmd, FALSE, FALSE, 0);
1171 entry_newmail_notify_cmd = gtk_entry_new ();
1172 gtk_widget_show (entry_newmail_notify_cmd);
1173 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1174 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1176 gtk_widget_set_sensitive(hbox_newmail_notify,
1177 prefs_common.newmail_notify_auto ||
1178 prefs_common.newmail_notify_manu);
1180 receive.checkbtn_incext = checkbtn_incext;
1181 receive.entry_incext = entry_incext;
1182 /* receive.button_incext = button_incext; */
1184 receive.checkbtn_autochk = checkbtn_autochk;
1185 receive.spinbtn_autochk = spinbtn_autochk;
1186 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1188 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1189 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1192 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1193 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1194 receive.hbox_newmail_notify = hbox_newmail_notify;
1195 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1196 receive.optmenu_recvdialog = optmenu_recvdialog;
1197 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1198 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1201 static void prefs_send_create(void)
1206 GtkWidget *checkbtn_savemsg;
1207 GtkWidget *checkbtn_queuemsg;
1208 GtkWidget *label_outcharset;
1209 GtkWidget *optmenu_charset;
1210 GtkWidget *optmenu_menu;
1211 GtkWidget *menuitem;
1212 GtkTooltips *charset_tooltip;
1213 GtkWidget *optmenu_encoding;
1214 GtkWidget *label_encoding;
1215 GtkTooltips *encoding_tooltip;
1216 GtkWidget *label_senddialog;
1218 GtkWidget *optmenu_senddialog;
1219 GtkWidget *hbox_senddialog;
1221 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1222 gtk_widget_show (vbox1);
1223 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1224 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1226 vbox2 = gtk_vbox_new (FALSE, 0);
1227 gtk_widget_show (vbox2);
1228 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1230 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1231 _("Save sent messages to Sent folder"));
1232 PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg,
1233 _("Queue messages that fail to send"));
1235 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1236 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1238 label_senddialog = gtk_label_new (_("Show send dialog"));
1239 gtk_widget_show (label_senddialog);
1240 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1242 optmenu_senddialog = gtk_option_menu_new ();
1243 gtk_widget_show (optmenu_senddialog);
1244 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1246 menu = gtk_menu_new ();
1247 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1248 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1250 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1252 hbox1 = gtk_hbox_new (FALSE, 8);
1253 gtk_widget_show (hbox1);
1254 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1256 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1257 gtk_widget_show (label_outcharset);
1258 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1260 charset_tooltip = gtk_tooltips_new();
1262 optmenu_charset = gtk_option_menu_new ();
1263 gtk_widget_show (optmenu_charset);
1264 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1265 _("If `Automatic' is selected, the optimal encoding"
1266 " for the current locale will be used"),
1268 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1270 optmenu_menu = gtk_menu_new ();
1272 #define SET_MENUITEM(str, data) \
1274 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1277 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1278 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1280 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1282 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1283 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1284 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1285 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1286 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1287 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1288 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1290 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1292 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1294 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1295 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1297 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1299 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1300 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1302 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1303 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1305 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1306 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1308 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1309 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1310 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1312 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1315 hbox1 = gtk_hbox_new (FALSE, 8);
1316 gtk_widget_show (hbox1);
1317 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1319 hbox1 = gtk_hbox_new (FALSE, 8);
1320 gtk_widget_show (hbox1);
1321 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1323 label_encoding = gtk_label_new (_("Transfer encoding"));
1324 gtk_widget_show (label_encoding);
1325 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1327 encoding_tooltip = gtk_tooltips_new();
1329 optmenu_encoding = gtk_option_menu_new ();
1330 gtk_widget_show (optmenu_encoding);
1331 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1332 _("Specify Content-Transfer-Encoding used when"
1333 " message body contains non-ASCII characters"),
1335 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1337 optmenu_menu = gtk_menu_new ();
1339 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1340 SET_MENUITEM("base64", CTE_BASE64);
1341 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1342 SET_MENUITEM("8bit", CTE_8BIT);
1344 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1347 hbox1 = gtk_hbox_new (FALSE, 8);
1348 gtk_widget_show (hbox1);
1349 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1351 p_send.checkbtn_savemsg = checkbtn_savemsg;
1352 p_send.checkbtn_queuemsg = checkbtn_queuemsg;
1353 p_send.optmenu_senddialog = optmenu_senddialog;
1355 p_send.optmenu_charset = optmenu_charset;
1356 p_send.optmenu_encoding_method = optmenu_encoding;
1359 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1363 toggled = gtk_toggle_button_get_active
1364 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1365 gtk_toggle_button_get_active
1366 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1367 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1370 static void prefs_compose_create(void)
1375 GtkWidget *checkbtn_autoextedit;
1377 GtkWidget *frame_autosel;
1378 GtkWidget *hbox_autosel;
1379 GtkWidget *checkbtn_reply_account_autosel;
1380 GtkWidget *checkbtn_forward_account_autosel;
1381 GtkWidget *checkbtn_reedit_account_autosel;
1383 GtkWidget *hbox_undolevel;
1384 GtkWidget *label_undolevel;
1385 GtkObject *spinbtn_undolevel_adj;
1386 GtkWidget *spinbtn_undolevel;
1388 GtkWidget *vbox_linewrap;
1393 GtkWidget *label_linewrap;
1394 GtkObject *spinbtn_linewrap_adj;
1395 GtkWidget *spinbtn_linewrap;
1396 GtkWidget *checkbtn_wrapquote;
1397 GtkWidget *checkbtn_autowrap;
1398 GtkWidget *checkbtn_wrapatsend;
1400 GtkWidget *checkbtn_default_reply_list;
1402 GtkWidget *checkbtn_forward_as_attachment;
1403 GtkWidget *checkbtn_redirect_keep_from;
1404 GtkWidget *checkbtn_smart_wrapping;
1405 GtkWidget *checkbtn_block_cursor;
1406 GtkWidget *frame_msgwrap;
1408 GtkWidget *hbox_autosave;
1409 GtkWidget *checkbtn_autosave;
1410 GtkWidget *entry_autosave_length;
1411 GtkWidget *label_autosave_length;
1413 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1414 gtk_widget_show (vbox1);
1415 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1416 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1418 /* Account autoselection */
1419 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1421 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1422 gtk_widget_show (hbox_autosel);
1423 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1424 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1426 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1427 _("when replying"));
1428 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1429 _("when forwarding"));
1430 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1431 _("when re-editing"));
1433 vbox2 = gtk_vbox_new (FALSE, 0);
1434 gtk_widget_show (vbox2);
1435 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1437 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1438 _("Reply button invokes mailing list reply"));
1440 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1441 _("Automatically launch the external editor"));
1443 hbox5 = gtk_hbox_new (FALSE, 8);
1444 gtk_widget_show (hbox5);
1445 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1447 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1448 _("Forward as attachment"));
1450 PACK_CHECK_BUTTON (hbox5, checkbtn_block_cursor,
1453 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1454 _("Keep the original 'From' header when redirecting"));
1457 hbox_autosave = gtk_hbox_new (FALSE, 8);
1458 gtk_widget_show (hbox_autosave);
1459 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1461 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1462 _("Autosave to Drafts folder every "));
1464 entry_autosave_length = gtk_entry_new();
1465 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1466 gtk_widget_show (entry_autosave_length);
1467 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1469 label_autosave_length = gtk_label_new(_("characters"));
1470 gtk_widget_show (label_autosave_length);
1471 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1473 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1474 gtk_widget_show (hbox_undolevel);
1475 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1477 label_undolevel = gtk_label_new (_("Undo level"));
1478 gtk_widget_show (label_undolevel);
1479 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1481 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1482 spinbtn_undolevel = gtk_spin_button_new
1483 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1484 gtk_widget_show (spinbtn_undolevel);
1485 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1486 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1487 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1490 PACK_FRAME(vbox1, frame_msgwrap, _("Message wrapping"));
1492 vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW);
1493 gtk_widget_show (vbox_linewrap);
1494 gtk_container_add (GTK_CONTAINER (frame_msgwrap), vbox_linewrap);
1495 gtk_container_set_border_width (GTK_CONTAINER (vbox_linewrap), 8);
1497 hbox3 = gtk_hbox_new (FALSE, 8);
1498 gtk_widget_show (hbox3);
1499 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0);
1502 label_linewrap = gtk_label_new (_("Wrap messages at"));
1503 gtk_widget_show (label_linewrap);
1504 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1506 spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10);
1507 spinbtn_linewrap = gtk_spin_button_new
1508 (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0);
1509 gtk_widget_show (spinbtn_linewrap);
1510 gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0);
1511 gtk_widget_set_size_request (spinbtn_linewrap, 64, -1);
1512 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE);
1514 label_linewrap = gtk_label_new (_("characters"));
1515 gtk_widget_show (label_linewrap);
1516 gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0);
1518 hbox4 = gtk_hbox_new (FALSE, VSPACING);
1519 gtk_widget_show (hbox4);
1520 gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0);
1522 PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation"));
1524 PACK_CHECK_BUTTON (hbox4, checkbtn_autowrap, _("Wrap on input"));
1527 (hbox4, checkbtn_wrapatsend, _("Wrap before sending"));
1529 PACK_CHECK_BUTTON (vbox_linewrap, checkbtn_smart_wrapping,
1530 _("Smart wrapping (EXPERIMENTAL)"));
1533 compose.checkbtn_quote = checkbtn_quote;
1534 compose.entry_quotemark = entry_quotemark;
1535 compose.text_quotefmt = text_quotefmt;
1538 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1540 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1541 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1542 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1544 compose.spinbtn_undolevel = spinbtn_undolevel;
1545 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1547 compose.spinbtn_linewrap = spinbtn_linewrap;
1548 compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj;
1549 compose.checkbtn_wrapquote = checkbtn_wrapquote;
1550 compose.checkbtn_autowrap = checkbtn_autowrap;
1551 compose.checkbtn_wrapatsend = checkbtn_wrapatsend;
1553 compose.checkbtn_autosave = checkbtn_autosave;
1554 compose.entry_autosave_length = entry_autosave_length;
1556 compose.checkbtn_forward_as_attachment =
1557 checkbtn_forward_as_attachment;
1558 compose.checkbtn_redirect_keep_from =
1559 checkbtn_redirect_keep_from;
1560 compose.checkbtn_smart_wrapping =
1561 checkbtn_smart_wrapping;
1562 compose.checkbtn_block_cursor =
1563 checkbtn_block_cursor;
1564 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1567 static void prefs_quote_create(void)
1570 GtkWidget *frame_quote;
1571 GtkWidget *vbox_quote;
1574 GtkWidget *label_quotemark;
1575 GtkWidget *entry_quotemark;
1576 GtkWidget *scrolledwin_quotefmt;
1577 GtkWidget *text_quotefmt;
1579 GtkWidget *entry_fw_quotemark;
1580 GtkWidget *text_fw_quotefmt;
1582 GtkWidget *entry_quote_chars;
1583 GtkWidget *label_quote_chars;
1585 GtkWidget *btn_quotedesc;
1587 GtkWidget *checkbtn_reply_with_quote;
1589 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1590 gtk_widget_show (vbox1);
1591 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1592 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1596 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1598 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1600 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1601 gtk_widget_show (vbox_quote);
1602 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1603 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1605 hbox1 = gtk_hbox_new (FALSE, 32);
1606 gtk_widget_show (hbox1);
1607 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1609 hbox2 = gtk_hbox_new (FALSE, 8);
1610 gtk_widget_show (hbox2);
1611 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1613 label_quotemark = gtk_label_new (_("Quotation mark"));
1614 gtk_widget_show (label_quotemark);
1615 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1617 entry_quotemark = gtk_entry_new ();
1618 gtk_widget_show (entry_quotemark);
1619 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1620 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1622 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1623 gtk_widget_show (scrolledwin_quotefmt);
1624 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1625 gtk_scrolled_window_set_policy
1626 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1627 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1629 text_quotefmt = gtk_text_view_new ();
1630 gtk_widget_show (text_quotefmt);
1631 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1632 gtk_text_view_set_editable (GTK_TEXT_VIEW(text_quotefmt), TRUE);
1633 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1637 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1639 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1640 gtk_widget_show (vbox_quote);
1641 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1642 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1644 hbox1 = gtk_hbox_new (FALSE, 32);
1645 gtk_widget_show (hbox1);
1646 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1648 hbox2 = gtk_hbox_new (FALSE, 8);
1649 gtk_widget_show (hbox2);
1650 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1652 label_quotemark = gtk_label_new (_("Quotation mark"));
1653 gtk_widget_show (label_quotemark);
1654 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1656 entry_fw_quotemark = gtk_entry_new ();
1657 gtk_widget_show (entry_fw_quotemark);
1658 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1660 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1662 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1663 gtk_widget_show (scrolledwin_quotefmt);
1664 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1665 gtk_scrolled_window_set_policy
1666 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1667 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1669 text_fw_quotefmt = gtk_text_view_new ();
1670 gtk_widget_show (text_fw_quotefmt);
1671 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1673 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1674 gtk_widget_set_size_request(text_fw_quotefmt, -1, 60);
1676 hbox1 = gtk_hbox_new (FALSE, 32);
1677 gtk_widget_show (hbox1);
1678 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1681 gtk_button_new_with_label (_(" Description of symbols "));
1682 gtk_widget_show (btn_quotedesc);
1683 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1684 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1685 G_CALLBACK(quote_fmt_quote_description), NULL);
1689 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1691 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1692 gtk_widget_show (vbox_quote);
1693 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1694 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1696 hbox1 = gtk_hbox_new (FALSE, 32);
1697 gtk_widget_show (hbox1);
1698 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1700 hbox2 = gtk_hbox_new (FALSE, 8);
1701 gtk_widget_show (hbox2);
1702 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1704 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1705 gtk_widget_show (label_quote_chars);
1706 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1708 entry_quote_chars = gtk_entry_new ();
1709 gtk_widget_show (entry_quote_chars);
1710 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1712 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1715 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1716 quote.entry_quotemark = entry_quotemark;
1717 quote.text_quotefmt = text_quotefmt;
1718 quote.entry_fw_quotemark = entry_fw_quotemark;
1719 quote.text_fw_quotefmt = text_fw_quotefmt;
1720 quote.entry_quote_chars = entry_quote_chars;
1723 static void prefs_display_create(void)
1726 GtkWidget *chkbtn_transhdr;
1727 GtkWidget *chkbtn_folder_unread;
1729 GtkWidget *label_ng_abbrev;
1730 GtkWidget *spinbtn_ng_abbrev_len;
1731 GtkObject *spinbtn_ng_abbrev_len_adj;
1732 GtkWidget *frame_summary;
1734 GtkWidget *chkbtn_swapfrom;
1735 GtkWidget *chkbtn_useaddrbook;
1736 GtkWidget *chkbtn_threadsubj;
1738 GtkWidget *label_datefmt;
1739 GtkWidget *button_datefmt;
1740 GtkWidget *entry_datefmt;
1741 GtkWidget *button_dispitem;
1743 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1744 gtk_widget_show (vbox1);
1745 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1746 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1748 vbox2 = gtk_vbox_new (FALSE, 0);
1749 gtk_widget_show (vbox2);
1750 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1753 (vbox2, chkbtn_transhdr,
1754 _("Translate header name (such as `From:', `Subject:')"));
1756 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1757 _("Display unread number next to folder name"));
1759 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1761 hbox1 = gtk_hbox_new (FALSE, 8);
1762 gtk_widget_show (hbox1);
1763 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1765 label_ng_abbrev = gtk_label_new
1766 (_("Abbreviate newsgroup names longer than"));
1767 gtk_widget_show (label_ng_abbrev);
1768 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1770 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1771 spinbtn_ng_abbrev_len = gtk_spin_button_new
1772 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1773 gtk_widget_show (spinbtn_ng_abbrev_len);
1774 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1776 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1777 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1780 label_ng_abbrev = gtk_label_new
1782 gtk_widget_show (label_ng_abbrev);
1783 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1785 /* ---- Summary ---- */
1787 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1789 vbox2 = gtk_vbox_new (FALSE, 0);
1790 gtk_widget_show (vbox2);
1791 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1792 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1795 (vbox2, chkbtn_swapfrom,
1796 _("Display recipient in `From' column if sender is yourself"));
1798 (vbox2, chkbtn_useaddrbook,
1799 _("Display sender using address book"));
1801 (vbox2, chkbtn_threadsubj,
1802 _("Thread using subject in addition to standard headers"));
1804 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1806 hbox1 = gtk_hbox_new (FALSE, 8);
1807 gtk_widget_show (hbox1);
1808 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1810 label_datefmt = gtk_label_new (_("Date format"));
1811 gtk_widget_show (label_datefmt);
1812 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1814 entry_datefmt = gtk_entry_new ();
1815 gtk_widget_show (entry_datefmt);
1816 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1818 button_datefmt = gtk_button_new_with_label (" ... ");
1820 gtk_widget_show (button_datefmt);
1821 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1822 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1823 G_CALLBACK (date_format_create), NULL);
1825 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1827 hbox1 = gtk_hbox_new (FALSE, 8);
1828 gtk_widget_show (hbox1);
1829 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1831 button_dispitem = gtk_button_new_with_label
1832 (_(" Set displayed items in summary... "));
1833 gtk_widget_show (button_dispitem);
1834 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1835 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1836 G_CALLBACK (prefs_summary_column_open),
1839 display.chkbtn_transhdr = chkbtn_transhdr;
1840 display.chkbtn_folder_unread = chkbtn_folder_unread;
1841 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1842 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1844 display.chkbtn_swapfrom = chkbtn_swapfrom;
1845 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1846 display.chkbtn_threadsubj = chkbtn_threadsubj;
1847 display.entry_datefmt = entry_datefmt;
1850 static void prefs_message_create(void)
1856 GtkWidget *chkbtn_enablecol;
1857 GtkWidget *button_edit_col;
1858 GtkWidget *chkbtn_mbalnum;
1859 GtkWidget *chkbtn_disphdrpane;
1860 GtkWidget *chkbtn_disphdr;
1861 GtkWidget *button_edit_disphdr;
1862 GtkWidget *hbox_linespc;
1863 GtkWidget *label_linespc;
1864 GtkObject *spinbtn_linespc_adj;
1865 GtkWidget *spinbtn_linespc;
1866 GtkWidget *chkbtn_headspc;
1868 GtkWidget *frame_scr;
1869 GtkWidget *vbox_scr;
1870 GtkWidget *chkbtn_smoothscroll;
1871 GtkWidget *hbox_scr;
1872 GtkWidget *label_scr;
1873 GtkObject *spinbtn_scrollstep_adj;
1874 GtkWidget *spinbtn_scrollstep;
1875 GtkWidget *chkbtn_halfpage;
1877 GtkWidget *chkbtn_attach_desc;
1879 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1880 gtk_widget_show (vbox1);
1881 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1882 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1884 vbox2 = gtk_vbox_new (FALSE, 0);
1885 gtk_widget_show (vbox2);
1886 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1888 hbox1 = gtk_hbox_new (FALSE, 8);
1889 gtk_widget_show (hbox1);
1890 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1892 PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol,
1893 _("Enable coloration of message"));
1894 g_signal_connect(G_OBJECT(chkbtn_enablecol), "toggled",
1895 G_CALLBACK(prefs_enable_message_color_toggled),
1898 button_edit_col = gtk_button_new_with_label (_(" Edit... "));
1899 gtk_widget_show (button_edit_col);
1900 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0);
1901 g_signal_connect (G_OBJECT (button_edit_col), "clicked",
1902 G_CALLBACK(prefs_quote_colors_dialog), NULL);
1904 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col);
1907 (vbox2, chkbtn_mbalnum,
1908 _("Display multi-byte alphanumeric as\n"
1909 "ASCII character (Japanese only)"));
1910 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1913 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1914 _("Display header pane above message view"));
1916 hbox1 = gtk_hbox_new (FALSE, 8);
1917 gtk_widget_show (hbox1);
1918 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1920 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1921 _("Display short headers on message view"));
1923 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1924 gtk_widget_show (button_edit_disphdr);
1925 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1927 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1928 G_CALLBACK (prefs_display_header_open),
1931 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1933 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1935 hbox1 = gtk_hbox_new (FALSE, 32);
1936 gtk_widget_show (hbox1);
1937 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1939 hbox_linespc = gtk_hbox_new (FALSE, 8);
1940 gtk_widget_show (hbox1);
1941 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1943 label_linespc = gtk_label_new (_("Line space"));
1944 gtk_widget_show (label_linespc);
1945 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1948 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1949 spinbtn_linespc = gtk_spin_button_new
1950 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1951 gtk_widget_show (spinbtn_linespc);
1952 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1954 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1955 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1957 label_linespc = gtk_label_new (_("pixel(s)"));
1958 gtk_widget_show (label_linespc);
1959 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1962 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head"));
1964 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1966 vbox_scr = gtk_vbox_new (FALSE, 0);
1967 gtk_widget_show (vbox_scr);
1968 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1969 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1971 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1973 hbox1 = gtk_hbox_new (FALSE, 32);
1974 gtk_widget_show (hbox1);
1975 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1977 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1979 hbox_scr = gtk_hbox_new (FALSE, 8);
1980 gtk_widget_show (hbox_scr);
1981 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1983 label_scr = gtk_label_new (_("Step"));
1984 gtk_widget_show (label_scr);
1985 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1987 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1988 spinbtn_scrollstep = gtk_spin_button_new
1989 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1990 gtk_widget_show (spinbtn_scrollstep);
1991 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1993 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1994 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1997 label_scr = gtk_label_new (_("pixel(s)"));
1998 gtk_widget_show (label_scr);
1999 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
2001 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
2003 vbox3 = gtk_vbox_new (FALSE, 0);
2004 gtk_widget_show (vbox3);
2005 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
2007 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
2008 _("Show attachment descriptions (rather than names)"));
2011 message.chkbtn_enablecol = chkbtn_enablecol;
2012 message.button_edit_col = button_edit_col;
2013 message.chkbtn_mbalnum = chkbtn_mbalnum;
2014 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
2015 message.chkbtn_disphdr = chkbtn_disphdr;
2016 message.spinbtn_linespc = spinbtn_linespc;
2017 message.chkbtn_headspc = chkbtn_headspc;
2019 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
2020 message.spinbtn_scrollstep = spinbtn_scrollstep;
2021 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
2022 message.chkbtn_halfpage = chkbtn_halfpage;
2024 message.chkbtn_attach_desc = chkbtn_attach_desc;
2028 static void prefs_privacy_create(void)
2034 GtkWidget *hbox_spc;
2036 GtkWidget *checkbtn_auto_check_signatures;
2037 GtkWidget *checkbtn_store_passphrase;
2038 GtkObject *spinbtn_store_passphrase_adj;
2039 GtkWidget *spinbtn_store_passphrase;
2040 GtkTooltips *store_tooltip;
2041 GtkWidget *checkbtn_passphrase_grab;
2042 GtkWidget *checkbtn_gpg_warning;
2044 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2045 gtk_widget_show (vbox1);
2046 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2047 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2049 vbox2 = gtk_vbox_new (FALSE, 0);
2050 gtk_widget_show (vbox2);
2051 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2053 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
2054 _("Automatically check signatures"));
2056 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
2057 _("Store passphrase in memory temporarily"));
2059 vbox3 = gtk_vbox_new (FALSE, 0);
2060 gtk_widget_show (vbox3);
2061 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2063 hbox1 = gtk_hbox_new (FALSE, 8);
2064 gtk_widget_show (hbox1);
2065 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2067 hbox_spc = gtk_hbox_new (FALSE, 0);
2068 gtk_widget_show (hbox_spc);
2069 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2070 gtk_widget_set_size_request (hbox_spc, 12, -1);
2072 label = gtk_label_new (_("Expire after"));
2073 gtk_widget_show (label);
2074 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2076 store_tooltip = gtk_tooltips_new();
2078 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
2079 spinbtn_store_passphrase = gtk_spin_button_new
2080 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
2081 gtk_widget_show (spinbtn_store_passphrase);
2082 gtk_tooltips_set_tip(GTK_TOOLTIPS(store_tooltip), spinbtn_store_passphrase,
2083 _("Setting to '0' will store the passphrase"
2084 " for the whole session"),
2086 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
2087 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
2089 gtk_widget_set_size_request (spinbtn_store_passphrase, 64, -1);
2091 label = gtk_label_new (_("minute(s) "));
2092 gtk_widget_show (label);
2093 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2095 hbox1 = gtk_hbox_new (FALSE, 8);
2096 gtk_widget_show (hbox1);
2097 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2099 hbox_spc = gtk_hbox_new (FALSE, 0);
2100 gtk_widget_show (hbox_spc);
2101 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
2102 gtk_widget_set_size_request (hbox_spc, 12, -1);
2104 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
2107 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
2108 _("Grab input while entering a passphrase"));
2112 (vbox2, checkbtn_gpg_warning,
2113 _("Display warning on startup if GnuPG doesn't work"));
2115 hbox1 = gtk_hbox_new (FALSE, 8);
2116 gtk_widget_show (hbox1);
2117 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2119 privacy.checkbtn_auto_check_signatures
2120 = checkbtn_auto_check_signatures;
2121 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
2122 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
2123 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2124 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2125 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2127 #endif /* USE_GPGME */
2129 static void prefs_interface_create(void)
2134 /* GtkWidget *checkbtn_emacs; */
2135 GtkWidget *checkbtn_always_show_msg;
2136 GtkWidget *checkbtn_openunread;
2137 GtkWidget *checkbtn_mark_as_read_on_newwin;
2138 GtkWidget *checkbtn_openinbox;
2139 GtkWidget *checkbtn_immedexec;
2140 GtkTooltips *immedexec_tooltip;
2144 GtkWidget *menuitem;
2146 GtkWidget *button_keybind;
2148 GtkWidget *hbox_nextunreadmsgdialog;
2149 GtkWidget *optmenu_nextunreadmsgdialog;
2151 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2152 gtk_widget_show (vbox1);
2153 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2154 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2156 vbox2 = gtk_vbox_new (FALSE, 0);
2157 gtk_widget_show (vbox2);
2158 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2160 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2161 _("Emulate the behavior of mouse operation of\n"
2162 "Emacs-based mailer"));
2163 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2164 GTK_JUSTIFY_LEFT); */
2167 (vbox2, checkbtn_always_show_msg,
2168 _("Always open messages in summary when selected"));
2171 (vbox2, checkbtn_openunread,
2172 _("Open first unread message when entering a folder"));
2175 (vbox2, checkbtn_mark_as_read_on_newwin,
2176 _("Only mark message as read when opened in new window"));
2179 (vbox2, checkbtn_openinbox,
2180 _("Go to inbox after receiving new mail"));
2182 vbox3 = gtk_vbox_new (FALSE, 0);
2183 gtk_widget_show (vbox3);
2184 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2186 immedexec_tooltip = gtk_tooltips_new();
2189 (vbox3, checkbtn_immedexec,
2190 _("Execute immediately when moving or deleting messages"));
2191 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
2192 _("Messages will be marked until execution"
2193 " if this is turned off"),
2196 hbox1 = gtk_hbox_new (FALSE, 0);
2197 gtk_widget_show (hbox1);
2198 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2200 /* Next Unread Message Dialog */
2201 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
2202 gtk_widget_show (hbox1);
2203 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
2205 label = gtk_label_new (_("Show no-unread-message dialog"));
2206 gtk_widget_show (label);
2207 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
2209 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2210 gtk_widget_show (optmenu_nextunreadmsgdialog);
2211 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2213 menu = gtk_menu_new ();
2214 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2215 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2216 NEXTUNREADMSGDIALOG_ASSUME_YES);
2217 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2218 NEXTUNREADMSGDIALOG_ASSUME_NO);
2220 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2222 hbox1 = gtk_hbox_new (FALSE, 8);
2223 gtk_widget_show (hbox1);
2224 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2226 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2227 gtk_widget_show (button_keybind);
2228 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2229 g_signal_connect (G_OBJECT (button_keybind), "clicked",
2230 G_CALLBACK (prefs_keybind_select), NULL);
2232 /* interface.checkbtn_emacs = checkbtn_emacs; */
2233 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2234 interface.checkbtn_openunread = checkbtn_openunread;
2235 interface.checkbtn_mark_as_read_on_newwin
2236 = checkbtn_mark_as_read_on_newwin;
2237 interface.checkbtn_openinbox = checkbtn_openinbox;
2238 interface.checkbtn_immedexec = checkbtn_immedexec;
2239 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2242 static void prefs_other_create(void)
2247 GtkWidget *frame_addr;
2248 GtkWidget *vbox_addr;
2249 GtkWidget *checkbtn_addaddrbyclick;
2251 GtkWidget *frame_cliplog;
2252 GtkWidget *vbox_cliplog;
2253 GtkWidget *hbox_cliplog;
2254 GtkWidget *checkbtn_cliplog;
2255 GtkWidget *loglength_label;
2256 GtkWidget *loglength_entry;
2257 GtkTooltips *loglength_tooltip;
2259 GtkWidget *frame_exit;
2260 GtkWidget *vbox_exit;
2261 GtkWidget *checkbtn_confonexit;
2262 GtkWidget *checkbtn_cleanonexit;
2263 GtkWidget *checkbtn_askonclean;
2264 GtkWidget *checkbtn_warnqueued;
2266 GtkWidget *label_iotimeout;
2267 GtkWidget *spinbtn_iotimeout;
2268 GtkObject *spinbtn_iotimeout_adj;
2272 GtkWidget *frame_ssl;
2273 GtkWidget *vbox_ssl;
2274 GtkWidget *hbox_ssl;
2275 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2278 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2279 gtk_widget_show (vbox1);
2280 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2281 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2283 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2285 vbox_addr = gtk_vbox_new (FALSE, 0);
2286 gtk_widget_show (vbox_addr);
2287 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2288 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2291 (vbox_addr, checkbtn_addaddrbyclick,
2292 _("Add address to destination when double-clicked"));
2295 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2297 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2298 gtk_widget_show (vbox_cliplog);
2299 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2300 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2301 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2302 _("Clip the log size"));
2303 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2304 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2305 gtk_widget_show (hbox_cliplog);
2307 loglength_label = gtk_label_new (_("Log window length"));
2308 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2310 gtk_widget_show (GTK_WIDGET (loglength_label));
2312 loglength_tooltip = gtk_tooltips_new();
2314 loglength_entry = gtk_entry_new ();
2315 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2316 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2318 gtk_widget_show (GTK_WIDGET (loglength_entry));
2319 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2320 _("0 to stop logging in the log window"),
2322 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2324 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2329 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2331 vbox_ssl = gtk_vbox_new (FALSE, 0);
2332 gtk_widget_show (vbox_ssl);
2333 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2334 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2335 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2336 _("Ask before accepting SSL certificates"));
2337 hbox_ssl = gtk_hbox_new (FALSE, 3);
2338 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2339 gtk_widget_show (hbox_ssl);
2344 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2346 vbox_exit = gtk_vbox_new (FALSE, 0);
2347 gtk_widget_show (vbox_exit);
2348 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2349 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2351 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2352 _("Confirm on exit"));
2354 hbox1 = gtk_hbox_new (FALSE, 32);
2355 gtk_widget_show (hbox1);
2356 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2358 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2359 _("Empty trash on exit"));
2360 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2361 _("Ask before emptying"));
2362 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2364 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2365 _("Warn if there are queued messages"));
2367 hbox1 = gtk_hbox_new (FALSE, 8);
2368 gtk_widget_show (hbox1);
2369 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2371 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2372 gtk_widget_show (label_iotimeout);
2373 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2375 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2376 spinbtn_iotimeout = gtk_spin_button_new
2377 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2378 gtk_widget_show (spinbtn_iotimeout);
2379 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2381 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2382 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2384 label_iotimeout = gtk_label_new (_("seconds"));
2385 gtk_widget_show (label_iotimeout);
2386 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2388 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2390 other.checkbtn_cliplog = checkbtn_cliplog;
2391 other.loglength_entry = loglength_entry;
2393 other.checkbtn_confonexit = checkbtn_confonexit;
2394 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2395 other.checkbtn_askonclean = checkbtn_askonclean;
2396 other.checkbtn_warnqueued = checkbtn_warnqueued;
2398 other.spinbtn_iotimeout = spinbtn_iotimeout;
2399 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2403 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2408 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2410 GtkWidget *datefmt_sample = NULL;
2413 g_return_if_fail(widget != NULL);
2414 g_return_if_fail(*widget != NULL);
2415 g_return_if_fail(display.entry_datefmt != NULL);
2417 datefmt_sample = GTK_WIDGET(g_object_get_data
2418 (G_OBJECT(*widget), "datefmt_sample"));
2419 g_return_if_fail(datefmt_sample != NULL);
2421 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2422 g_free(prefs_common.date_format);
2423 prefs_common.date_format = text;
2424 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2426 gtk_widget_destroy(*widget);
2430 static void date_format_cancel_btn_clicked(GtkButton *button,
2433 g_return_if_fail(widget != NULL);
2434 g_return_if_fail(*widget != NULL);
2436 gtk_widget_destroy(*widget);
2440 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2443 if (event && event->keyval == GDK_Escape)
2444 date_format_cancel_btn_clicked(NULL, widget);
2448 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2449 GdkEventAny *event, GtkWidget **widget)
2451 g_return_val_if_fail(widget != NULL, FALSE);
2452 g_return_val_if_fail(*widget != NULL, FALSE);
2458 static void date_format_entry_on_change(GtkEditable *editable,
2462 struct tm *cal_time;
2466 cur_time = time(NULL);
2467 cal_time = localtime(&cur_time);
2469 text = gtk_editable_get_chars(editable, 0, -1);
2471 strftime(buffer, sizeof buffer, text, cal_time);
2474 text = conv_codeset_strdup(buffer,
2475 conv_get_current_charset_str(),
2478 text = g_strdup(buffer);
2480 gtk_label_set_text(example, text);
2485 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2486 gint column, GdkEventButton *event,
2487 GtkWidget *date_format)
2491 const gchar *old_format;
2493 GtkWidget *datefmt_sample;
2495 /* only on double click */
2496 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2499 datefmt_sample = GTK_WIDGET(gtk_object_get_data
2500 (GTK_OBJECT(date_format), "datefmt_sample"));
2502 g_return_if_fail(date_format_list != NULL);
2503 g_return_if_fail(date_format != NULL);
2504 g_return_if_fail(datefmt_sample != NULL);
2506 /* get format from clist */
2507 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2509 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2510 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2512 /* insert the format into the text entry */
2513 new_format = g_malloc(strlen(old_format) + 3);
2515 strncpy(new_format, old_format, cur_pos);
2516 new_format[cur_pos] = '\0';
2517 strcat(new_format, format);
2518 strcat(new_format, &old_format[cur_pos]);
2520 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2521 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2526 static GtkWidget *date_format_create(GtkButton *button, void *data)
2528 static GtkWidget *datefmt_win = NULL;
2530 GtkWidget *scrolledwindow1;
2531 GtkWidget *datefmt_clist;
2536 GtkWidget *confirm_area;
2538 GtkWidget *cancel_btn;
2539 GtkWidget *datefmt_entry;
2568 const gint TIME_FORMAT_ELEMS =
2569 sizeof time_format / sizeof time_format[0];
2571 time_format[0].txt = _("the full abbreviated weekday name");
2572 time_format[1].txt = _("the full weekday name");
2573 time_format[2].txt = _("the abbreviated month name");
2574 time_format[3].txt = _("the full month name");
2575 time_format[4].txt = _("the preferred date and time for the current locale");
2576 time_format[5].txt = _("the century number (year/100)");
2577 time_format[6].txt = _("the day of the month as a decimal number");
2578 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2579 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2580 time_format[9].txt = _("the day of the year as a decimal number");
2581 time_format[10].txt = _("the month as a decimal number");
2582 time_format[11].txt = _("the minute as a decimal number");
2583 time_format[12].txt = _("either AM or PM");
2584 time_format[13].txt = _("the second as a decimal number");
2585 time_format[14].txt = _("the day of the week as a decimal number");
2586 time_format[15].txt = _("the preferred date for the current locale");
2587 time_format[16].txt = _("the last two digits of a year");
2588 time_format[17].txt = _("the year as a decimal number");
2589 time_format[18].txt = _("the time zone or name or abbreviation");
2591 if (datefmt_win) return datefmt_win;
2593 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2594 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2595 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2596 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2597 gtk_widget_set_size_request(datefmt_win, 440, 280);
2599 vbox1 = gtk_vbox_new(FALSE, 10);
2600 gtk_widget_show(vbox1);
2601 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2603 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2604 gtk_scrolled_window_set_policy
2605 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2606 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2607 gtk_widget_show(scrolledwindow1);
2608 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2610 titles[0] = _("Specifier");
2611 titles[1] = _("Description");
2612 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2613 gtk_widget_show(datefmt_clist);
2614 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2615 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2616 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2617 GTK_SELECTION_BROWSE);
2619 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2621 /* phoney casting necessary because of gtk... */
2622 text[0] = (gchar *)time_format[i].fmt;
2623 text[1] = (gchar *)time_format[i].txt;
2624 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2627 table = gtk_table_new(2, 2, FALSE);
2628 gtk_widget_show(table);
2629 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2630 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2631 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2633 label1 = gtk_label_new(_("Date format"));
2634 gtk_widget_show(label1);
2635 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2637 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2638 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2640 datefmt_entry = gtk_entry_new();
2641 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2642 gtk_widget_show(datefmt_entry);
2643 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2644 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2646 /* we need the "sample" entry box; add it as data so callbacks can
2647 * get the entry box */
2648 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2651 label2 = gtk_label_new(_("Example"));
2652 gtk_widget_show(label2);
2653 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2655 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2656 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2658 label3 = gtk_label_new("");
2659 gtk_widget_show(label3);
2660 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2661 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2662 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2663 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2665 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2666 &cancel_btn, _("Cancel"), NULL, NULL);
2667 gtk_widget_grab_default(ok_btn);
2668 gtk_widget_show(confirm_area);
2670 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2672 /* set the current format */
2673 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2674 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2677 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2678 G_CALLBACK(date_format_ok_btn_clicked),
2680 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2681 G_CALLBACK(date_format_cancel_btn_clicked),
2683 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2684 G_CALLBACK(date_format_key_pressed),
2686 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2687 G_CALLBACK(date_format_on_delete),
2689 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2690 G_CALLBACK(date_format_entry_on_change),
2693 g_signal_connect(G_OBJECT(datefmt_clist), "select_row",
2694 G_CALLBACK(date_format_select_row),
2697 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2698 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2700 gtk_widget_show(datefmt_win);
2701 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2703 gtk_widget_grab_focus(ok_btn);
2708 void prefs_quote_colors_dialog(void)
2710 if (!quote_color_win)
2711 prefs_quote_colors_dialog_create();
2712 gtk_widget_show(quote_color_win);
2713 manage_window_set_transient(GTK_WINDOW(quote_color_win));
2716 gtk_widget_hide(quote_color_win);
2718 textview_update_message_colors();
2719 main_window_reflect_prefs_all();
2722 static void prefs_quote_colors_dialog_create(void)
2727 GtkWidget *quotelevel1_label;
2728 GtkWidget *quotelevel2_label;
2729 GtkWidget *quotelevel3_label;
2730 GtkWidget *uri_label;
2731 GtkWidget *signature_label;
2732 GtkWidget *tgt_folder_label;
2735 GtkWidget *recycle_colors_btn;
2736 GtkWidget *frame_colors;
2738 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2739 gtk_container_set_border_width(GTK_CONTAINER(window), 2);
2740 gtk_window_set_title(GTK_WINDOW(window), _("Set message colors"));
2741 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2742 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
2743 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
2745 vbox = gtk_vbox_new (FALSE, VSPACING);
2746 gtk_container_add (GTK_CONTAINER (window), vbox);
2747 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
2748 PACK_FRAME(vbox, frame_colors, _("Colors"));
2750 table = gtk_table_new (5, 2, FALSE);
2751 gtk_container_add (GTK_CONTAINER (frame_colors), table);
2752 gtk_container_set_border_width (GTK_CONTAINER (table), 8);
2753 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
2754 gtk_table_set_col_spacings (GTK_TABLE (table), 5);
2757 color_buttons.quote_level1_btn = gtk_button_new();
2758 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
2759 0, 1, 0, 1, 0, 0, 0, 0);
2760 gtk_widget_set_size_request (color_buttons.quote_level1_btn, 40, 30);
2761 gtk_container_set_border_width
2762 (GTK_CONTAINER (color_buttons.quote_level1_btn), 5);
2764 color_buttons.quote_level2_btn = gtk_button_new();
2765 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level2_btn,
2766 0, 1, 1, 2, 0, 0, 0, 0);
2767 gtk_widget_set_size_request (color_buttons.quote_level2_btn, 40, 30);
2768 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5);
2770 color_buttons.quote_level3_btn = gtk_button_new_with_label ("");
2771 gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level3_btn,
2772 0, 1, 2, 3, 0, 0, 0, 0);
2773 gtk_widget_set_size_request (color_buttons.quote_level3_btn, 40, 30);
2774 gtk_container_set_border_width
2775 (GTK_CONTAINER (color_buttons.quote_level3_btn), 5);
2777 color_buttons.uri_btn = gtk_button_new_with_label ("");
2778 gtk_table_attach (GTK_TABLE (table), color_buttons.uri_btn,
2779 0, 1, 3, 4, 0, 0, 0, 0);
2780 gtk_widget_set_size_request (color_buttons.uri_btn, 40, 30);
2781 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
2783 color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
2784 gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
2785 0, 1, 4, 5, 0, 0, 0, 0);
2786 gtk_widget_set_size_request (color_buttons.tgt_folder_btn, 40, 30);
2787 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
2789 color_buttons.signature_btn = gtk_button_new_with_label ("");
2790 gtk_table_attach (GTK_TABLE (table), color_buttons.signature_btn,
2791 0, 1, 5, 6, 0, 0, 0, 0);
2792 gtk_widget_set_size_request (color_buttons.signature_btn, 40, 30);
2793 gtk_container_set_border_width (GTK_CONTAINER (color_buttons.signature_btn), 5);
2795 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
2796 gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
2797 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2798 gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT);
2799 gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5);
2801 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
2802 gtk_table_attach (GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2,
2803 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2804 gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT);
2805 gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5);
2807 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
2808 gtk_table_attach (GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3,
2809 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2810 gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT);
2811 gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5);
2813 uri_label = gtk_label_new (_("URI link"));
2814 gtk_table_attach (GTK_TABLE (table), uri_label, 1, 2, 3, 4,
2815 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2816 gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
2817 gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
2819 tgt_folder_label = gtk_label_new (_("Target folder"));
2820 gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
2821 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2822 gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
2823 gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
2825 signature_label = gtk_label_new (_("Signatures"));
2826 gtk_table_attach (GTK_TABLE (table), signature_label, 1, 2, 5, 6,
2827 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2828 gtk_label_set_justify (GTK_LABEL (signature_label), GTK_JUSTIFY_LEFT);
2829 gtk_misc_set_alignment (GTK_MISC (signature_label), 0, 0.5);
2831 PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
2832 _("Recycle quote colors"));
2834 gtkut_button_set_create(&hbbox, &ok_btn, _("OK"),
2835 NULL, NULL, NULL, NULL);
2836 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
2838 gtk_widget_grab_default(ok_btn);
2839 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2840 g_signal_connect(G_OBJECT(window), "delete_event",
2841 G_CALLBACK(gtk_main_quit), NULL);
2842 g_signal_connect(G_OBJECT(window), "key_press_event",
2843 G_CALLBACK(prefs_quote_colors_key_pressed),
2846 g_signal_connect(G_OBJECT(color_buttons.quote_level1_btn), "clicked",
2847 G_CALLBACK(quote_color_set_dialog), "LEVEL1");
2848 g_signal_connect(G_OBJECT(color_buttons.quote_level2_btn), "clicked",
2849 G_CALLBACK(quote_color_set_dialog), "LEVEL2");
2850 g_signal_connect(G_OBJECT(color_buttons.quote_level3_btn), "clicked",
2851 G_CALLBACK(quote_color_set_dialog), "LEVEL3");
2852 g_signal_connect(G_OBJECT(color_buttons.uri_btn), "clicked",
2853 G_CALLBACK(quote_color_set_dialog), "URI");
2854 g_signal_connect(G_OBJECT(color_buttons.tgt_folder_btn), "clicked",
2855 G_CALLBACK(quote_color_set_dialog), "TGTFLD");
2856 g_signal_connect(G_OBJECT(color_buttons.signature_btn), "clicked",
2857 G_CALLBACK(quote_color_set_dialog), "SIGNATURE");
2858 g_signal_connect(G_OBJECT(recycle_colors_btn), "toggled",
2859 G_CALLBACK(prefs_recycle_colors_toggled), NULL);
2860 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2861 G_CALLBACK(gtk_main_quit), NULL);
2863 /* show message button colors and recycle options */
2864 set_button_bg_color(color_buttons.quote_level1_btn,
2865 prefs_common.quote_level1_col);
2866 set_button_bg_color(color_buttons.quote_level2_btn,
2867 prefs_common.quote_level2_col);
2868 set_button_bg_color(color_buttons.quote_level3_btn,
2869 prefs_common.quote_level3_col);
2870 set_button_bg_color(color_buttons.uri_btn,
2871 prefs_common.uri_col);
2872 set_button_bg_color(color_buttons.tgt_folder_btn,
2873 prefs_common.tgt_folder_col);
2874 set_button_bg_color(color_buttons.signature_btn,
2875 prefs_common.signature_col);
2876 gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
2877 prefs_common.recycle_quote_colors);
2879 gtk_widget_show_all(vbox);
2880 quote_color_win = window;
2883 static gboolean prefs_quote_colors_key_pressed(GtkWidget *widget,
2884 GdkEventKey *event, gpointer data)
2886 if (event && event->keyval == GDK_Escape)
2891 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
2893 gchar *type = (gchar *)data;
2894 gchar *title = NULL;
2895 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
2897 GtkColorSelectionDialog *dialog;
2899 if(g_strcasecmp(type, "LEVEL1") == 0) {
2900 title = _("Pick color for quotation level 1");
2901 rgbvalue = prefs_common.quote_level1_col;
2902 } else if(g_strcasecmp(type, "LEVEL2") == 0) {
2903 title = _("Pick color for quotation level 2");
2904 rgbvalue = prefs_common.quote_level2_col;
2905 } else if(g_strcasecmp(type, "LEVEL3") == 0) {
2906 title = _("Pick color for quotation level 3");
2907 rgbvalue = prefs_common.quote_level3_col;
2908 } else if(g_strcasecmp(type, "URI") == 0) {
2909 title = _("Pick color for URI");
2910 rgbvalue = prefs_common.uri_col;
2911 } else if(g_strcasecmp(type, "TGTFLD") == 0) {
2912 title = _("Pick color for target folder");
2913 rgbvalue = prefs_common.tgt_folder_col;
2914 } else if(g_strcasecmp(type, "SIGNATURE") == 0) {
2915 title = _("Pick color for signatures");
2916 rgbvalue = prefs_common.signature_col;
2917 } else { /* Should never be called */
2918 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
2922 color_dialog = gtk_color_selection_dialog_new(title);
2923 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
2924 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
2925 gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE);
2926 manage_window_set_transient(GTK_WINDOW(color_dialog));
2928 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
2929 "clicked", G_CALLBACK(quote_colors_set_dialog_ok), data);
2930 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
2931 "clicked", G_CALLBACK(quote_colors_set_dialog_cancel), data);
2932 g_signal_connect(G_OBJECT(color_dialog), "key_press_event",
2933 G_CALLBACK(quote_colors_set_dialog_key_pressed),
2936 /* preselect the previous color in the color selection dialog */
2937 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
2938 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
2939 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
2940 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
2941 gtk_color_selection_set_color
2942 (GTK_COLOR_SELECTION(dialog->colorsel), color);
2944 gtk_widget_show(color_dialog);
2947 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
2949 GtkColorSelection *colorsel = (GtkColorSelection *)
2950 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
2952 gint red, green, blue, rgbvalue;
2953 gchar *type = (gchar *)data;
2955 gtk_color_selection_get_color(colorsel, color);
2957 red = (gint) (color[0] * 255.0);
2958 green = (gint) (color[1] * 255.0);
2959 blue = (gint) (color[2] * 255.0);
2960 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
2963 fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]);
2964 fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue);
2965 fprintf(stderr, "Color is %x\n", rgbvalue);
2968 if (g_strcasecmp(type, "LEVEL1") == 0) {
2969 prefs_common.quote_level1_col = rgbvalue;
2970 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
2971 } else if (g_strcasecmp(type, "LEVEL2") == 0) {
2972 prefs_common.quote_level2_col = rgbvalue;
2973 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
2974 } else if (g_strcasecmp(type, "LEVEL3") == 0) {
2975 prefs_common.quote_level3_col = rgbvalue;
2976 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
2977 } else if (g_strcasecmp(type, "URI") == 0) {
2978 prefs_common.uri_col = rgbvalue;
2979 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
2980 } else if (g_strcasecmp(type, "TGTFLD") == 0) {
2981 prefs_common.tgt_folder_col = rgbvalue;
2982 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
2983 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
2984 } else if (g_strcasecmp(type, "SIGNATURE") == 0) {
2985 prefs_common.signature_col = rgbvalue;
2986 set_button_bg_color(color_buttons.signature_btn, rgbvalue);
2988 fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
2990 gtk_widget_destroy(color_dialog);
2993 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
2995 gtk_widget_destroy(color_dialog);
2998 static gboolean quote_colors_set_dialog_key_pressed(GtkWidget *widget,
3002 gtk_widget_destroy(color_dialog);
3006 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
3011 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
3012 newstyle = gtk_style_copy(gtk_widget_get_default_style());
3013 newstyle->bg[GTK_STATE_NORMAL] = color;
3014 newstyle->bg[GTK_STATE_PRELIGHT] = color;
3015 newstyle->bg[GTK_STATE_ACTIVE] = color;
3017 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
3020 static void prefs_enable_message_color_toggled(void)
3024 is_active = gtk_toggle_button_get_active
3025 (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol));
3026 gtk_widget_set_sensitive(message.button_edit_col, is_active);
3027 prefs_common.enable_color = is_active;
3030 static void prefs_recycle_colors_toggled(GtkWidget *widget)
3034 is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
3035 prefs_common.recycle_quote_colors = is_active;
3038 static void prefs_keybind_select(void)
3045 GtkWidget *confirm_area;
3047 GtkWidget *cancel_btn;
3049 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
3050 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
3051 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
3052 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
3053 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
3054 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
3055 manage_window_set_transient (GTK_WINDOW (window));
3057 vbox1 = gtk_vbox_new (FALSE, VSPACING);
3058 gtk_container_add (GTK_CONTAINER (window), vbox1);
3059 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
3061 hbox1 = gtk_hbox_new (FALSE, 8);
3062 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3064 label = gtk_label_new
3065 (_("Select preset:"));
3066 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3067 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3069 hbox1 = gtk_hbox_new (FALSE, 8);
3070 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3072 combo = gtk_combo_new ();
3073 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
3074 gtkut_combo_set_items (GTK_COMBO (combo),
3080 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
3082 hbox1 = gtk_hbox_new (FALSE, 8);
3083 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3085 label = gtk_label_new
3086 (_("You can also modify each menu shortcut by pressing\n"
3087 "any key(s) when placing the mouse pointer on the item."));
3088 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
3089 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
3091 hbox1 = gtk_hbox_new (FALSE, 8);
3092 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
3094 gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
3095 &cancel_btn, _("Cancel"), NULL, NULL);
3096 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
3097 gtk_widget_grab_default (ok_btn);
3099 MANAGE_WINDOW_SIGNALS_CONNECT(window);
3100 g_signal_connect (G_OBJECT (window), "delete_event",
3101 G_CALLBACK (prefs_keybind_deleted), NULL);
3102 g_signal_connect (G_OBJECT (window), "key_press_event",
3103 G_CALLBACK (prefs_keybind_key_pressed), NULL);
3104 g_signal_connect (G_OBJECT (ok_btn), "clicked",
3105 G_CALLBACK (prefs_keybind_apply_clicked),
3107 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
3108 G_CALLBACK (prefs_keybind_cancel),
3111 gtk_widget_show_all(window);
3113 keybind.window = window;
3114 keybind.combo = combo;
3117 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
3120 if (event && event->keyval == GDK_Escape)
3121 prefs_keybind_cancel();
3125 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
3128 prefs_keybind_cancel();
3132 static void prefs_keybind_cancel(void)
3134 gtk_widget_destroy(keybind.window);
3135 keybind.window = NULL;
3136 keybind.combo = NULL;
3140 const gchar *accel_path;
3141 const gchar *accel_key;
3144 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
3148 GdkModifierType mods;
3150 for (i = 0; i < num; i++) {
3151 const gchar *accel_key
3152 = keybind[i].accel_key ? keybind[i].accel_key : "";
3153 gtk_accelerator_parse(accel_key, &key, &mods);
3154 gtk_accel_map_change_entry(keybind[i].accel_path,
3159 static void prefs_keybind_apply_clicked(GtkWidget *widget)
3161 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
3163 struct KeyBind *menurc;
3166 static struct KeyBind default_menurc[] = {
3167 {"<Main>/File/Empty trash", ""},
3168 {"<Main>/File/Save as...", "<control>S"},
3169 {"<Main>/File/Print...", ""},
3170 {"<Main>/File/Exit", "<control>Q"},
3172 {"<Main>/Edit/Copy", "<control>C"},
3173 {"<Main>/Edit/Select all", "<control>A"},
3174 {"<Main>/Edit/Find in current message...", "<control>F"},
3175 {"<Main>/Edit/Search folder...", "<shift><control>F"},
3177 {"<Main>/View/Expand Summary View", "V"},
3178 {"<Main>/View/Expand Message View", "<shift>V"},
3179 {"<Main>/View/Thread view", "<control>T"},
3180 {"<Main>/View/Go to/Prev message", "P"},
3181 {"<Main>/View/Go to/Next message", "N"},
3182 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
3183 {"<Main>/View/Go to/Next unread message", "<shift>N"},
3184 {"<Main>/View/Go to/Other folder...", "G"},
3185 {"<Main>/View/Open in new window", "<control><alt>N"},
3186 {"<Main>/View/View source", "<control>U"},
3187 {"<Main>/View/Show all headers", "<control>H"},
3188 {"<Main>/View/Update", "<control><alt>U"},
3190 {"<Main>/Message/Receive/Get new mail", "<control>I"},
3191 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
3192 {"<Main>/Message/Compose an email message", "<control>M"},
3193 {"<Main>/Message/Reply", "<control>R"},
3194 {"<Main>/Message/Reply to/all", "<shift><control>R"},
3195 {"<Main>/Message/Reply to/sender", ""},
3196 {"<Main>/Message/Reply to/mailing list", "<control>L"},
3197 {"<Main>/Message/Forward", "<control><alt>F"},
3198 /* {"<Main>/Message/Forward as attachment", ""}, */
3199 {"<Main>/Message/Move...", "<control>O"},
3200 {"<Main>/Message/Copy...", "<shift><control>O"},
3201 {"<Main>/Message/Delete", "<control>D"},
3202 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
3203 {"<Main>/Message/Mark/Unmark", "U"},
3204 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
3205 {"<Main>/Message/Mark/Mark as read", ""},
3207 {"<Main>/Tools/Address book", "<shift><control>A"},
3208 {"<Main>/Tools/Execute", "X"},
3209 {"<Main>/Tools/Log window", "<shift><control>L"},
3211 {"<Compose>/File/Close", "<control>W"},
3212 {"<Compose>/Edit/Select all", "<control>A"},
3213 {"<Compose>/Edit/Advanced/Move a word backward", ""},
3214 {"<Compose>/Edit/Advanced/Move a word forward", ""},
3215 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
3216 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
3217 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
3220 static struct KeyBind mew_wl_menurc[] = {
3221 {"<Main>/File/Empty trash", "<shift>D"},
3222 {"<Main>/File/Save as...", "Y"},
3223 {"<Main>/File/Print...", "<shift>numbersign"},
3224 {"<Main>/File/Exit", "<shift>Q"},
3226 {"<Main>/Edit/Copy", "<control>C"},
3227 {"<Main>/Edit/Select all", "<control>A"},
3228 {"<Main>/Edit/Find in current message...", "<control>F"},
3229 {"<Main>/Edit/Search folder...", "<control>S"},
3231 {"<Main>/View/Expand Summary View", ""},
3232 {"<Main>/View/Expand Message View", ""},
3233 {"<Main>/View/Thread view", "<shift>T"},
3234 {"<Main>/View/Go to/Prev message", "P"},
3235 {"<Main>/View/Go to/Next message", "N"},
3236 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
3237 {"<Main>/View/Go to/Next unread message", "<shift>N"},
3238 {"<Main>/View/Go to/Other folder...", "G"},
3239 {"<Main>/View/Open in new window", "<control><alt>N"},
3240 {"<Main>/View/View source", "<control>U"},
3241 {"<Main>/View/Show all headers", "<shift>H"},
3242 {"<Main>/View/Update", "<shift>S"},
3244 {"<Main>/Message/Receive/Get new mail", "<control>I"},
3245 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
3246 {"<Main>/Message/Compose an email message", "W"},
3247 {"<Main>/Message/Reply", "<control>R"},
3248 {"<Main>/Message/Reply to/all", "<shift>A"},
3249 {"<Main>/Message/Reply to/sender", ""},
3250 {"<Main>/Message/Reply to/mailing list", "<control>L"},
3251 {"<Main>/Message/Forward", "F"},
3252 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
3253 {"<Main>/Message/Move...", "O"},
3254 {"<Main>/Message/Copy...", "<shift>O"},
3255 {"<Main>/Message/Delete", "D"},
3256 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
3257 {"<Main>/Message/Mark/Unmark", "U"},
3258 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
3259 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
3261 {"<Main>/Tools/Address book", "<shift><control>A"},
3262 {"<Main>/Tools/Execute", "X"},
3263 {"<Main>/Tools/Log window", "<shift><control>L"},
3265 {"<Compose>/File/Close", "<alt>W"},
3266 {"<Compose>/Edit/Select all", ""},
3267 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
3268 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
3269 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
3270 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
3271 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
3274 static struct KeyBind mutt_menurc[] = {
3275 {"<Main>/File/Empty trash", ""},
3276 {"<Main>/File/Save as...", "S"},
3277 {"<Main>/File/Print...", "P"},
3278 {"<Main>/File/Exit", "Q"},
3280 {"<Main>/Edit/Copy", "<control>C"},
3281 {"<Main>/Edit/Select all", "<control>A"},
3282 {"<Main>/Edit/Find in current message...", "<control>F"},
3283 {"<Main>/Edit/Search messages...", "slash"},
3285 {"<Main>/View/Toggle summary view", "V"},
3286 {"<Main>/View/Thread view", "<control>T"},
3287 {"<Main>/View/Go to/Prev message", ""},
3288 {"<Main>/View/Go to/Next message", ""},
3289 {"<Main>/View/Go to/Prev unread message", ""},
3290 {"<Main>/View/Go to/Next unread message", ""},
3291 {"<Main>/View/Go to/Other folder...", "C"},
3292 {"<Main>/View/Open in new window", "<control><alt>N"},
3293 {"<Main>/View/View source", "<control>U"},
3294 {"<Main>/View/Show all headers", "<control>H"},
3295 {"<Main>/View/Update", "<control><alt>U"},
3297 {"<Main>/Message/Receive/Get new mail", "<control>I"},
3298 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
3299 {"<Main>/Message/Compose an email message", "M"},
3300 {"<Main>/Message/Reply", "R"},
3301 {"<Main>/Message/Reply to/all", "G"},
3302 {"<Main>/Message/Reply to/sender", ""},
3303 {"<Main>/Message/Reply to/mailing list", "<control>L"},
3304 {"<Main>/Message/Forward", "F"},
3305 {"<Main>/Message/Forward as attachment", ""},
3306 {"<Main>/Message/Move...", "<control>O"},
3307 {"<Main>/Message/Copy...", "<shift>C"},
3308 {"<Main>/Message/Delete", "D"},
3309 {"<Main>/Message/Mark/Mark", "<shift>F"},
3310 {"<Main>/Message/Mark/Unmark", "U"},
3311 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
3312 {"<Main>/Message/Mark/Mark as read", ""},
3314 {"<Main>/Tools/Address book", "<shift><control>A"},
3315 {"<Main>/Tools/Execute", "X"},
3316 {"<Main>/Tools/Log window", "<shift><control>L"},
3318 {"<Compose>/File/Close", "<alt>W"},
3319 {"<Compose>/Edit/Select all", ""},
3320 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
3321 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
3322 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
3323 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
3324 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
3327 static struct KeyBind old_sylpheed_menurc[] = {
3328 {"<Main>/File/Empty trash", ""},
3329 {"<Main>/File/Save as...", ""},
3330 {"<Main>/File/Print...", "<alt>P"},
3331 {"<Main>/File/Exit", "<alt>Q"},
3333 {"<Main>/Edit/Copy", "<control>C"},
3334 {"<Main>/Edit/Select all", "<control>A"},
3335 {"<Main>/Edit/Find in current message...", "<control>F"},
3336 {"<Main>/Edit/Search folder...", "<control>S"},
3338 {"<Main>/View/Expand Summary View", ""},
3339 {"<Main>/View/Expand Message View", ""},
3340 {"<Main>/View/Thread view", "<control>T"},
3341 {"<Main>/View/Go to/Prev message", "P"},
3342 {"<Main>/View/Go to/Next message", "N"},
3343 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
3344 {"<Main>/View/Go to/Next unread message", "<shift>N"},
3345 {"<Main>/View/Go to/Other folder...", "<alt>G"},
3346 {"<Main>/View/Open in new window", "<shift><control>N"},
3347 {"<Main>/View/View source", "<control>U"},
3348 {"<Main>/View/Show all headers", "<control>H"},
3349 {"<Main>/View/Update", "<alt>U"},
3351 {"<Main>/Message/Receive/Get new mail", "<alt>I"},
3352 {"<Main>/Message/Receive/Get from all accounts", "<shift><alt>I"},
3353 {"<Main>/Message/Compose an email message", "<alt>N"},
3354 {"<Main>/Message/Reply", "<alt>R"},
3355 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
3356 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
3357 {"<Main>/Message/Reply to/mailing list", "<control>L"},
3358 {"<Main>/Message/Forward", "<shift><alt>F"},
3359 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
3360 {"<Main>/Message/Move...", "<alt>O"},
3361 {"<Main>/Message/Copy...", ""},
3362 {"<Main>/Message/Delete", "<alt>D"},
3363 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
3364 {"<Main>/Message/Mark/Unmark", "U"},
3365 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
3366 {"<Main>/Message/Mark/Mark as read", ""},
3368 {"<Main>/Tools/Address book", "<alt>A"},
3369 {"<Main>/Tools/Execute", "<alt>X"},
3370 {"<Main>/Tools/Log window", "<alt>L"},
3372 {"<Compose>/File/Close", "<alt>W"},
3373 {"<Compose>/Edit/Select all", ""},
3374 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
3375 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
3376 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
3377 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
3378 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
3381 text = gtk_entry_get_text(entry);
3383 if (!strcmp(text, _("Default"))) {
3384 menurc = default_menurc;
3385 n_menurc = G_N_ELEMENTS(default_menurc);
3386 } else if (!strcmp(text, "Mew / Wanderlust")) {
3387 menurc = mew_wl_menurc;
3388 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
3389 } else if (!strcmp(text, "Mutt")) {
3390 menurc = mutt_menurc;
3391 n_menurc = G_N_ELEMENTS(mutt_menurc);
3392 } else if (!strcmp(text, _("Old Sylpheed"))) {
3393 menurc = old_sylpheed_menurc;
3394 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
3399 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
3400 prefs_keybind_apply(menurc, n_menurc);
3402 gtk_widget_destroy(keybind.window);
3403 keybind.window = NULL;
3404 keybind.combo = NULL;
3407 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
3410 GtkWidget *menuitem;
3413 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3414 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3415 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
3416 g_free(*((gchar **)pparam->data));
3417 *((gchar **)pparam->data) = g_strdup(charset);
3420 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
3422 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3425 g_return_if_fail(optmenu != NULL);
3426 g_return_if_fail(*((gchar **)pparam->data) != NULL);
3428 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
3429 (GCompareFunc)strcmp);
3431 gtk_option_menu_set_history(optmenu, index);
3433 gtk_option_menu_set_history(optmenu, 0);
3434 prefs_common_charset_set_data_from_optmenu(pparam);
3438 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
3441 GtkWidget *menuitem;
3443 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3444 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3445 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
3446 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3449 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
3451 TransferEncodingMethod method =
3452 *((TransferEncodingMethod *)pparam->data);
3453 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3456 g_return_if_fail(optmenu != NULL);
3458 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
3461 gtk_option_menu_set_history(optmenu, index);
3463 gtk_option_menu_set_history(optmenu, 0);
3464 prefs_common_encoding_set_data_from_optmenu(pparam);
3468 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3471 GtkWidget *menuitem;
3473 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3474 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3475 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3476 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3479 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3481 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3482 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3484 GtkWidget *menuitem;
3487 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
3490 gtk_option_menu_set_history(optmenu, index);
3492 gtk_option_menu_set_history(optmenu, 0);
3493 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
3496 menu = gtk_option_menu_get_menu(optmenu);
3497 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3498 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3501 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
3504 GtkWidget *menuitem;
3506 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3507 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3508 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
3509 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3512 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
3514 SendDialogMode mode = *((SendDialogMode *)pparam->data);
3515 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3517 GtkWidget *menuitem;
3520 case SEND_DIALOG_ALWAYS:
3521 gtk_option_menu_set_history(optmenu, 0);
3523 case SEND_DIALOG_NEVER:
3524 gtk_option_menu_set_history(optmenu, 1);
3530 menu = gtk_option_menu_get_menu(optmenu);
3531 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3532 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3535 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3538 prefs_common_cancel();
3542 static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3545 if (event && event->keyval == GDK_Escape)
3546 prefs_common_cancel();
3550 static void prefs_common_ok(void)
3552 prefs_common_apply();
3553 gtk_widget_hide(dialog.window);
3558 static void prefs_common_apply(void)
3560 MainWindow *mainwindow;
3562 prefs_set_data_from_dialog(param);
3563 sock_set_io_timeout(prefs_common.io_timeout_secs);
3564 main_window_reflect_prefs_all_real(FALSE);
3565 prefs_common_save_config();
3567 mainwindow = mainwindow_get_mainwindow();
3568 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3569 prefs_common.loglength);
3571 inc_autocheck_timer_remove();
3572 inc_autocheck_timer_set();
3575 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3578 GtkWidget *menuitem;
3580 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3581 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3582 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3583 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3586 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3588 NextUnreadMsgDialogShow dialog_show;
3589 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3591 GtkWidget *menuitem;
3593 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3595 switch (dialog_show) {
3596 case NEXTUNREADMSGDIALOG_ALWAYS:
3597 gtk_option_menu_set_history(optmenu, 0);
3599 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3600 gtk_option_menu_set_history(optmenu, 1);
3602 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3603 gtk_option_menu_set_history(optmenu, 2);
3607 menu = gtk_option_menu_get_menu(optmenu);
3608 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3609 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3612 static void prefs_common_cancel(void)
3614 gtk_widget_hide(dialog.window);
3619 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3622 GtkWidget *menuitem;
3624 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3625 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3626 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3627 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3630 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3632 RecvDialogShow dialog_show;
3633 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3635 GtkWidget *menuitem;
3637 dialog_show = *((RecvDialogShow *)pparam->data);
3639 switch (dialog_show) {
3640 case RECVDIALOG_ALWAYS:
3641 gtk_option_menu_set_history(optmenu, 0);
3643 case RECVDIALOG_WINDOW_ACTIVE:
3644 gtk_option_menu_set_history(optmenu, 1);
3646 case RECVDIALOG_NEVER:
3647 gtk_option_menu_set_history(optmenu, 2);
3652 menu = gtk_option_menu_get_menu(optmenu);
3653 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3654 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));