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 *optmenu_senddialog;
90 GtkWidget *optmenu_charset;
91 GtkWidget *optmenu_encoding_method;
94 static struct Compose {
95 GtkWidget *entry_fw_quotemark;
96 GtkWidget *text_fw_quotefmt;
98 GtkWidget *checkbtn_autoextedit;
99 GtkWidget *spinbtn_undolevel;
100 GtkObject *spinbtn_undolevel_adj;
102 GtkWidget *checkbtn_reply_account_autosel;
103 GtkWidget *checkbtn_forward_account_autosel;
104 GtkWidget *checkbtn_reedit_account_autosel;
105 GtkWidget *checkbtn_quote;
106 GtkWidget *checkbtn_default_reply_list;
107 GtkWidget *checkbtn_forward_as_attachment;
108 GtkWidget *checkbtn_redirect_keep_from;
109 GtkWidget *checkbtn_reply_with_quote;
111 GtkWidget *checkbtn_autosave;
112 GtkWidget *entry_autosave_length;
115 static struct Quote {
116 GtkWidget *entry_quotemark;
117 GtkWidget *text_quotefmt;
119 GtkWidget *entry_fw_quotemark;
120 GtkWidget *text_fw_quotefmt;
122 GtkWidget *entry_quote_chars;
125 static struct Display {
126 GtkWidget *chkbtn_folder_unread;
127 GtkWidget *entry_ng_abbrev_len;
128 GtkWidget *spinbtn_ng_abbrev_len;
129 GtkObject *spinbtn_ng_abbrev_len_adj;
131 GtkWidget *chkbtn_transhdr;
133 GtkWidget *chkbtn_swapfrom;
134 GtkWidget *chkbtn_useaddrbook;
135 GtkWidget *chkbtn_threadsubj;
136 GtkWidget *entry_datefmt;
139 static struct Message {
140 GtkWidget *chkbtn_mbalnum;
141 GtkWidget *chkbtn_disphdrpane;
142 GtkWidget *chkbtn_disphdr;
143 GtkWidget *spinbtn_linespc;
144 GtkObject *spinbtn_linespc_adj;
145 GtkWidget *chkbtn_headspc;
147 GtkWidget *chkbtn_smoothscroll;
148 GtkWidget *spinbtn_scrollstep;
149 GtkObject *spinbtn_scrollstep_adj;
150 GtkWidget *chkbtn_halfpage;
152 GtkWidget *chkbtn_attach_desc;
156 static struct Privacy {
157 GtkWidget *checkbtn_auto_check_signatures;
158 GtkWidget *checkbtn_store_passphrase;
159 GtkWidget *spinbtn_store_passphrase;
160 GtkObject *spinbtn_store_passphrase_adj;
161 GtkWidget *checkbtn_passphrase_grab;
162 GtkWidget *checkbtn_gpg_warning;
166 static struct Interface {
167 /* GtkWidget *checkbtn_emacs; */
168 GtkWidget *checkbtn_always_show_msg;
169 GtkWidget *checkbtn_openunread;
170 GtkWidget *checkbtn_mark_as_read_on_newwin;
171 GtkWidget *checkbtn_openinbox;
172 GtkWidget *checkbtn_immedexec;
173 GtkWidget *optmenu_nextunreadmsgdialog;
176 static struct Other {
177 GtkWidget *checkbtn_addaddrbyclick;
178 GtkWidget *checkbtn_confonexit;
179 GtkWidget *checkbtn_cleanonexit;
180 GtkWidget *checkbtn_askonclean;
181 GtkWidget *checkbtn_warnqueued;
182 GtkWidget *checkbtn_cliplog;
183 GtkWidget *loglength_entry;
186 GtkWidget *checkbtn_ssl_ask_unknown_valid;
190 GtkWidget *spinbtn_iotimeout;
191 GtkObject *spinbtn_iotimeout_adj;
194 static struct KeybindDialog {
199 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
200 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
201 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
202 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
203 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
204 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
205 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
207 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
208 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
209 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
210 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
211 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
212 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
215 parameter name, default value, pointer to the prefs variable, data type,
216 pointer to the widget pointer,
217 pointer to the function for data setting,
218 pointer to the function for widget setting
221 static PrefParam param[] = {
223 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
224 &receive.checkbtn_incext,
225 prefs_set_data_from_toggle, prefs_set_toggle},
226 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
227 &receive.entry_incext,
228 prefs_set_data_from_entry, prefs_set_entry},
230 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
231 &receive.checkbtn_autochk,
232 prefs_set_data_from_toggle, prefs_set_toggle},
233 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
234 &receive.spinbtn_autochk,
235 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
236 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
237 &receive.checkbtn_chkonstartup,
238 prefs_set_data_from_toggle, prefs_set_toggle},
239 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
240 P_BOOL, &receive.checkbtn_scan_after_inc,
241 prefs_set_data_from_toggle, prefs_set_toggle},
242 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
243 P_BOOL, &receive.checkbtn_newmail_manu,
244 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
246 P_BOOL, &receive.checkbtn_newmail_auto,
247 prefs_set_data_from_toggle, prefs_set_toggle},
248 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
249 &receive.entry_newmail_notify_cmd,
250 prefs_set_data_from_entry, prefs_set_entry},
251 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
252 &receive.optmenu_recvdialog,
253 prefs_common_recv_dialog_set_data_from_optmenu,
254 prefs_common_recv_dialog_set_optmenu},
255 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
256 P_BOOL, &receive.checkbtn_no_recv_err_panel,
257 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
259 P_BOOL, &receive.checkbtn_close_recv_dialog,
260 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
264 &p_send.checkbtn_savemsg,
265 prefs_set_data_from_toggle, prefs_set_toggle},
266 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
267 &p_send.optmenu_senddialog,
268 prefs_common_send_dialog_set_data_from_optmenu,
269 prefs_common_send_dialog_set_optmenu},
271 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
272 &p_send.optmenu_charset,
273 prefs_common_charset_set_data_from_optmenu,
274 prefs_common_charset_set_optmenu},
275 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
276 &p_send.optmenu_encoding_method,
277 prefs_common_encoding_set_data_from_optmenu,
278 prefs_common_encoding_set_optmenu},
280 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
281 P_BOOL, NULL, NULL, NULL},
284 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
285 &compose.checkbtn_autoextedit,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
288 P_BOOL, &compose.checkbtn_forward_as_attachment,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"redirect_keep_from", "FALSE",
291 &prefs_common.redirect_keep_from, P_BOOL,
292 &compose.checkbtn_redirect_keep_from,
293 prefs_set_data_from_toggle, prefs_set_toggle},
294 {"undo_level", "50", &prefs_common.undolevels, P_INT,
295 &compose.spinbtn_undolevel,
296 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
298 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
300 {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL,
302 {"linewrap_auto", "FALSE", &prefs_common.autowrap, P_BOOL,
304 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
306 {"smart_wrapping", "TRUE", &prefs_common.smart_wrapping, P_BOOL,
308 {"autosave", "FALSE", &prefs_common.autosave,
309 P_BOOL, &compose.checkbtn_autosave,
310 prefs_set_data_from_toggle, prefs_set_toggle},
311 {"autosave_length", "50", &prefs_common.autosave_length,
312 P_INT, &compose.entry_autosave_length,
313 prefs_set_data_from_entry, prefs_set_entry},
315 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
317 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
319 {"dictionary", "", &prefs_common.dictionary, P_STRING,
321 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
323 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
325 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
327 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
330 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
331 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
333 /* Account autoselection */
334 {"reply_account_autoselect", "TRUE",
335 &prefs_common.reply_account_autosel, P_BOOL,
336 &compose.checkbtn_reply_account_autosel,
337 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"forward_account_autoselect", "TRUE",
339 &prefs_common.forward_account_autosel, P_BOOL,
340 &compose.checkbtn_forward_account_autosel,
341 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"reedit_account_autoselect", "TRUE",
343 &prefs_common.reedit_account_autosel, P_BOOL,
344 &compose.checkbtn_reedit_account_autosel,
345 prefs_set_data_from_toggle, prefs_set_toggle},
347 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
348 &compose.checkbtn_default_reply_list,
349 prefs_set_data_from_toggle, prefs_set_toggle},
351 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
355 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
356 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
357 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
358 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
359 prefs_set_data_from_text, prefs_set_text},
361 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
362 "e.entry_fw_quotemark,
363 prefs_set_data_from_entry, prefs_set_entry},
364 {"forward_quote_format",
365 "\\n\\nBegin forwarded message:\\n\\n"
366 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
367 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
368 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
369 prefs_set_data_from_text, prefs_set_text},
370 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
371 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
374 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
375 {"widget_font", NULL,
376 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
377 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
378 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
379 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
380 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
381 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
382 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
383 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
384 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
387 {"widget_font_gtk2", NULL,
388 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
389 {"message_font_gtk2", "fixed 9",
390 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
391 {"small_font_gtk2", "Sans 9",
392 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
393 {"bold_font_gtk2", "Sans Bold 9",
394 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
395 {"normal_font_gtk2", "Sans 9",
396 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
398 {"display_folder_unread_num", "TRUE",
399 &prefs_common.display_folder_unread, P_BOOL,
400 &display.chkbtn_folder_unread,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"newsgroup_abbrev_len", "16",
403 &prefs_common.ng_abbrev_len, P_INT,
404 &display.spinbtn_ng_abbrev_len,
405 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
407 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
408 &display.chkbtn_transhdr,
409 prefs_set_data_from_toggle, prefs_set_toggle},
411 /* Display: Summary View */
412 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
413 &display.chkbtn_swapfrom,
414 prefs_set_data_from_toggle, prefs_set_toggle},
415 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
416 &display.chkbtn_useaddrbook,
417 prefs_set_data_from_toggle, prefs_set_toggle},
418 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
419 &display.chkbtn_threadsubj,
420 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
422 P_STRING, &display.entry_datefmt,
423 prefs_set_data_from_entry, prefs_set_entry},
425 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
427 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
429 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
430 P_INT, NULL, NULL, NULL },
432 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
434 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
436 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
438 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
441 {"folderview_vscrollbar_policy", "0",
442 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
445 {"summary_col_show_mark", "TRUE",
446 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
447 {"summary_col_show_unread", "TRUE",
448 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
449 {"summary_col_show_mime", "TRUE",
450 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_show_subject", "TRUE",
452 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_show_from", "TRUE",
454 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
455 {"summary_col_show_date", "TRUE",
456 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
457 {"summary_col_show_size", "TRUE",
458 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_show_number", "FALSE",
460 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_show_score", "FALSE",
462 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_show_locked", "FALSE",
464 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_pos_mark", "0",
467 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
468 {"summary_col_pos_unread", "1",
469 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
470 {"summary_col_pos_mime", "2",
471 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
472 {"summary_col_pos_subject", "3",
473 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
474 {"summary_col_pos_from", "4",
475 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_date", "5",
477 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
478 {"summary_col_pos_size", "6",
479 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
480 {"summary_col_pos_number", "7",
481 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
482 {"summary_col_pos_score", "8",
483 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
484 {"summary_col_pos_locked", "9",
485 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
487 {"summary_col_size_mark", "10",
488 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
489 {"summary_col_size_unread", "13",
490 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_mime", "10",
492 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_subject", "200",
494 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_from", "120",
496 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_date", "118",
498 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_size", "45",
500 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_number", "40",
502 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_score", "40",
504 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_locked", "13",
506 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
509 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
511 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
513 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
515 {"folderview_height", "600", &prefs_common.folderview_height, P_INT,
517 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
520 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
522 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
524 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
526 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
529 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
531 {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT,
534 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
536 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
538 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
540 {"messageview_height", "540", &prefs_common.msgview_height, P_INT,
542 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
545 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
547 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
549 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
551 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
553 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
555 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
557 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
559 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
561 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
563 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
565 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
567 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
569 {"compose_width", "600", &prefs_common.compose_width, P_INT,
571 {"compose_height", "560", &prefs_common.compose_height, P_INT,
573 {"compose_x", "0", &prefs_common.compose_x, P_INT,
575 {"compose_y", "0", &prefs_common.compose_y, P_INT,
578 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
581 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
583 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
585 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
587 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
589 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
591 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
593 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
594 P_BOOL, NULL, NULL, NULL},
596 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
597 &message.chkbtn_mbalnum,
598 prefs_set_data_from_toggle, prefs_set_toggle},
599 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
600 P_BOOL, &message.chkbtn_disphdrpane,
601 prefs_set_data_from_toggle, prefs_set_toggle},
602 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
603 &message.chkbtn_disphdr,
604 prefs_set_data_from_toggle, prefs_set_toggle},
605 {"line_space", "2", &prefs_common.line_space, P_INT,
606 &message.spinbtn_linespc,
607 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
608 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
609 &message.chkbtn_headspc,
610 prefs_set_data_from_toggle, prefs_set_toggle},
612 {"enable_smooth_scroll", "FALSE",
613 &prefs_common.enable_smooth_scroll, P_BOOL,
614 &message.chkbtn_smoothscroll,
615 prefs_set_data_from_toggle, prefs_set_toggle},
616 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
617 &message.spinbtn_scrollstep,
618 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
619 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
620 &message.chkbtn_halfpage,
621 prefs_set_data_from_toggle, prefs_set_toggle},
623 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
626 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
627 &message.chkbtn_attach_desc,
628 prefs_set_data_from_toggle, prefs_set_toggle},
629 {"attach_save_directory", NULL,
630 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
633 {"mime_image_viewer", "display '%s'",
634 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
635 {"mime_audio_player", "play '%s'",
636 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
637 {"mime_open_command", "gedit '%s'",
638 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
642 {"auto_check_signatures", "TRUE",
643 &prefs_common.auto_check_signatures, P_BOOL,
644 &privacy.checkbtn_auto_check_signatures,
645 prefs_set_data_from_toggle, prefs_set_toggle},
646 {"store_passphrase", "FALSE", &prefs_common.store_passphrase, P_BOOL,
647 &privacy.checkbtn_store_passphrase,
648 prefs_set_data_from_toggle, prefs_set_toggle},
649 {"store_passphrase_timeout", "0",
650 &prefs_common.store_passphrase_timeout, P_INT,
651 &privacy.spinbtn_store_passphrase,
652 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
654 {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL,
655 &privacy.checkbtn_passphrase_grab,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 #endif /* __MINGW32__ */
658 {"gpg_warning", "TRUE", &prefs_common.gpg_warning, P_BOOL,
659 &privacy.checkbtn_gpg_warning,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 #endif /* USE_GPGME */
664 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
666 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
669 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
670 NULL, NULL, NULL}, */
671 {"always_show_message_when_selected", "FALSE",
672 &prefs_common.always_show_msg,
673 P_BOOL, &interface.checkbtn_always_show_msg,
674 prefs_set_data_from_toggle, prefs_set_toggle},
675 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
676 P_BOOL, &interface.checkbtn_openunread,
677 prefs_set_data_from_toggle, prefs_set_toggle},
678 {"mark_as_read_on_new_window", "FALSE",
679 &prefs_common.mark_as_read_on_new_window,
680 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
683 P_BOOL, &interface.checkbtn_openinbox,
684 prefs_set_data_from_toggle, prefs_set_toggle},
685 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
686 &interface.checkbtn_immedexec,
687 prefs_set_data_from_toggle, prefs_set_toggle},
688 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
689 &interface.optmenu_nextunreadmsgdialog,
690 prefs_nextunreadmsgdialog_set_data_from_optmenu,
691 prefs_nextunreadmsgdialog_set_optmenu},
693 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
694 &prefs_common.pixmap_theme_path, P_STRING,
697 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
701 {"uri_open_command", DEFAULT_BROWSER_CMD,
702 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
703 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
705 {"ext_editor_command", "gedit %s",
706 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
708 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
709 P_BOOL, &other.checkbtn_addaddrbyclick,
710 prefs_set_data_from_toggle, prefs_set_toggle},
712 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
713 &other.checkbtn_confonexit,
714 prefs_set_data_from_toggle, prefs_set_toggle},
715 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
716 &other.checkbtn_cleanonexit,
717 prefs_set_data_from_toggle, prefs_set_toggle},
718 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
719 &other.checkbtn_askonclean,
720 prefs_set_data_from_toggle, prefs_set_toggle},
721 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
722 P_BOOL, &other.checkbtn_warnqueued,
723 prefs_set_data_from_toggle, prefs_set_toggle},
726 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
727 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
728 prefs_set_data_from_toggle, prefs_set_toggle},
731 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
733 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
735 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
738 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
739 P_INT, &other.spinbtn_iotimeout,
740 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
741 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
743 {"important_score", "1", &prefs_common.important_score, P_INT,
745 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
746 &other.checkbtn_cliplog,
747 prefs_set_data_from_toggle, prefs_set_toggle},
748 {"log_length", "500", &prefs_common.loglength, P_INT,
749 &other.loglength_entry,
750 prefs_set_data_from_entry, prefs_set_entry},
752 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
754 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
757 {"color_new", "179", &prefs_common.color_new, P_COLOR,
760 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
763 /* widget creating functions */
764 static void prefs_common_create (void);
765 static void prefs_receive_create (void);
766 static void prefs_send_create (void);
767 static void prefs_compose_create (void);
768 static void prefs_quote_create (void);
769 static void prefs_display_create (void);
770 static void prefs_message_create (void);
772 static void prefs_privacy_create (void);
774 static void prefs_interface_create (void);
775 static void prefs_other_create (void);
777 static void date_format_ok_btn_clicked (GtkButton *button,
779 static void date_format_cancel_btn_clicked (GtkButton *button,
781 static gboolean date_format_key_pressed (GtkWidget *keywidget,
784 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
787 static void date_format_entry_on_change (GtkEditable *editable,
789 static void date_format_select_row (GtkWidget *date_format_list,
792 GdkEventButton *event,
793 GtkWidget *date_format);
794 static GtkWidget *date_format_create (GtkButton *button,
797 static void prefs_keybind_select (void);
798 static gint prefs_keybind_deleted (GtkWidget *widget,
801 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
804 static void prefs_keybind_cancel (void);
805 static void prefs_keybind_apply_clicked (GtkWidget *widget);
807 static gint prefs_common_deleted (GtkWidget *widget,
810 static gboolean prefs_common_key_pressed(GtkWidget *widget,
813 static void prefs_common_ok (void);
814 static void prefs_common_apply (void);
815 static void prefs_common_cancel (void);
817 void prefs_common_init(void)
819 prefs_common.disphdr_list = NULL;
822 PrefsCommon *prefs_common_get(void)
824 return &prefs_common;
828 * Read history list from the specified history file
830 GList *prefs_common_read_history(const gchar *history)
834 gchar buf[PREFSBUFSIZE];
837 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
839 if ((fp = fopen(path, "rb")) == NULL) {
840 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
845 while (fgets(buf, sizeof(buf), fp) != NULL) {
847 if (buf[0] == '\0') continue;
848 tmp = add_history(tmp, buf);
852 tmp = g_list_reverse(tmp);
857 void prefs_common_read_config(void)
859 prefs_read_config(param, "Common", COMMON_RC);
861 prefs_common.mime_open_cmd_history =
862 prefs_common_read_history(COMMAND_HISTORY);
863 prefs_common.summary_quicksearch_history =
864 prefs_common_read_history(QUICKSEARCH_HISTORY);
868 * Save history list to the specified history file
870 void prefs_common_save_history(const gchar *history, GList *list)
876 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
878 if ((fp = fopen(path, "wb")) == NULL) {
879 FILE_OP_ERROR(path, "fopen");
884 for (cur = list; cur != NULL; cur = cur->next) {
885 fputs((gchar *)cur->data, fp);
893 void prefs_common_write_config(void)
895 prefs_write_config(param, "Common", COMMON_RC);
897 prefs_common_save_history(COMMAND_HISTORY,
898 prefs_common.mime_open_cmd_history);
899 prefs_common_save_history(QUICKSEARCH_HISTORY,
900 prefs_common.summary_quicksearch_history);
903 void prefs_common_open(void)
905 if (prefs_rc_is_readonly(COMMON_RC))
910 if (!dialog.window) {
911 prefs_common_create();
914 manage_window_set_transient(GTK_WINDOW(dialog.window));
915 gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
916 gtk_widget_grab_focus(dialog.ok_btn);
918 prefs_set_dialog(param);
920 gtk_widget_show(dialog.window);
923 static void prefs_common_create(void)
927 debug_print("Creating common preferences window...\n");
929 prefs_dialog_create(&dialog);
930 gtk_window_set_title (GTK_WINDOW(dialog.window),
931 _("Common Preferences"));
932 g_signal_connect (G_OBJECT(dialog.window), "delete_event",
933 G_CALLBACK(prefs_common_deleted), NULL);
934 g_signal_connect (G_OBJECT(dialog.window), "key_press_event",
935 G_CALLBACK(prefs_common_key_pressed), NULL);
936 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
938 g_signal_connect (G_OBJECT(dialog.ok_btn), "clicked",
939 G_CALLBACK(prefs_common_ok), NULL);
940 g_signal_connect (G_OBJECT(dialog.apply_btn), "clicked",
941 G_CALLBACK(prefs_common_apply), NULL);
942 g_signal_connect_swapped(G_OBJECT(dialog.cancel_btn), "clicked",
943 G_CALLBACK(prefs_common_cancel),
944 G_OBJECT(dialog.window));
946 /* create all widgets on notebook */
947 prefs_receive_create();
948 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
950 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
951 prefs_compose_create();
952 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
953 prefs_quote_create();
954 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
955 prefs_display_create();
956 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
957 prefs_message_create();
958 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
960 prefs_privacy_create();
961 SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++);
963 prefs_interface_create();
964 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
965 prefs_other_create();
966 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
968 gtk_widget_show_all(dialog.window);
971 static void prefs_receive_create(void)
975 GtkWidget *frame_incext;
976 GtkWidget *checkbtn_incext;
978 GtkWidget *label_incext;
979 GtkWidget *entry_incext;
980 /* GtkWidget *button_incext; */
982 GtkWidget *hbox_autochk;
983 GtkWidget *checkbtn_autochk;
984 GtkWidget *label_autochk1;
985 GtkObject *spinbtn_autochk_adj;
986 GtkWidget *spinbtn_autochk;
987 GtkWidget *label_autochk2;
988 GtkWidget *checkbtn_chkonstartup;
989 GtkWidget *checkbtn_scan_after_inc;
992 GtkWidget *frame_newmail;
993 GtkWidget *hbox_newmail_notify;
994 GtkWidget *checkbtn_newmail_auto;
995 GtkWidget *checkbtn_newmail_manu;
996 GtkWidget *entry_newmail_notify_cmd;
997 GtkWidget *label_newmail_notify_cmd;
999 GtkWidget *hbox_recvdialog;
1000 GtkWidget *label_recvdialog;
1002 GtkWidget *menuitem;
1003 GtkWidget *optmenu_recvdialog;
1004 GtkWidget *checkbtn_no_recv_err_panel;
1005 GtkWidget *checkbtn_close_recv_dialog;
1007 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1008 gtk_widget_show (vbox1);
1009 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1010 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1012 PACK_FRAME(vbox1, frame_incext, _("External program"));
1014 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1015 gtk_widget_show (vbox2);
1016 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1017 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1019 /* Use of external incorporation program */
1020 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1021 _("Use external program for incorporation"));
1023 hbox = gtk_hbox_new (FALSE, 8);
1024 gtk_widget_show (hbox);
1025 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1026 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1028 label_incext = gtk_label_new (_("Command"));
1029 gtk_widget_show (label_incext);
1030 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1032 entry_incext = gtk_entry_new ();
1033 gtk_widget_show (entry_incext);
1034 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1037 button_incext = gtk_button_new_with_label ("... ");
1038 gtk_widget_show (button_incext);
1039 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1042 vbox2 = gtk_vbox_new (FALSE, 0);
1043 gtk_widget_show (vbox2);
1044 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1047 hbox_autochk = gtk_hbox_new (FALSE, 8);
1048 gtk_widget_show (hbox_autochk);
1049 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1051 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1052 _("Auto-check new mail"));
1054 label_autochk1 = gtk_label_new (_("every"));
1055 gtk_widget_show (label_autochk1);
1056 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1058 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1059 spinbtn_autochk = gtk_spin_button_new
1060 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1061 gtk_widget_show (spinbtn_autochk);
1062 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1063 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1064 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1066 label_autochk2 = gtk_label_new (_("minute(s)"));
1067 gtk_widget_show (label_autochk2);
1068 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1070 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1071 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1072 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1074 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1075 _("Check new mail on startup"));
1076 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1077 _("Update all local folders after incorporation"));
1080 /* receive dialog */
1081 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1082 gtk_widget_show (hbox_recvdialog);
1083 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1085 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1086 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1087 gtk_widget_show (label_recvdialog);
1088 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1090 optmenu_recvdialog = gtk_option_menu_new ();
1091 gtk_widget_show (optmenu_recvdialog);
1092 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1094 menu = gtk_menu_new ();
1095 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1096 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1097 RECV_DIALOG_MANUAL);
1098 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1100 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1102 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1103 _("Don't popup error dialog on receive error"));
1105 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1106 _("Close receive dialog when finished"));
1108 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1110 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1111 gtk_widget_show (vbox2);
1112 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1113 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1115 hbox = gtk_hbox_new (TRUE, 8);
1116 gtk_widget_show (hbox);
1117 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1118 _("after autochecking"));
1119 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1120 _("after manual checking"));
1121 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1122 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1123 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1125 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1126 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1129 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1130 gtk_widget_show (hbox);
1131 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1134 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1135 "(use %d as number of new "
1137 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1139 gtk_widget_show (label_newmail_notify_cmd);
1140 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1141 label_newmail_notify_cmd, FALSE, FALSE, 0);
1143 entry_newmail_notify_cmd = gtk_entry_new ();
1144 gtk_widget_show (entry_newmail_notify_cmd);
1145 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1146 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1148 gtk_widget_set_sensitive(hbox_newmail_notify,
1149 prefs_common.newmail_notify_auto ||
1150 prefs_common.newmail_notify_manu);
1152 receive.checkbtn_incext = checkbtn_incext;
1153 receive.entry_incext = entry_incext;
1154 /* receive.button_incext = button_incext; */
1156 receive.checkbtn_autochk = checkbtn_autochk;
1157 receive.spinbtn_autochk = spinbtn_autochk;
1158 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1160 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1161 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1164 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1165 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1166 receive.hbox_newmail_notify = hbox_newmail_notify;
1167 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1168 receive.optmenu_recvdialog = optmenu_recvdialog;
1169 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1170 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1173 static void prefs_send_create(void)
1178 GtkWidget *checkbtn_savemsg;
1179 GtkWidget *label_outcharset;
1180 GtkWidget *optmenu_charset;
1181 GtkWidget *optmenu_menu;
1182 GtkWidget *menuitem;
1183 GtkTooltips *charset_tooltip;
1184 GtkWidget *optmenu_encoding;
1185 GtkWidget *label_encoding;
1186 GtkTooltips *encoding_tooltip;
1187 GtkWidget *label_senddialog;
1189 GtkWidget *optmenu_senddialog;
1190 GtkWidget *hbox_senddialog;
1192 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1193 gtk_widget_show (vbox1);
1194 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1195 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1197 vbox2 = gtk_vbox_new (FALSE, 0);
1198 gtk_widget_show (vbox2);
1199 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1201 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1202 _("Save sent messages to Sent folder"));
1204 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1205 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1207 label_senddialog = gtk_label_new (_("Show send dialog"));
1208 gtk_widget_show (label_senddialog);
1209 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1211 optmenu_senddialog = gtk_option_menu_new ();
1212 gtk_widget_show (optmenu_senddialog);
1213 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1215 menu = gtk_menu_new ();
1216 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1217 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1219 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1221 hbox1 = gtk_hbox_new (FALSE, 8);
1222 gtk_widget_show (hbox1);
1223 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1225 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1226 gtk_widget_show (label_outcharset);
1227 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1229 charset_tooltip = gtk_tooltips_new();
1231 optmenu_charset = gtk_option_menu_new ();
1232 gtk_widget_show (optmenu_charset);
1233 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1234 _("If `Automatic' is selected, the optimal encoding"
1235 " for the current locale will be used"),
1237 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1239 optmenu_menu = gtk_menu_new ();
1241 #define SET_MENUITEM(str, data) \
1243 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1246 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1247 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1249 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1251 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1252 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1253 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1254 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1255 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1256 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1257 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1259 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1261 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1263 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1264 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1266 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1268 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1269 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1271 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1272 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1274 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1275 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1277 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1278 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1279 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1281 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1284 hbox1 = gtk_hbox_new (FALSE, 8);
1285 gtk_widget_show (hbox1);
1286 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1288 hbox1 = gtk_hbox_new (FALSE, 8);
1289 gtk_widget_show (hbox1);
1290 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1292 label_encoding = gtk_label_new (_("Transfer encoding"));
1293 gtk_widget_show (label_encoding);
1294 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1296 encoding_tooltip = gtk_tooltips_new();
1298 optmenu_encoding = gtk_option_menu_new ();
1299 gtk_widget_show (optmenu_encoding);
1300 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1301 _("Specify Content-Transfer-Encoding used when"
1302 " message body contains non-ASCII characters"),
1304 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1306 optmenu_menu = gtk_menu_new ();
1308 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1309 SET_MENUITEM("base64", CTE_BASE64);
1310 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1311 SET_MENUITEM("8bit", CTE_8BIT);
1313 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1316 hbox1 = gtk_hbox_new (FALSE, 8);
1317 gtk_widget_show (hbox1);
1318 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1320 p_send.checkbtn_savemsg = checkbtn_savemsg;
1321 p_send.optmenu_senddialog = optmenu_senddialog;
1323 p_send.optmenu_charset = optmenu_charset;
1324 p_send.optmenu_encoding_method = optmenu_encoding;
1327 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1331 toggled = gtk_toggle_button_get_active
1332 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1333 gtk_toggle_button_get_active
1334 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1335 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1338 static void prefs_compose_create(void)
1343 GtkWidget *checkbtn_autoextedit;
1345 GtkWidget *frame_autosel;
1346 GtkWidget *hbox_autosel;
1347 GtkWidget *checkbtn_reply_account_autosel;
1348 GtkWidget *checkbtn_forward_account_autosel;
1349 GtkWidget *checkbtn_reedit_account_autosel;
1351 GtkWidget *hbox_undolevel;
1352 GtkWidget *label_undolevel;
1353 GtkObject *spinbtn_undolevel_adj;
1354 GtkWidget *spinbtn_undolevel;
1358 GtkWidget *checkbtn_default_reply_list;
1360 GtkWidget *checkbtn_forward_as_attachment;
1361 GtkWidget *checkbtn_redirect_keep_from;
1363 GtkWidget *hbox_autosave;
1364 GtkWidget *checkbtn_autosave;
1365 GtkWidget *entry_autosave_length;
1366 GtkWidget *label_autosave_length;
1368 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1369 gtk_widget_show (vbox1);
1370 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1371 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1373 /* Account autoselection */
1374 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1376 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1377 gtk_widget_show (hbox_autosel);
1378 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1379 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1381 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1382 _("when replying"));
1383 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1384 _("when forwarding"));
1385 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1386 _("when re-editing"));
1388 vbox2 = gtk_vbox_new (FALSE, 0);
1389 gtk_widget_show (vbox2);
1390 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1392 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1393 _("Reply button invokes mailing list reply"));
1395 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1396 _("Automatically launch the external editor"));
1398 hbox5 = gtk_hbox_new (FALSE, 8);
1399 gtk_widget_show (hbox5);
1400 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1402 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1403 _("Forward as attachment"));
1405 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1406 _("Keep the original 'From' header when redirecting"));
1409 hbox_autosave = gtk_hbox_new (FALSE, 8);
1410 gtk_widget_show (hbox_autosave);
1411 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1413 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1414 _("Autosave to Drafts folder every "));
1416 entry_autosave_length = gtk_entry_new();
1417 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1418 gtk_widget_show (entry_autosave_length);
1419 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1421 label_autosave_length = gtk_label_new(_("characters"));
1422 gtk_widget_show (label_autosave_length);
1423 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1425 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1426 gtk_widget_show (hbox_undolevel);
1427 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1429 label_undolevel = gtk_label_new (_("Undo level"));
1430 gtk_widget_show (label_undolevel);
1431 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1433 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1434 spinbtn_undolevel = gtk_spin_button_new
1435 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1436 gtk_widget_show (spinbtn_undolevel);
1437 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1438 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1439 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1442 compose.checkbtn_quote = checkbtn_quote;
1443 compose.entry_quotemark = entry_quotemark;
1444 compose.text_quotefmt = text_quotefmt;
1447 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1449 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1450 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1451 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1453 compose.spinbtn_undolevel = spinbtn_undolevel;
1454 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1456 compose.checkbtn_autosave = checkbtn_autosave;
1457 compose.entry_autosave_length = entry_autosave_length;
1459 compose.checkbtn_forward_as_attachment =
1460 checkbtn_forward_as_attachment;
1461 compose.checkbtn_redirect_keep_from =
1462 checkbtn_redirect_keep_from;
1463 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1466 static void prefs_quote_create(void)
1469 GtkWidget *frame_quote;
1470 GtkWidget *vbox_quote;
1473 GtkWidget *label_quotemark;
1474 GtkWidget *entry_quotemark;
1475 GtkWidget *scrolledwin_quotefmt;
1476 GtkWidget *text_quotefmt;
1478 GtkWidget *entry_fw_quotemark;
1479 GtkWidget *text_fw_quotefmt;
1481 GtkWidget *entry_quote_chars;
1482 GtkWidget *label_quote_chars;
1484 GtkWidget *btn_quotedesc;
1486 GtkWidget *checkbtn_reply_with_quote;
1488 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1489 gtk_widget_show (vbox1);
1490 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1491 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1495 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1497 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1499 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1500 gtk_widget_show (vbox_quote);
1501 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1502 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1504 hbox1 = gtk_hbox_new (FALSE, 32);
1505 gtk_widget_show (hbox1);
1506 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1508 hbox2 = gtk_hbox_new (FALSE, 8);
1509 gtk_widget_show (hbox2);
1510 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1512 label_quotemark = gtk_label_new (_("Quotation mark"));
1513 gtk_widget_show (label_quotemark);
1514 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1516 entry_quotemark = gtk_entry_new ();
1517 gtk_widget_show (entry_quotemark);
1518 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1519 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1521 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1522 gtk_widget_show (scrolledwin_quotefmt);
1523 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1524 gtk_scrolled_window_set_policy
1525 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1526 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1528 text_quotefmt = gtk_text_view_new ();
1529 gtk_widget_show (text_quotefmt);
1530 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1531 gtk_text_view_set_editable (GTK_TEXT_VIEW(text_quotefmt), TRUE);
1532 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1536 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1538 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1539 gtk_widget_show (vbox_quote);
1540 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1541 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1543 hbox1 = gtk_hbox_new (FALSE, 32);
1544 gtk_widget_show (hbox1);
1545 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1547 hbox2 = gtk_hbox_new (FALSE, 8);
1548 gtk_widget_show (hbox2);
1549 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1551 label_quotemark = gtk_label_new (_("Quotation mark"));
1552 gtk_widget_show (label_quotemark);
1553 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1555 entry_fw_quotemark = gtk_entry_new ();
1556 gtk_widget_show (entry_fw_quotemark);
1557 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1559 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1561 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1562 gtk_widget_show (scrolledwin_quotefmt);
1563 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1564 gtk_scrolled_window_set_policy
1565 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1566 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1568 text_fw_quotefmt = gtk_text_view_new ();
1569 gtk_widget_show (text_fw_quotefmt);
1570 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1572 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1573 gtk_widget_set_size_request(text_fw_quotefmt, -1, 60);
1575 hbox1 = gtk_hbox_new (FALSE, 32);
1576 gtk_widget_show (hbox1);
1577 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1580 gtk_button_new_with_label (_(" Description of symbols "));
1581 gtk_widget_show (btn_quotedesc);
1582 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1583 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1584 G_CALLBACK(quote_fmt_quote_description), NULL);
1588 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1590 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1591 gtk_widget_show (vbox_quote);
1592 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1593 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1595 hbox1 = gtk_hbox_new (FALSE, 32);
1596 gtk_widget_show (hbox1);
1597 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1599 hbox2 = gtk_hbox_new (FALSE, 8);
1600 gtk_widget_show (hbox2);
1601 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1603 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1604 gtk_widget_show (label_quote_chars);
1605 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1607 entry_quote_chars = gtk_entry_new ();
1608 gtk_widget_show (entry_quote_chars);
1609 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1611 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1614 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1615 quote.entry_quotemark = entry_quotemark;
1616 quote.text_quotefmt = text_quotefmt;
1617 quote.entry_fw_quotemark = entry_fw_quotemark;
1618 quote.text_fw_quotefmt = text_fw_quotefmt;
1619 quote.entry_quote_chars = entry_quote_chars;
1622 static void prefs_display_create(void)
1625 GtkWidget *chkbtn_transhdr;
1626 GtkWidget *chkbtn_folder_unread;
1628 GtkWidget *label_ng_abbrev;
1629 GtkWidget *spinbtn_ng_abbrev_len;
1630 GtkObject *spinbtn_ng_abbrev_len_adj;
1631 GtkWidget *frame_summary;
1633 GtkWidget *chkbtn_swapfrom;
1634 GtkWidget *chkbtn_useaddrbook;
1635 GtkWidget *chkbtn_threadsubj;
1637 GtkWidget *label_datefmt;
1638 GtkWidget *button_datefmt;
1639 GtkWidget *entry_datefmt;
1640 GtkWidget *button_dispitem;
1642 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1643 gtk_widget_show (vbox1);
1644 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1645 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1647 vbox2 = gtk_vbox_new (FALSE, 0);
1648 gtk_widget_show (vbox2);
1649 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1652 (vbox2, chkbtn_transhdr,
1653 _("Translate header name (such as `From:', `Subject:')"));
1655 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1656 _("Display unread number next to folder name"));
1658 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1660 hbox1 = gtk_hbox_new (FALSE, 8);
1661 gtk_widget_show (hbox1);
1662 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1664 label_ng_abbrev = gtk_label_new
1665 (_("Abbreviate newsgroup names longer than"));
1666 gtk_widget_show (label_ng_abbrev);
1667 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1669 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1670 spinbtn_ng_abbrev_len = gtk_spin_button_new
1671 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1672 gtk_widget_show (spinbtn_ng_abbrev_len);
1673 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1675 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1676 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1679 label_ng_abbrev = gtk_label_new
1681 gtk_widget_show (label_ng_abbrev);
1682 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1684 /* ---- Summary ---- */
1686 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1688 vbox2 = gtk_vbox_new (FALSE, 0);
1689 gtk_widget_show (vbox2);
1690 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1691 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1694 (vbox2, chkbtn_swapfrom,
1695 _("Display recipient in `From' column if sender is yourself"));
1697 (vbox2, chkbtn_useaddrbook,
1698 _("Display sender using address book"));
1700 (vbox2, chkbtn_threadsubj,
1701 _("Thread using subject in addition to standard headers"));
1703 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1705 hbox1 = gtk_hbox_new (FALSE, 8);
1706 gtk_widget_show (hbox1);
1707 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1709 label_datefmt = gtk_label_new (_("Date format"));
1710 gtk_widget_show (label_datefmt);
1711 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1713 entry_datefmt = gtk_entry_new ();
1714 gtk_widget_show (entry_datefmt);
1715 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1717 button_datefmt = gtk_button_new_with_label (" ... ");
1719 gtk_widget_show (button_datefmt);
1720 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1721 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1722 G_CALLBACK (date_format_create), NULL);
1724 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1726 hbox1 = gtk_hbox_new (FALSE, 8);
1727 gtk_widget_show (hbox1);
1728 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1730 button_dispitem = gtk_button_new_with_label
1731 (_(" Set displayed items in summary... "));
1732 gtk_widget_show (button_dispitem);
1733 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1734 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1735 G_CALLBACK (prefs_summary_column_open),
1738 display.chkbtn_transhdr = chkbtn_transhdr;
1739 display.chkbtn_folder_unread = chkbtn_folder_unread;
1740 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1741 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1743 display.chkbtn_swapfrom = chkbtn_swapfrom;
1744 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1745 display.chkbtn_threadsubj = chkbtn_threadsubj;
1746 display.entry_datefmt = entry_datefmt;
1749 static void prefs_message_create(void)
1755 GtkWidget *chkbtn_mbalnum;
1756 GtkWidget *chkbtn_disphdrpane;
1757 GtkWidget *chkbtn_disphdr;
1758 GtkWidget *button_edit_disphdr;
1759 GtkWidget *hbox_linespc;
1760 GtkWidget *label_linespc;
1761 GtkObject *spinbtn_linespc_adj;
1762 GtkWidget *spinbtn_linespc;
1763 GtkWidget *chkbtn_headspc;
1765 GtkWidget *frame_scr;
1766 GtkWidget *vbox_scr;
1767 GtkWidget *chkbtn_smoothscroll;
1768 GtkWidget *hbox_scr;
1769 GtkWidget *label_scr;
1770 GtkObject *spinbtn_scrollstep_adj;
1771 GtkWidget *spinbtn_scrollstep;
1772 GtkWidget *chkbtn_halfpage;
1774 GtkWidget *chkbtn_attach_desc;
1776 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1777 gtk_widget_show (vbox1);
1778 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1779 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1781 vbox2 = gtk_vbox_new (FALSE, 0);
1782 gtk_widget_show (vbox2);
1783 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1786 (vbox2, chkbtn_mbalnum,
1787 _("Display multi-byte alphanumeric as\n"
1788 "ASCII character (Japanese only)"));
1789 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1792 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1793 _("Display header pane above message view"));
1795 hbox1 = gtk_hbox_new (FALSE, 8);
1796 gtk_widget_show (hbox1);
1797 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1799 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1800 _("Display short headers on message view"));
1802 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1803 gtk_widget_show (button_edit_disphdr);
1804 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1806 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1807 G_CALLBACK (prefs_display_header_open),
1810 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1812 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1814 hbox1 = gtk_hbox_new (FALSE, 32);
1815 gtk_widget_show (hbox1);
1816 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1818 hbox_linespc = gtk_hbox_new (FALSE, 8);
1819 gtk_widget_show (hbox1);
1820 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1822 label_linespc = gtk_label_new (_("Line space"));
1823 gtk_widget_show (label_linespc);
1824 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1827 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1828 spinbtn_linespc = gtk_spin_button_new
1829 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1830 gtk_widget_show (spinbtn_linespc);
1831 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1833 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1834 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1836 label_linespc = gtk_label_new (_("pixel(s)"));
1837 gtk_widget_show (label_linespc);
1838 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1841 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Indent text"));
1843 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1845 vbox_scr = gtk_vbox_new (FALSE, 0);
1846 gtk_widget_show (vbox_scr);
1847 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1848 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1850 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1852 hbox1 = gtk_hbox_new (FALSE, 32);
1853 gtk_widget_show (hbox1);
1854 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1856 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1858 hbox_scr = gtk_hbox_new (FALSE, 8);
1859 gtk_widget_show (hbox_scr);
1860 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1862 label_scr = gtk_label_new (_("Step"));
1863 gtk_widget_show (label_scr);
1864 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1866 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1867 spinbtn_scrollstep = gtk_spin_button_new
1868 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1869 gtk_widget_show (spinbtn_scrollstep);
1870 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1872 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1873 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1876 label_scr = gtk_label_new (_("pixel(s)"));
1877 gtk_widget_show (label_scr);
1878 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1880 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1882 vbox3 = gtk_vbox_new (FALSE, 0);
1883 gtk_widget_show (vbox3);
1884 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1886 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1887 _("Show attachment descriptions (rather than names)"));
1889 message.chkbtn_mbalnum = chkbtn_mbalnum;
1890 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1891 message.chkbtn_disphdr = chkbtn_disphdr;
1892 message.spinbtn_linespc = spinbtn_linespc;
1893 message.chkbtn_headspc = chkbtn_headspc;
1895 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1896 message.spinbtn_scrollstep = spinbtn_scrollstep;
1897 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1898 message.chkbtn_halfpage = chkbtn_halfpage;
1900 message.chkbtn_attach_desc = chkbtn_attach_desc;
1904 static void prefs_privacy_create(void)
1910 GtkWidget *hbox_spc;
1912 GtkWidget *checkbtn_auto_check_signatures;
1913 GtkWidget *checkbtn_store_passphrase;
1914 GtkObject *spinbtn_store_passphrase_adj;
1915 GtkWidget *spinbtn_store_passphrase;
1916 GtkTooltips *store_tooltip;
1917 GtkWidget *checkbtn_passphrase_grab;
1918 GtkWidget *checkbtn_gpg_warning;
1920 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1921 gtk_widget_show (vbox1);
1922 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1923 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1925 vbox2 = gtk_vbox_new (FALSE, 0);
1926 gtk_widget_show (vbox2);
1927 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1929 PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures,
1930 _("Automatically check signatures"));
1932 PACK_CHECK_BUTTON (vbox2, checkbtn_store_passphrase,
1933 _("Store passphrase in memory temporarily"));
1935 vbox3 = gtk_vbox_new (FALSE, 0);
1936 gtk_widget_show (vbox3);
1937 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1939 hbox1 = gtk_hbox_new (FALSE, 8);
1940 gtk_widget_show (hbox1);
1941 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1943 hbox_spc = gtk_hbox_new (FALSE, 0);
1944 gtk_widget_show (hbox_spc);
1945 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
1946 gtk_widget_set_size_request (hbox_spc, 12, -1);
1948 label = gtk_label_new (_("Expire after"));
1949 gtk_widget_show (label);
1950 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1952 store_tooltip = gtk_tooltips_new();
1954 spinbtn_store_passphrase_adj = gtk_adjustment_new (0, 0, 1440, 1, 5, 5);
1955 spinbtn_store_passphrase = gtk_spin_button_new
1956 (GTK_ADJUSTMENT (spinbtn_store_passphrase_adj), 1, 0);
1957 gtk_widget_show (spinbtn_store_passphrase);
1958 gtk_tooltips_set_tip(GTK_TOOLTIPS(store_tooltip), spinbtn_store_passphrase,
1959 _("Setting to '0' will store the passphrase"
1960 " for the whole session"),
1962 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_store_passphrase, FALSE, FALSE, 0);
1963 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_store_passphrase),
1965 gtk_widget_set_size_request (spinbtn_store_passphrase, 64, -1);
1967 label = gtk_label_new (_("minute(s) "));
1968 gtk_widget_show (label);
1969 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1971 hbox1 = gtk_hbox_new (FALSE, 8);
1972 gtk_widget_show (hbox1);
1973 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1975 hbox_spc = gtk_hbox_new (FALSE, 0);
1976 gtk_widget_show (hbox_spc);
1977 gtk_box_pack_start (GTK_BOX (hbox1), hbox_spc, FALSE, FALSE, 0);
1978 gtk_widget_set_size_request (hbox_spc, 12, -1);
1980 SET_TOGGLE_SENSITIVITY (checkbtn_store_passphrase, vbox3);
1983 PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab,
1984 _("Grab input while entering a passphrase"));
1988 (vbox2, checkbtn_gpg_warning,
1989 _("Display warning on startup if GnuPG doesn't work"));
1991 hbox1 = gtk_hbox_new (FALSE, 8);
1992 gtk_widget_show (hbox1);
1993 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1995 privacy.checkbtn_auto_check_signatures
1996 = checkbtn_auto_check_signatures;
1997 privacy.checkbtn_store_passphrase = checkbtn_store_passphrase;
1998 privacy.spinbtn_store_passphrase = spinbtn_store_passphrase;
1999 privacy.spinbtn_store_passphrase_adj = spinbtn_store_passphrase_adj;
2000 privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab;
2001 privacy.checkbtn_gpg_warning = checkbtn_gpg_warning;
2003 #endif /* USE_GPGME */
2005 static void prefs_interface_create(void)
2010 /* GtkWidget *checkbtn_emacs; */
2011 GtkWidget *checkbtn_always_show_msg;
2012 GtkWidget *checkbtn_openunread;
2013 GtkWidget *checkbtn_mark_as_read_on_newwin;
2014 GtkWidget *checkbtn_openinbox;
2015 GtkWidget *checkbtn_immedexec;
2016 GtkTooltips *immedexec_tooltip;
2020 GtkWidget *menuitem;
2022 GtkWidget *button_keybind;
2024 GtkWidget *hbox_nextunreadmsgdialog;
2025 GtkWidget *optmenu_nextunreadmsgdialog;
2027 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2028 gtk_widget_show (vbox1);
2029 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2030 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2032 vbox2 = gtk_vbox_new (FALSE, 0);
2033 gtk_widget_show (vbox2);
2034 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
2036 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
2037 _("Emulate the behavior of mouse operation of\n"
2038 "Emacs-based mailer"));
2039 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
2040 GTK_JUSTIFY_LEFT); */
2043 (vbox2, checkbtn_always_show_msg,
2044 _("Always open messages in summary when selected"));
2047 (vbox2, checkbtn_openunread,
2048 _("Open first unread message when entering a folder"));
2051 (vbox2, checkbtn_mark_as_read_on_newwin,
2052 _("Only mark message as read when opened in new window"));
2055 (vbox2, checkbtn_openinbox,
2056 _("Go to inbox after receiving new mail"));
2058 vbox3 = gtk_vbox_new (FALSE, 0);
2059 gtk_widget_show (vbox3);
2060 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
2062 immedexec_tooltip = gtk_tooltips_new();
2065 (vbox3, checkbtn_immedexec,
2066 _("Execute immediately when moving or deleting messages"));
2067 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
2068 _("Messages will be marked until execution"
2069 " if this is turned off"),
2072 hbox1 = gtk_hbox_new (FALSE, 0);
2073 gtk_widget_show (hbox1);
2074 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2076 /* Next Unread Message Dialog */
2077 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
2078 gtk_widget_show (hbox1);
2079 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
2081 label = gtk_label_new (_("Show no-unread-message dialog"));
2082 gtk_widget_show (label);
2083 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
2085 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2086 gtk_widget_show (optmenu_nextunreadmsgdialog);
2087 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2089 menu = gtk_menu_new ();
2090 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2091 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2092 NEXTUNREADMSGDIALOG_ASSUME_YES);
2093 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2094 NEXTUNREADMSGDIALOG_ASSUME_NO);
2096 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2098 hbox1 = gtk_hbox_new (FALSE, 8);
2099 gtk_widget_show (hbox1);
2100 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2102 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2103 gtk_widget_show (button_keybind);
2104 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2105 g_signal_connect (G_OBJECT (button_keybind), "clicked",
2106 G_CALLBACK (prefs_keybind_select), NULL);
2108 /* interface.checkbtn_emacs = checkbtn_emacs; */
2109 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2110 interface.checkbtn_openunread = checkbtn_openunread;
2111 interface.checkbtn_mark_as_read_on_newwin
2112 = checkbtn_mark_as_read_on_newwin;
2113 interface.checkbtn_openinbox = checkbtn_openinbox;
2114 interface.checkbtn_immedexec = checkbtn_immedexec;
2115 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2118 static void prefs_other_create(void)
2123 GtkWidget *frame_addr;
2124 GtkWidget *vbox_addr;
2125 GtkWidget *checkbtn_addaddrbyclick;
2127 GtkWidget *frame_cliplog;
2128 GtkWidget *vbox_cliplog;
2129 GtkWidget *hbox_cliplog;
2130 GtkWidget *checkbtn_cliplog;
2131 GtkWidget *loglength_label;
2132 GtkWidget *loglength_entry;
2133 GtkTooltips *loglength_tooltip;
2135 GtkWidget *frame_exit;
2136 GtkWidget *vbox_exit;
2137 GtkWidget *checkbtn_confonexit;
2138 GtkWidget *checkbtn_cleanonexit;
2139 GtkWidget *checkbtn_askonclean;
2140 GtkWidget *checkbtn_warnqueued;
2142 GtkWidget *label_iotimeout;
2143 GtkWidget *spinbtn_iotimeout;
2144 GtkObject *spinbtn_iotimeout_adj;
2148 GtkWidget *frame_ssl;
2149 GtkWidget *vbox_ssl;
2150 GtkWidget *hbox_ssl;
2151 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2154 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2155 gtk_widget_show (vbox1);
2156 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2157 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2159 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2161 vbox_addr = gtk_vbox_new (FALSE, 0);
2162 gtk_widget_show (vbox_addr);
2163 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2164 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2167 (vbox_addr, checkbtn_addaddrbyclick,
2168 _("Add address to destination when double-clicked"));
2171 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2173 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2174 gtk_widget_show (vbox_cliplog);
2175 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2176 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2177 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2178 _("Clip the log size"));
2179 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2180 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2181 gtk_widget_show (hbox_cliplog);
2183 loglength_label = gtk_label_new (_("Log window length"));
2184 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2186 gtk_widget_show (GTK_WIDGET (loglength_label));
2188 loglength_tooltip = gtk_tooltips_new();
2190 loglength_entry = gtk_entry_new ();
2191 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2192 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2194 gtk_widget_show (GTK_WIDGET (loglength_entry));
2195 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2196 _("0 to stop logging in the log window"),
2198 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2200 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2205 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2207 vbox_ssl = gtk_vbox_new (FALSE, 0);
2208 gtk_widget_show (vbox_ssl);
2209 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2210 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2211 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2212 _("Ask before accepting SSL certificates"));
2213 hbox_ssl = gtk_hbox_new (FALSE, 3);
2214 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2215 gtk_widget_show (hbox_ssl);
2220 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2222 vbox_exit = gtk_vbox_new (FALSE, 0);
2223 gtk_widget_show (vbox_exit);
2224 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2225 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2227 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2228 _("Confirm on exit"));
2230 hbox1 = gtk_hbox_new (FALSE, 32);
2231 gtk_widget_show (hbox1);
2232 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2234 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2235 _("Empty trash on exit"));
2236 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2237 _("Ask before emptying"));
2238 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2240 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2241 _("Warn if there are queued messages"));
2243 hbox1 = gtk_hbox_new (FALSE, 8);
2244 gtk_widget_show (hbox1);
2245 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2247 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2248 gtk_widget_show (label_iotimeout);
2249 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2251 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2252 spinbtn_iotimeout = gtk_spin_button_new
2253 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2254 gtk_widget_show (spinbtn_iotimeout);
2255 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2257 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2258 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2260 label_iotimeout = gtk_label_new (_("seconds"));
2261 gtk_widget_show (label_iotimeout);
2262 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2264 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2266 other.checkbtn_cliplog = checkbtn_cliplog;
2267 other.loglength_entry = loglength_entry;
2269 other.checkbtn_confonexit = checkbtn_confonexit;
2270 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2271 other.checkbtn_askonclean = checkbtn_askonclean;
2272 other.checkbtn_warnqueued = checkbtn_warnqueued;
2274 other.spinbtn_iotimeout = spinbtn_iotimeout;
2275 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2279 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2284 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2286 GtkWidget *datefmt_sample = NULL;
2289 g_return_if_fail(widget != NULL);
2290 g_return_if_fail(*widget != NULL);
2291 g_return_if_fail(display.entry_datefmt != NULL);
2293 datefmt_sample = GTK_WIDGET(g_object_get_data
2294 (G_OBJECT(*widget), "datefmt_sample"));
2295 g_return_if_fail(datefmt_sample != NULL);
2297 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2298 g_free(prefs_common.date_format);
2299 prefs_common.date_format = text;
2300 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2302 gtk_widget_destroy(*widget);
2306 static void date_format_cancel_btn_clicked(GtkButton *button,
2309 g_return_if_fail(widget != NULL);
2310 g_return_if_fail(*widget != NULL);
2312 gtk_widget_destroy(*widget);
2316 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2319 if (event && event->keyval == GDK_Escape)
2320 date_format_cancel_btn_clicked(NULL, widget);
2324 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2325 GdkEventAny *event, GtkWidget **widget)
2327 g_return_val_if_fail(widget != NULL, FALSE);
2328 g_return_val_if_fail(*widget != NULL, FALSE);
2334 static void date_format_entry_on_change(GtkEditable *editable,
2338 struct tm *cal_time;
2342 cur_time = time(NULL);
2343 cal_time = localtime(&cur_time);
2345 text = gtk_editable_get_chars(editable, 0, -1);
2347 strftime(buffer, sizeof buffer, text, cal_time);
2350 text = conv_codeset_strdup(buffer,
2351 conv_get_current_charset_str(),
2354 text = g_strdup(buffer);
2356 gtk_label_set_text(example, text);
2361 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2362 gint column, GdkEventButton *event,
2363 GtkWidget *date_format)
2367 const gchar *old_format;
2369 GtkWidget *datefmt_sample;
2371 /* only on double click */
2372 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2375 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2378 g_return_if_fail(date_format_list != NULL);
2379 g_return_if_fail(date_format != NULL);
2380 g_return_if_fail(datefmt_sample != NULL);
2382 /* get format from clist */
2383 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2385 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2386 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2388 /* insert the format into the text entry */
2389 new_format = g_malloc(strlen(old_format) + 3);
2391 strncpy(new_format, old_format, cur_pos);
2392 new_format[cur_pos] = '\0';
2393 strcat(new_format, format);
2394 strcat(new_format, &old_format[cur_pos]);
2396 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2397 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2402 static GtkWidget *date_format_create(GtkButton *button, void *data)
2404 static GtkWidget *datefmt_win = NULL;
2406 GtkWidget *scrolledwindow1;
2407 GtkWidget *datefmt_clist;
2412 GtkWidget *confirm_area;
2414 GtkWidget *cancel_btn;
2415 GtkWidget *datefmt_entry;
2444 const gint TIME_FORMAT_ELEMS =
2445 sizeof time_format / sizeof time_format[0];
2447 time_format[0].txt = _("the full abbreviated weekday name");
2448 time_format[1].txt = _("the full weekday name");
2449 time_format[2].txt = _("the abbreviated month name");
2450 time_format[3].txt = _("the full month name");
2451 time_format[4].txt = _("the preferred date and time for the current locale");
2452 time_format[5].txt = _("the century number (year/100)");
2453 time_format[6].txt = _("the day of the month as a decimal number");
2454 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2455 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2456 time_format[9].txt = _("the day of the year as a decimal number");
2457 time_format[10].txt = _("the month as a decimal number");
2458 time_format[11].txt = _("the minute as a decimal number");
2459 time_format[12].txt = _("either AM or PM");
2460 time_format[13].txt = _("the second as a decimal number");
2461 time_format[14].txt = _("the day of the week as a decimal number");
2462 time_format[15].txt = _("the preferred date for the current locale");
2463 time_format[16].txt = _("the last two digits of a year");
2464 time_format[17].txt = _("the year as a decimal number");
2465 time_format[18].txt = _("the time zone or name or abbreviation");
2467 if (datefmt_win) return datefmt_win;
2469 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2470 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2471 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2472 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2473 gtk_widget_set_size_request(datefmt_win, 440, 280);
2475 vbox1 = gtk_vbox_new(FALSE, 10);
2476 gtk_widget_show(vbox1);
2477 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2479 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2480 gtk_scrolled_window_set_policy
2481 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2482 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2483 gtk_widget_show(scrolledwindow1);
2484 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2486 titles[0] = _("Specifier");
2487 titles[1] = _("Description");
2488 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2489 gtk_widget_show(datefmt_clist);
2490 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2491 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2492 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2493 GTK_SELECTION_BROWSE);
2495 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2497 /* phoney casting necessary because of gtk... */
2498 text[0] = (gchar *)time_format[i].fmt;
2499 text[1] = (gchar *)time_format[i].txt;
2500 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2503 table = gtk_table_new(2, 2, FALSE);
2504 gtk_widget_show(table);
2505 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2506 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2507 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2509 label1 = gtk_label_new(_("Date format"));
2510 gtk_widget_show(label1);
2511 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2513 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2514 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2516 datefmt_entry = gtk_entry_new();
2517 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2518 gtk_widget_show(datefmt_entry);
2519 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2520 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2522 /* we need the "sample" entry box; add it as data so callbacks can
2523 * get the entry box */
2524 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2527 label2 = gtk_label_new(_("Example"));
2528 gtk_widget_show(label2);
2529 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2531 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2532 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2534 label3 = gtk_label_new("");
2535 gtk_widget_show(label3);
2536 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2537 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2538 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2539 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2541 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2542 &cancel_btn, _("Cancel"), NULL, NULL);
2543 gtk_widget_grab_default(ok_btn);
2544 gtk_widget_show(confirm_area);
2546 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2548 /* set the current format */
2549 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2550 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2553 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2554 G_CALLBACK(date_format_ok_btn_clicked),
2556 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2557 G_CALLBACK(date_format_cancel_btn_clicked),
2559 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2560 G_CALLBACK(date_format_key_pressed),
2562 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2563 G_CALLBACK(date_format_on_delete),
2565 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2566 G_CALLBACK(date_format_entry_on_change),
2569 g_signal_connect(G_OBJECT(datefmt_clist), "select_row",
2570 G_CALLBACK(date_format_select_row),
2573 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2574 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2576 gtk_widget_show(datefmt_win);
2577 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2579 gtk_widget_grab_focus(ok_btn);
2584 static void prefs_keybind_select(void)
2591 GtkWidget *confirm_area;
2593 GtkWidget *cancel_btn;
2595 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2596 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2597 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2598 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2599 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2600 gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE);
2601 manage_window_set_transient (GTK_WINDOW (window));
2603 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2604 gtk_container_add (GTK_CONTAINER (window), vbox1);
2605 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2607 hbox1 = gtk_hbox_new (FALSE, 8);
2608 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2610 label = gtk_label_new
2611 (_("Select preset:"));
2612 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2613 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2615 hbox1 = gtk_hbox_new (FALSE, 8);
2616 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2618 combo = gtk_combo_new ();
2619 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2620 gtkut_combo_set_items (GTK_COMBO (combo),
2626 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2628 hbox1 = gtk_hbox_new (FALSE, 8);
2629 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2631 label = gtk_label_new
2632 (_("You can also modify each menu shortcut by pressing\n"
2633 "any key(s) when placing the mouse pointer on the item."));
2634 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2635 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2637 hbox1 = gtk_hbox_new (FALSE, 8);
2638 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2640 gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
2641 &cancel_btn, _("Cancel"), NULL, NULL);
2642 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2643 gtk_widget_grab_default (ok_btn);
2645 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2646 g_signal_connect (G_OBJECT (window), "delete_event",
2647 G_CALLBACK (prefs_keybind_deleted), NULL);
2648 g_signal_connect (G_OBJECT (window), "key_press_event",
2649 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2650 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2651 G_CALLBACK (prefs_keybind_apply_clicked),
2653 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2654 G_CALLBACK (prefs_keybind_cancel),
2657 gtk_widget_show_all(window);
2659 keybind.window = window;
2660 keybind.combo = combo;
2663 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2666 if (event && event->keyval == GDK_Escape)
2667 prefs_keybind_cancel();
2671 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2674 prefs_keybind_cancel();
2678 static void prefs_keybind_cancel(void)
2680 gtk_widget_destroy(keybind.window);
2681 keybind.window = NULL;
2682 keybind.combo = NULL;
2686 const gchar *accel_path;
2687 const gchar *accel_key;
2690 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2694 GdkModifierType mods;
2696 for (i = 0; i < num; i++) {
2697 const gchar *accel_key
2698 = keybind[i].accel_key ? keybind[i].accel_key : "";
2699 gtk_accelerator_parse(accel_key, &key, &mods);
2700 gtk_accel_map_change_entry(keybind[i].accel_path,
2705 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2707 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2709 struct KeyBind *menurc;
2712 static struct KeyBind default_menurc[] = {
2713 {"<Main>/File/Empty trash", ""},
2714 {"<Main>/File/Save as...", "<control>S"},
2715 {"<Main>/File/Print...", ""},
2716 {"<Main>/File/Exit", "<control>Q"},
2718 {"<Main>/Edit/Copy", "<control>C"},
2719 {"<Main>/Edit/Select all", "<control>A"},
2720 {"<Main>/Edit/Find in current message...", "<control>F"},
2721 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2723 {"<Main>/View/Expand Summary View", "V"},
2724 {"<Main>/View/Expand Message View", "<shift>V"},
2725 {"<Main>/View/Thread view", "<control>T"},
2726 {"<Main>/View/Go to/Prev message", "P"},
2727 {"<Main>/View/Go to/Next message", "N"},
2728 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2729 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2730 {"<Main>/View/Go to/Other folder...", "G"},
2731 {"<Main>/View/Open in new window", "<control><alt>N"},
2732 {"<Main>/View/View source", "<control>U"},
2733 {"<Main>/View/Show all headers", "<control>H"},
2734 {"<Main>/View/Update", "<control><alt>U"},
2736 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2737 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2738 {"<Main>/Message/Compose an email message", "<control>M"},
2739 {"<Main>/Message/Reply", "<control>R"},
2740 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2741 {"<Main>/Message/Reply to/sender", ""},
2742 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2743 {"<Main>/Message/Forward", "<control><alt>F"},
2744 /* {"<Main>/Message/Forward as attachment", ""}, */
2745 {"<Main>/Message/Move...", "<control>O"},
2746 {"<Main>/Message/Copy...", "<shift><control>O"},
2747 {"<Main>/Message/Delete", "<control>D"},
2748 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2749 {"<Main>/Message/Mark/Unmark", "U"},
2750 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2751 {"<Main>/Message/Mark/Mark as read", ""},
2753 {"<Main>/Tools/Address book", "<shift><control>A"},
2754 {"<Main>/Tools/Execute", "X"},
2755 {"<Main>/Tools/Log window", "<shift><control>L"},
2757 {"<Compose>/File/Close", "<control>W"},
2758 {"<Compose>/Edit/Select all", "<control>A"},
2759 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2760 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2761 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2762 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2763 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2766 static struct KeyBind mew_wl_menurc[] = {
2767 {"<Main>/File/Empty trash", "<shift>D"},
2768 {"<Main>/File/Save as...", "Y"},
2769 {"<Main>/File/Print...", "<shift>numbersign"},
2770 {"<Main>/File/Exit", "<shift>Q"},
2772 {"<Main>/Edit/Copy", "<control>C"},
2773 {"<Main>/Edit/Select all", "<control>A"},
2774 {"<Main>/Edit/Find in current message...", "<control>F"},
2775 {"<Main>/Edit/Search folder...", "<control>S"},
2777 {"<Main>/View/Expand Summary View", ""},
2778 {"<Main>/View/Expand Message View", ""},
2779 {"<Main>/View/Thread view", "<shift>T"},
2780 {"<Main>/View/Go to/Prev message", "P"},
2781 {"<Main>/View/Go to/Next message", "N"},
2782 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2783 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2784 {"<Main>/View/Go to/Other folder...", "G"},
2785 {"<Main>/View/Open in new window", "<control><alt>N"},
2786 {"<Main>/View/View source", "<control>U"},
2787 {"<Main>/View/Show all headers", "<shift>H"},
2788 {"<Main>/View/Update", "<shift>S"},
2790 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2791 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2792 {"<Main>/Message/Compose an email message", "W"},
2793 {"<Main>/Message/Reply", "<control>R"},
2794 {"<Main>/Message/Reply to/all", "<shift>A"},
2795 {"<Main>/Message/Reply to/sender", ""},
2796 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2797 {"<Main>/Message/Forward", "F"},
2798 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2799 {"<Main>/Message/Move...", "O"},
2800 {"<Main>/Message/Copy...", "<shift>O"},
2801 {"<Main>/Message/Delete", "D"},
2802 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2803 {"<Main>/Message/Mark/Unmark", "U"},
2804 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2805 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2807 {"<Main>/Tools/Address book", "<shift><control>A"},
2808 {"<Main>/Tools/Execute", "X"},
2809 {"<Main>/Tools/Log window", "<shift><control>L"},
2811 {"<Compose>/File/Close", "<alt>W"},
2812 {"<Compose>/Edit/Select all", ""},
2813 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2814 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2815 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2816 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2817 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2820 static struct KeyBind mutt_menurc[] = {
2821 {"<Main>/File/Empty trash", ""},
2822 {"<Main>/File/Save as...", "S"},
2823 {"<Main>/File/Print...", "P"},
2824 {"<Main>/File/Exit", "Q"},
2826 {"<Main>/Edit/Copy", "<control>C"},
2827 {"<Main>/Edit/Select all", "<control>A"},
2828 {"<Main>/Edit/Find in current message...", "<control>F"},
2829 {"<Main>/Edit/Search messages...", "slash"},
2831 {"<Main>/View/Toggle summary view", "V"},
2832 {"<Main>/View/Thread view", "<control>T"},
2833 {"<Main>/View/Go to/Prev message", ""},
2834 {"<Main>/View/Go to/Next message", ""},
2835 {"<Main>/View/Go to/Prev unread message", ""},
2836 {"<Main>/View/Go to/Next unread message", ""},
2837 {"<Main>/View/Go to/Other folder...", "C"},
2838 {"<Main>/View/Open in new window", "<control><alt>N"},
2839 {"<Main>/View/View source", "<control>U"},
2840 {"<Main>/View/Show all headers", "<control>H"},
2841 {"<Main>/View/Update", "<control><alt>U"},
2843 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2844 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2845 {"<Main>/Message/Compose an email message", "M"},
2846 {"<Main>/Message/Reply", "R"},
2847 {"<Main>/Message/Reply to/all", "G"},
2848 {"<Main>/Message/Reply to/sender", ""},
2849 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2850 {"<Main>/Message/Forward", "F"},
2851 {"<Main>/Message/Forward as attachment", ""},
2852 {"<Main>/Message/Move...", "<control>O"},
2853 {"<Main>/Message/Copy...", "<shift>C"},
2854 {"<Main>/Message/Delete", "D"},
2855 {"<Main>/Message/Mark/Mark", "<shift>F"},
2856 {"<Main>/Message/Mark/Unmark", "U"},
2857 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2858 {"<Main>/Message/Mark/Mark as read", ""},
2860 {"<Main>/Tools/Address book", "<shift><control>A"},
2861 {"<Main>/Tools/Execute", "X"},
2862 {"<Main>/Tools/Log window", "<shift><control>L"},
2864 {"<Compose>/File/Close", "<alt>W"},
2865 {"<Compose>/Edit/Select all", ""},
2866 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2867 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2868 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2869 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2870 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2873 static struct KeyBind old_sylpheed_menurc[] = {
2874 {"<Main>/File/Empty trash", ""},
2875 {"<Main>/File/Save as...", ""},
2876 {"<Main>/File/Print...", "<alt>P"},
2877 {"<Main>/File/Exit", "<alt>Q"},
2879 {"<Main>/Edit/Copy", "<control>C"},
2880 {"<Main>/Edit/Select all", "<control>A"},
2881 {"<Main>/Edit/Find in current message...", "<control>F"},
2882 {"<Main>/Edit/Search folder...", "<control>S"},
2884 {"<Main>/View/Expand Summary View", ""},
2885 {"<Main>/View/Expand Message View", ""},
2886 {"<Main>/View/Thread view", "<control>T"},
2887 {"<Main>/View/Go to/Prev message", "P"},
2888 {"<Main>/View/Go to/Next message", "N"},
2889 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2890 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2891 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2892 {"<Main>/View/Open in new window", "<shift><control>N"},
2893 {"<Main>/View/View source", "<control>U"},
2894 {"<Main>/View/Show all headers", "<control>H"},
2895 {"<Main>/View/Update", "<alt>U"},
2897 {"<Main>/Message/Receive/Get new mail", "<alt>I"},
2898 {"<Main>/Message/Receive/Get from all accounts", "<shift><alt>I"},
2899 {"<Main>/Message/Compose an email message", "<alt>N"},
2900 {"<Main>/Message/Reply", "<alt>R"},
2901 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2902 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2903 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2904 {"<Main>/Message/Forward", "<shift><alt>F"},
2905 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2906 {"<Main>/Message/Move...", "<alt>O"},
2907 {"<Main>/Message/Copy...", ""},
2908 {"<Main>/Message/Delete", "<alt>D"},
2909 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2910 {"<Main>/Message/Mark/Unmark", "U"},
2911 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2912 {"<Main>/Message/Mark/Mark as read", ""},
2914 {"<Main>/Tools/Address book", "<alt>A"},
2915 {"<Main>/Tools/Execute", "<alt>X"},
2916 {"<Main>/Tools/Log window", "<alt>L"},
2918 {"<Compose>/File/Close", "<alt>W"},
2919 {"<Compose>/Edit/Select all", ""},
2920 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2921 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2922 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2923 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2924 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2927 text = gtk_entry_get_text(entry);
2929 if (!strcmp(text, _("Default"))) {
2930 menurc = default_menurc;
2931 n_menurc = G_N_ELEMENTS(default_menurc);
2932 } else if (!strcmp(text, "Mew / Wanderlust")) {
2933 menurc = mew_wl_menurc;
2934 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2935 } else if (!strcmp(text, "Mutt")) {
2936 menurc = mutt_menurc;
2937 n_menurc = G_N_ELEMENTS(mutt_menurc);
2938 } else if (!strcmp(text, _("Old Sylpheed"))) {
2939 menurc = old_sylpheed_menurc;
2940 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2945 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2946 prefs_keybind_apply(menurc, n_menurc);
2948 gtk_widget_destroy(keybind.window);
2949 keybind.window = NULL;
2950 keybind.combo = NULL;
2953 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2956 GtkWidget *menuitem;
2959 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2960 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2961 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2962 g_free(*((gchar **)pparam->data));
2963 *((gchar **)pparam->data) = g_strdup(charset);
2966 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2968 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2971 g_return_if_fail(optmenu != NULL);
2972 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2974 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2975 (GCompareFunc)strcmp);
2977 gtk_option_menu_set_history(optmenu, index);
2979 gtk_option_menu_set_history(optmenu, 0);
2980 prefs_common_charset_set_data_from_optmenu(pparam);
2984 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2987 GtkWidget *menuitem;
2989 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2990 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2991 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2992 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2995 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2997 TransferEncodingMethod method =
2998 *((TransferEncodingMethod *)pparam->data);
2999 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3002 g_return_if_fail(optmenu != NULL);
3004 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
3007 gtk_option_menu_set_history(optmenu, index);
3009 gtk_option_menu_set_history(optmenu, 0);
3010 prefs_common_encoding_set_data_from_optmenu(pparam);
3014 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
3017 GtkWidget *menuitem;
3019 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3020 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3021 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
3022 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3025 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
3027 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
3028 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3030 GtkWidget *menuitem;
3033 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
3036 gtk_option_menu_set_history(optmenu, index);
3038 gtk_option_menu_set_history(optmenu, 0);
3039 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
3042 menu = gtk_option_menu_get_menu(optmenu);
3043 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3044 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3047 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
3050 GtkWidget *menuitem;
3052 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3053 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3054 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
3055 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3058 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
3060 SendDialogMode mode = *((SendDialogMode *)pparam->data);
3061 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3063 GtkWidget *menuitem;
3066 case SEND_DIALOG_ALWAYS:
3067 gtk_option_menu_set_history(optmenu, 0);
3069 case SEND_DIALOG_NEVER:
3070 gtk_option_menu_set_history(optmenu, 1);
3076 menu = gtk_option_menu_get_menu(optmenu);
3077 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3078 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3081 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
3084 prefs_common_cancel();
3088 static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
3091 if (event && event->keyval == GDK_Escape)
3092 prefs_common_cancel();
3096 static void prefs_common_ok(void)
3098 prefs_common_apply();
3099 gtk_widget_hide(dialog.window);
3104 static void prefs_common_apply(void)
3106 MainWindow *mainwindow;
3108 prefs_set_data_from_dialog(param);
3109 sock_set_io_timeout(prefs_common.io_timeout_secs);
3110 main_window_reflect_prefs_all_real(FALSE);
3111 prefs_common_write_config();
3113 mainwindow = mainwindow_get_mainwindow();
3114 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3115 prefs_common.loglength);
3117 inc_autocheck_timer_remove();
3118 inc_autocheck_timer_set();
3121 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3124 GtkWidget *menuitem;
3126 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3127 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3128 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3129 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3132 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3134 NextUnreadMsgDialogShow dialog_show;
3135 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3137 GtkWidget *menuitem;
3139 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3141 switch (dialog_show) {
3142 case NEXTUNREADMSGDIALOG_ALWAYS:
3143 gtk_option_menu_set_history(optmenu, 0);
3145 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3146 gtk_option_menu_set_history(optmenu, 1);
3148 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3149 gtk_option_menu_set_history(optmenu, 2);
3153 menu = gtk_option_menu_get_menu(optmenu);
3154 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3155 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3158 static void prefs_common_cancel(void)
3160 gtk_widget_hide(dialog.window);
3165 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3168 GtkWidget *menuitem;
3170 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3171 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3172 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3173 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3176 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3178 RecvDialogShow dialog_show;
3179 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3181 GtkWidget *menuitem;
3183 dialog_show = *((RecvDialogShow *)pparam->data);
3185 switch (dialog_show) {
3186 case RECVDIALOG_ALWAYS:
3187 gtk_option_menu_set_history(optmenu, 0);
3189 case RECVDIALOG_WINDOW_ACTIVE:
3190 gtk_option_menu_set_history(optmenu, 1);
3192 case RECVDIALOG_NEVER:
3193 gtk_option_menu_set_history(optmenu, 2);
3198 menu = gtk_option_menu_get_menu(optmenu);
3199 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3200 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));