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;
155 static struct Interface {
156 /* GtkWidget *checkbtn_emacs; */
157 GtkWidget *checkbtn_always_show_msg;
158 GtkWidget *checkbtn_openunread;
159 GtkWidget *checkbtn_mark_as_read_on_newwin;
160 GtkWidget *checkbtn_openinbox;
161 GtkWidget *checkbtn_immedexec;
162 GtkWidget *optmenu_nextunreadmsgdialog;
165 static struct Other {
166 GtkWidget *checkbtn_addaddrbyclick;
167 GtkWidget *checkbtn_confonexit;
168 GtkWidget *checkbtn_cleanonexit;
169 GtkWidget *checkbtn_askonclean;
170 GtkWidget *checkbtn_warnqueued;
171 GtkWidget *checkbtn_cliplog;
172 GtkWidget *loglength_entry;
175 GtkWidget *checkbtn_ssl_ask_unknown_valid;
179 GtkWidget *spinbtn_iotimeout;
180 GtkObject *spinbtn_iotimeout_adj;
183 static struct KeybindDialog {
188 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
189 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
190 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
191 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
192 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
193 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
194 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
196 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
197 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
198 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
199 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
200 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
201 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
204 parameter name, default value, pointer to the prefs variable, data type,
205 pointer to the widget pointer,
206 pointer to the function for data setting,
207 pointer to the function for widget setting
210 static PrefParam param[] = {
212 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
213 &receive.checkbtn_incext,
214 prefs_set_data_from_toggle, prefs_set_toggle},
215 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
216 &receive.entry_incext,
217 prefs_set_data_from_entry, prefs_set_entry},
219 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
220 &receive.checkbtn_autochk,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
223 &receive.spinbtn_autochk,
224 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
225 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
226 &receive.checkbtn_chkonstartup,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
229 P_BOOL, &receive.checkbtn_scan_after_inc,
230 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
232 P_BOOL, &receive.checkbtn_newmail_manu,
233 prefs_set_data_from_toggle, prefs_set_toggle},
234 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
235 P_BOOL, &receive.checkbtn_newmail_auto,
236 prefs_set_data_from_toggle, prefs_set_toggle},
237 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
238 &receive.entry_newmail_notify_cmd,
239 prefs_set_data_from_entry, prefs_set_entry},
240 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
241 &receive.optmenu_recvdialog,
242 prefs_common_recv_dialog_set_data_from_optmenu,
243 prefs_common_recv_dialog_set_optmenu},
244 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
245 P_BOOL, &receive.checkbtn_no_recv_err_panel,
246 prefs_set_data_from_toggle, prefs_set_toggle},
247 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
248 P_BOOL, &receive.checkbtn_close_recv_dialog,
249 prefs_set_data_from_toggle, prefs_set_toggle},
252 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
253 &p_send.checkbtn_savemsg,
254 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
256 &p_send.optmenu_senddialog,
257 prefs_common_send_dialog_set_data_from_optmenu,
258 prefs_common_send_dialog_set_optmenu},
260 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
261 &p_send.optmenu_charset,
262 prefs_common_charset_set_data_from_optmenu,
263 prefs_common_charset_set_optmenu},
264 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
265 &p_send.optmenu_encoding_method,
266 prefs_common_encoding_set_data_from_optmenu,
267 prefs_common_encoding_set_optmenu},
269 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
270 P_BOOL, NULL, NULL, NULL},
273 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
274 &compose.checkbtn_autoextedit,
275 prefs_set_data_from_toggle, prefs_set_toggle},
276 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
277 P_BOOL, &compose.checkbtn_forward_as_attachment,
278 prefs_set_data_from_toggle, prefs_set_toggle},
279 {"redirect_keep_from", "FALSE",
280 &prefs_common.redirect_keep_from, P_BOOL,
281 &compose.checkbtn_redirect_keep_from,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"undo_level", "50", &prefs_common.undolevels, P_INT,
284 &compose.spinbtn_undolevel,
285 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
287 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
289 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
291 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
293 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
295 {"autosave", "FALSE", &prefs_common.autosave,
296 P_BOOL, &compose.checkbtn_autosave,
297 prefs_set_data_from_toggle, prefs_set_toggle},
298 {"autosave_length", "50", &prefs_common.autosave_length,
299 P_INT, &compose.entry_autosave_length,
300 prefs_set_data_from_entry, prefs_set_entry},
302 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
304 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
306 {"dictionary", "", &prefs_common.dictionary, P_STRING,
308 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
310 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
312 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
314 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
317 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
318 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
320 /* Account autoselection */
321 {"reply_account_autoselect", "TRUE",
322 &prefs_common.reply_account_autosel, P_BOOL,
323 &compose.checkbtn_reply_account_autosel,
324 prefs_set_data_from_toggle, prefs_set_toggle},
325 {"forward_account_autoselect", "TRUE",
326 &prefs_common.forward_account_autosel, P_BOOL,
327 &compose.checkbtn_forward_account_autosel,
328 prefs_set_data_from_toggle, prefs_set_toggle},
329 {"reedit_account_autoselect", "TRUE",
330 &prefs_common.reedit_account_autosel, P_BOOL,
331 &compose.checkbtn_reedit_account_autosel,
332 prefs_set_data_from_toggle, prefs_set_toggle},
334 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
335 &compose.checkbtn_default_reply_list,
336 prefs_set_data_from_toggle, prefs_set_toggle},
338 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
342 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
343 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
344 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
345 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
346 prefs_set_data_from_text, prefs_set_text},
348 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
349 "e.entry_fw_quotemark,
350 prefs_set_data_from_entry, prefs_set_entry},
351 {"forward_quote_format",
352 "\\n\\nBegin forwarded message:\\n\\n"
353 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
354 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
355 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
356 prefs_set_data_from_text, prefs_set_text},
357 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
358 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
361 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
362 {"widget_font", NULL,
363 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
364 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
365 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
366 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
367 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
368 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
369 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
370 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
371 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
374 {"widget_font_gtk2", NULL,
375 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
376 {"message_font_gtk2", "fixed 9",
377 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
378 {"small_font_gtk2", "Sans 9",
379 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
380 {"bold_font_gtk2", "Sans Bold 9",
381 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
382 {"normal_font_gtk2", "Sans 9",
383 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
385 {"display_folder_unread_num", "TRUE",
386 &prefs_common.display_folder_unread, P_BOOL,
387 &display.chkbtn_folder_unread,
388 prefs_set_data_from_toggle, prefs_set_toggle},
389 {"newsgroup_abbrev_len", "16",
390 &prefs_common.ng_abbrev_len, P_INT,
391 &display.spinbtn_ng_abbrev_len,
392 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
394 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
395 &display.chkbtn_transhdr,
396 prefs_set_data_from_toggle, prefs_set_toggle},
398 /* Display: Summary View */
399 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
400 &display.chkbtn_swapfrom,
401 prefs_set_data_from_toggle, prefs_set_toggle},
402 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
403 &display.chkbtn_useaddrbook,
404 prefs_set_data_from_toggle, prefs_set_toggle},
405 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
406 &display.chkbtn_threadsubj,
407 prefs_set_data_from_toggle, prefs_set_toggle},
408 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
409 P_STRING, &display.entry_datefmt,
410 prefs_set_data_from_entry, prefs_set_entry},
412 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
414 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
416 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
417 P_INT, NULL, NULL, NULL },
419 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
421 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
423 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
425 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
428 {"folderview_vscrollbar_policy", "0",
429 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
432 {"summary_col_show_mark", "TRUE",
433 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
434 {"summary_col_show_unread", "TRUE",
435 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
436 {"summary_col_show_mime", "TRUE",
437 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
438 {"summary_col_show_subject", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_from", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_date", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_size", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_number", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_score", "FALSE",
449 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_locked", "FALSE",
451 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_pos_mark", "0",
454 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
455 {"summary_col_pos_unread", "1",
456 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
457 {"summary_col_pos_mime", "2",
458 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
459 {"summary_col_pos_subject", "3",
460 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
461 {"summary_col_pos_from", "4",
462 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_date", "5",
464 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_size", "6",
466 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_number", "7",
468 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_score", "8",
470 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_locked", "9",
472 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
474 {"summary_col_size_mark", "10",
475 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
476 {"summary_col_size_unread", "13",
477 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
478 {"summary_col_size_mime", "10",
479 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
480 {"summary_col_size_subject", "200",
481 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
482 {"summary_col_size_from", "120",
483 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_date", "118",
485 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_size", "45",
487 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_number", "40",
489 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_score", "40",
491 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_locked", "13",
493 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
496 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
498 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
500 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
502 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
504 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
507 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
509 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
511 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
513 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
516 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
518 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
521 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
523 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
525 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
527 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
529 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
532 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
534 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
536 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
538 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
540 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
542 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
544 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
546 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
548 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
550 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
552 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
554 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
556 {"compose_width", "600", &prefs_common.compose_width, P_INT,
558 {"compose_height", "560", &prefs_common.compose_height, P_INT,
560 {"compose_x", "0", &prefs_common.compose_x, P_INT,
562 {"compose_y", "0", &prefs_common.compose_y, P_INT,
565 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
568 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
570 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
572 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
574 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
576 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
578 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
580 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
581 P_BOOL, NULL, NULL, NULL},
583 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
584 &message.chkbtn_mbalnum,
585 prefs_set_data_from_toggle, prefs_set_toggle},
586 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
587 P_BOOL, &message.chkbtn_disphdrpane,
588 prefs_set_data_from_toggle, prefs_set_toggle},
589 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
590 &message.chkbtn_disphdr,
591 prefs_set_data_from_toggle, prefs_set_toggle},
592 {"line_space", "2", &prefs_common.line_space, P_INT,
593 &message.spinbtn_linespc,
594 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
595 {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL,
596 &message.chkbtn_headspc,
597 prefs_set_data_from_toggle, prefs_set_toggle},
599 {"enable_smooth_scroll", "FALSE",
600 &prefs_common.enable_smooth_scroll, P_BOOL,
601 &message.chkbtn_smoothscroll,
602 prefs_set_data_from_toggle, prefs_set_toggle},
603 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
604 &message.spinbtn_scrollstep,
605 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
606 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
607 &message.chkbtn_halfpage,
608 prefs_set_data_from_toggle, prefs_set_toggle},
610 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
613 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
614 &message.chkbtn_attach_desc,
615 prefs_set_data_from_toggle, prefs_set_toggle},
616 {"attach_save_directory", NULL,
617 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
620 {"mime_image_viewer", "display '%s'",
621 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
622 {"mime_audio_player", "play '%s'",
623 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
624 {"mime_open_command", "gedit '%s'",
625 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
628 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
630 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
633 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
634 NULL, NULL, NULL}, */
635 {"always_show_message_when_selected", "FALSE",
636 &prefs_common.always_show_msg,
637 P_BOOL, &interface.checkbtn_always_show_msg,
638 prefs_set_data_from_toggle, prefs_set_toggle},
639 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
640 P_BOOL, &interface.checkbtn_openunread,
641 prefs_set_data_from_toggle, prefs_set_toggle},
642 {"mark_as_read_on_new_window", "FALSE",
643 &prefs_common.mark_as_read_on_new_window,
644 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
645 prefs_set_data_from_toggle, prefs_set_toggle},
646 {"mark_as_read_delay", "0",
647 &prefs_common.mark_as_read_delay, P_INT,
649 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
650 P_BOOL, &interface.checkbtn_openinbox,
651 prefs_set_data_from_toggle, prefs_set_toggle},
652 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
653 &interface.checkbtn_immedexec,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
656 &interface.optmenu_nextunreadmsgdialog,
657 prefs_nextunreadmsgdialog_set_data_from_optmenu,
658 prefs_nextunreadmsgdialog_set_optmenu},
660 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
661 &prefs_common.pixmap_theme_path, P_STRING,
664 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
668 {"uri_open_command", DEFAULT_BROWSER_CMD,
669 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
670 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
672 {"ext_editor_command", "gedit %s",
673 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
675 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
676 P_BOOL, &other.checkbtn_addaddrbyclick,
677 prefs_set_data_from_toggle, prefs_set_toggle},
679 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
680 &other.checkbtn_confonexit,
681 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
683 &other.checkbtn_cleanonexit,
684 prefs_set_data_from_toggle, prefs_set_toggle},
685 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
686 &other.checkbtn_askonclean,
687 prefs_set_data_from_toggle, prefs_set_toggle},
688 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
689 P_BOOL, &other.checkbtn_warnqueued,
690 prefs_set_data_from_toggle, prefs_set_toggle},
693 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
694 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
695 prefs_set_data_from_toggle, prefs_set_toggle},
698 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
700 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
702 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
705 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
706 P_INT, &other.spinbtn_iotimeout,
707 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
708 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
710 {"important_score", "1", &prefs_common.important_score, P_INT,
712 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
713 &other.checkbtn_cliplog,
714 prefs_set_data_from_toggle, prefs_set_toggle},
715 {"log_length", "500", &prefs_common.loglength, P_INT,
716 &other.loglength_entry,
717 prefs_set_data_from_entry, prefs_set_entry},
719 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
721 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
724 {"color_new", "179", &prefs_common.color_new, P_COLOR,
727 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
730 /* widget creating functions */
731 static void prefs_common_create (void);
732 static void prefs_receive_create (void);
733 static void prefs_send_create (void);
734 static void prefs_compose_create (void);
735 static void prefs_quote_create (void);
736 static void prefs_display_create (void);
737 static void prefs_message_create (void);
738 static void prefs_interface_create (void);
739 static void prefs_other_create (void);
741 static void date_format_ok_btn_clicked (GtkButton *button,
743 static void date_format_cancel_btn_clicked (GtkButton *button,
745 static gboolean date_format_key_pressed (GtkWidget *keywidget,
748 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
751 static void date_format_entry_on_change (GtkEditable *editable,
753 static void date_format_select_row (GtkWidget *date_format_list,
756 GdkEventButton *event,
757 GtkWidget *date_format);
758 static GtkWidget *date_format_create (GtkButton *button,
761 static void prefs_keybind_select (void);
762 static gint prefs_keybind_deleted (GtkWidget *widget,
765 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
768 static void prefs_keybind_cancel (void);
769 static void prefs_keybind_apply_clicked (GtkWidget *widget);
771 static gint prefs_common_deleted (GtkWidget *widget,
774 static gboolean prefs_common_key_pressed(GtkWidget *widget,
777 static void prefs_common_ok (void);
778 static void prefs_common_apply (void);
779 static void prefs_common_cancel (void);
781 void prefs_common_init(void)
783 prefs_common.disphdr_list = NULL;
786 PrefsCommon *prefs_common_get(void)
788 return &prefs_common;
792 * Read history list from the specified history file
794 GList *prefs_common_read_history(const gchar *history)
798 gchar buf[PREFSBUFSIZE];
801 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
803 if ((fp = fopen(path, "rb")) == NULL) {
804 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
809 while (fgets(buf, sizeof(buf), fp) != NULL) {
811 if (buf[0] == '\0') continue;
812 tmp = add_history(tmp, buf);
816 tmp = g_list_reverse(tmp);
821 void prefs_common_read_config(void)
823 prefs_read_config(param, "Common", COMMON_RC);
825 prefs_common.mime_open_cmd_history =
826 prefs_common_read_history(COMMAND_HISTORY);
827 prefs_common.summary_quicksearch_history =
828 prefs_common_read_history(QUICKSEARCH_HISTORY);
832 * Save history list to the specified history file
834 void prefs_common_save_history(const gchar *history, GList *list)
840 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
842 if ((fp = fopen(path, "wb")) == NULL) {
843 FILE_OP_ERROR(path, "fopen");
848 for (cur = list; cur != NULL; cur = cur->next) {
849 fputs((gchar *)cur->data, fp);
857 void prefs_common_write_config(void)
859 prefs_write_config(param, "Common", COMMON_RC);
861 prefs_common_save_history(COMMAND_HISTORY,
862 prefs_common.mime_open_cmd_history);
863 prefs_common_save_history(QUICKSEARCH_HISTORY,
864 prefs_common.summary_quicksearch_history);
867 void prefs_common_open(void)
869 if (prefs_rc_is_readonly(COMMON_RC))
874 if (!dialog.window) {
875 prefs_common_create();
878 manage_window_set_transient(GTK_WINDOW(dialog.window));
879 gtk_notebook_set_current_page(GTK_NOTEBOOK(dialog.notebook), 0);
880 gtk_widget_grab_focus(dialog.ok_btn);
882 prefs_set_dialog(param);
884 gtk_widget_show(dialog.window);
887 static void prefs_common_create(void)
891 debug_print("Creating common preferences window...\n");
893 prefs_dialog_create(&dialog);
894 gtk_window_set_title (GTK_WINDOW(dialog.window),
895 _("Common Preferences"));
896 g_signal_connect (G_OBJECT(dialog.window), "delete_event",
897 G_CALLBACK(prefs_common_deleted), NULL);
898 g_signal_connect (G_OBJECT(dialog.window), "key_press_event",
899 G_CALLBACK(prefs_common_key_pressed), NULL);
900 MANAGE_WINDOW_SIGNALS_CONNECT(dialog.window);
902 g_signal_connect (G_OBJECT(dialog.ok_btn), "clicked",
903 G_CALLBACK(prefs_common_ok), NULL);
904 g_signal_connect (G_OBJECT(dialog.apply_btn), "clicked",
905 G_CALLBACK(prefs_common_apply), NULL);
906 g_signal_connect_swapped(G_OBJECT(dialog.cancel_btn), "clicked",
907 G_CALLBACK(prefs_common_cancel),
908 G_OBJECT(dialog.window));
910 /* create all widgets on notebook */
911 prefs_receive_create();
912 SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++);
914 SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++);
915 prefs_compose_create();
916 SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++);
917 prefs_quote_create();
918 SET_NOTEBOOK_LABEL(dialog.notebook, _("Quote"), page++);
919 prefs_display_create();
920 SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++);
921 prefs_message_create();
922 SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++);
923 prefs_interface_create();
924 SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++);
925 prefs_other_create();
926 SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++);
928 gtk_widget_show_all(dialog.window);
931 static void prefs_receive_create(void)
935 GtkWidget *frame_incext;
936 GtkWidget *checkbtn_incext;
938 GtkWidget *label_incext;
939 GtkWidget *entry_incext;
940 /* GtkWidget *button_incext; */
942 GtkWidget *hbox_autochk;
943 GtkWidget *checkbtn_autochk;
944 GtkWidget *label_autochk1;
945 GtkObject *spinbtn_autochk_adj;
946 GtkWidget *spinbtn_autochk;
947 GtkWidget *label_autochk2;
948 GtkWidget *checkbtn_chkonstartup;
949 GtkWidget *checkbtn_scan_after_inc;
952 GtkWidget *frame_newmail;
953 GtkWidget *hbox_newmail_notify;
954 GtkWidget *checkbtn_newmail_auto;
955 GtkWidget *checkbtn_newmail_manu;
956 GtkWidget *entry_newmail_notify_cmd;
957 GtkWidget *label_newmail_notify_cmd;
959 GtkWidget *hbox_recvdialog;
960 GtkWidget *label_recvdialog;
963 GtkWidget *optmenu_recvdialog;
964 GtkWidget *checkbtn_no_recv_err_panel;
965 GtkWidget *checkbtn_close_recv_dialog;
967 vbox1 = gtk_vbox_new (FALSE, VSPACING);
968 gtk_widget_show (vbox1);
969 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
970 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
972 PACK_FRAME(vbox1, frame_incext, _("External program"));
974 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
975 gtk_widget_show (vbox2);
976 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
977 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
979 /* Use of external incorporation program */
980 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
981 _("Use external program for incorporation"));
983 hbox = gtk_hbox_new (FALSE, 8);
984 gtk_widget_show (hbox);
985 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
986 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
988 label_incext = gtk_label_new (_("Command"));
989 gtk_widget_show (label_incext);
990 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
992 entry_incext = gtk_entry_new ();
993 gtk_widget_show (entry_incext);
994 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
997 button_incext = gtk_button_new_with_label ("... ");
998 gtk_widget_show (button_incext);
999 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1002 vbox2 = gtk_vbox_new (FALSE, 0);
1003 gtk_widget_show (vbox2);
1004 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1007 hbox_autochk = gtk_hbox_new (FALSE, 8);
1008 gtk_widget_show (hbox_autochk);
1009 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1011 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1012 _("Auto-check new mail"));
1014 label_autochk1 = gtk_label_new (_("every"));
1015 gtk_widget_show (label_autochk1);
1016 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1018 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1019 spinbtn_autochk = gtk_spin_button_new
1020 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1021 gtk_widget_show (spinbtn_autochk);
1022 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1023 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1024 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1026 label_autochk2 = gtk_label_new (_("minute(s)"));
1027 gtk_widget_show (label_autochk2);
1028 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1030 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1031 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1032 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1034 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1035 _("Check new mail on startup"));
1036 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1037 _("Update all local folders after incorporation"));
1040 /* receive dialog */
1041 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1042 gtk_widget_show (hbox_recvdialog);
1043 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1045 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1046 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1047 gtk_widget_show (label_recvdialog);
1048 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1050 optmenu_recvdialog = gtk_option_menu_new ();
1051 gtk_widget_show (optmenu_recvdialog);
1052 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1054 menu = gtk_menu_new ();
1055 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1056 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1057 RECV_DIALOG_MANUAL);
1058 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1060 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1062 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1063 _("Don't popup error dialog on receive error"));
1065 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1066 _("Close receive dialog when finished"));
1068 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1070 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1071 gtk_widget_show (vbox2);
1072 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1073 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1075 hbox = gtk_hbox_new (TRUE, 8);
1076 gtk_widget_show (hbox);
1077 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1078 _("after autochecking"));
1079 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1080 _("after manual checking"));
1081 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1082 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1083 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1085 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1086 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1089 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1090 gtk_widget_show (hbox);
1091 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1094 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1095 "(use %d as number of new "
1097 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1099 gtk_widget_show (label_newmail_notify_cmd);
1100 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1101 label_newmail_notify_cmd, FALSE, FALSE, 0);
1103 entry_newmail_notify_cmd = gtk_entry_new ();
1104 gtk_widget_show (entry_newmail_notify_cmd);
1105 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1106 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1108 gtk_widget_set_sensitive(hbox_newmail_notify,
1109 prefs_common.newmail_notify_auto ||
1110 prefs_common.newmail_notify_manu);
1112 receive.checkbtn_incext = checkbtn_incext;
1113 receive.entry_incext = entry_incext;
1114 /* receive.button_incext = button_incext; */
1116 receive.checkbtn_autochk = checkbtn_autochk;
1117 receive.spinbtn_autochk = spinbtn_autochk;
1118 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1120 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1121 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1124 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1125 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1126 receive.hbox_newmail_notify = hbox_newmail_notify;
1127 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1128 receive.optmenu_recvdialog = optmenu_recvdialog;
1129 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1130 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1133 static void prefs_send_create(void)
1138 GtkWidget *checkbtn_savemsg;
1139 GtkWidget *label_outcharset;
1140 GtkWidget *optmenu_charset;
1141 GtkWidget *optmenu_menu;
1142 GtkWidget *menuitem;
1143 GtkTooltips *charset_tooltip;
1144 GtkWidget *optmenu_encoding;
1145 GtkWidget *label_encoding;
1146 GtkTooltips *encoding_tooltip;
1147 GtkWidget *label_senddialog;
1149 GtkWidget *optmenu_senddialog;
1150 GtkWidget *hbox_senddialog;
1152 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1153 gtk_widget_show (vbox1);
1154 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1155 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1157 vbox2 = gtk_vbox_new (FALSE, 0);
1158 gtk_widget_show (vbox2);
1159 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1161 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1162 _("Save sent messages to Sent folder"));
1164 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1165 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1167 label_senddialog = gtk_label_new (_("Show send dialog"));
1168 gtk_widget_show (label_senddialog);
1169 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1171 optmenu_senddialog = gtk_option_menu_new ();
1172 gtk_widget_show (optmenu_senddialog);
1173 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1175 menu = gtk_menu_new ();
1176 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1177 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1179 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1181 hbox1 = gtk_hbox_new (FALSE, 8);
1182 gtk_widget_show (hbox1);
1183 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1185 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1186 gtk_widget_show (label_outcharset);
1187 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1189 charset_tooltip = gtk_tooltips_new();
1191 optmenu_charset = gtk_option_menu_new ();
1192 gtk_widget_show (optmenu_charset);
1193 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1194 _("If `Automatic' is selected, the optimal encoding"
1195 " for the current locale will be used"),
1197 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1199 optmenu_menu = gtk_menu_new ();
1201 #define SET_MENUITEM(str, data) \
1203 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1206 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1207 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1209 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1211 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1212 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1213 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1214 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1215 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1216 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1217 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1219 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1221 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1223 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1224 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1226 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1228 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1229 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1231 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1232 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1234 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1235 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1237 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1238 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1239 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1241 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1244 hbox1 = gtk_hbox_new (FALSE, 8);
1245 gtk_widget_show (hbox1);
1246 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1248 hbox1 = gtk_hbox_new (FALSE, 8);
1249 gtk_widget_show (hbox1);
1250 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1252 label_encoding = gtk_label_new (_("Transfer encoding"));
1253 gtk_widget_show (label_encoding);
1254 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1256 encoding_tooltip = gtk_tooltips_new();
1258 optmenu_encoding = gtk_option_menu_new ();
1259 gtk_widget_show (optmenu_encoding);
1260 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1261 _("Specify Content-Transfer-Encoding used when"
1262 " message body contains non-ASCII characters"),
1264 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1266 optmenu_menu = gtk_menu_new ();
1268 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1269 SET_MENUITEM("base64", CTE_BASE64);
1270 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1271 SET_MENUITEM("8bit", CTE_8BIT);
1273 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1276 hbox1 = gtk_hbox_new (FALSE, 8);
1277 gtk_widget_show (hbox1);
1278 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1280 p_send.checkbtn_savemsg = checkbtn_savemsg;
1281 p_send.optmenu_senddialog = optmenu_senddialog;
1283 p_send.optmenu_charset = optmenu_charset;
1284 p_send.optmenu_encoding_method = optmenu_encoding;
1287 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1291 toggled = gtk_toggle_button_get_active
1292 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1293 gtk_toggle_button_get_active
1294 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1295 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1298 static void prefs_compose_create(void)
1303 GtkWidget *checkbtn_autoextedit;
1305 GtkWidget *frame_autosel;
1306 GtkWidget *hbox_autosel;
1307 GtkWidget *checkbtn_reply_account_autosel;
1308 GtkWidget *checkbtn_forward_account_autosel;
1309 GtkWidget *checkbtn_reedit_account_autosel;
1311 GtkWidget *hbox_undolevel;
1312 GtkWidget *label_undolevel;
1313 GtkObject *spinbtn_undolevel_adj;
1314 GtkWidget *spinbtn_undolevel;
1318 GtkWidget *checkbtn_default_reply_list;
1320 GtkWidget *checkbtn_forward_as_attachment;
1321 GtkWidget *checkbtn_redirect_keep_from;
1323 GtkWidget *hbox_autosave;
1324 GtkWidget *checkbtn_autosave;
1325 GtkWidget *entry_autosave_length;
1326 GtkWidget *label_autosave_length;
1328 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1329 gtk_widget_show (vbox1);
1330 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1331 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1333 /* Account autoselection */
1334 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1336 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1337 gtk_widget_show (hbox_autosel);
1338 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1339 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1341 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1342 _("when replying"));
1343 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1344 _("when forwarding"));
1345 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1346 _("when re-editing"));
1348 vbox2 = gtk_vbox_new (FALSE, 0);
1349 gtk_widget_show (vbox2);
1350 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1352 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1353 _("Reply button invokes mailing list reply"));
1355 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1356 _("Automatically launch the external editor"));
1358 hbox5 = gtk_hbox_new (FALSE, 8);
1359 gtk_widget_show (hbox5);
1360 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1362 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1363 _("Forward as attachment"));
1365 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1366 _("Keep the original 'From' header when redirecting"));
1369 hbox_autosave = gtk_hbox_new (FALSE, 8);
1370 gtk_widget_show (hbox_autosave);
1371 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1373 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1374 _("Autosave to Drafts folder every "));
1376 entry_autosave_length = gtk_entry_new();
1377 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1378 gtk_widget_show (entry_autosave_length);
1379 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1381 label_autosave_length = gtk_label_new(_("characters"));
1382 gtk_widget_show (label_autosave_length);
1383 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1385 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1386 gtk_widget_show (hbox_undolevel);
1387 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1389 label_undolevel = gtk_label_new (_("Undo level"));
1390 gtk_widget_show (label_undolevel);
1391 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1393 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1394 spinbtn_undolevel = gtk_spin_button_new
1395 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1396 gtk_widget_show (spinbtn_undolevel);
1397 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1398 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1399 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1402 compose.checkbtn_quote = checkbtn_quote;
1403 compose.entry_quotemark = entry_quotemark;
1404 compose.text_quotefmt = text_quotefmt;
1407 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1409 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1410 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1411 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1413 compose.spinbtn_undolevel = spinbtn_undolevel;
1414 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1416 compose.checkbtn_autosave = checkbtn_autosave;
1417 compose.entry_autosave_length = entry_autosave_length;
1419 compose.checkbtn_forward_as_attachment =
1420 checkbtn_forward_as_attachment;
1421 compose.checkbtn_redirect_keep_from =
1422 checkbtn_redirect_keep_from;
1423 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1426 static void prefs_quote_create(void)
1429 GtkWidget *frame_quote;
1430 GtkWidget *vbox_quote;
1433 GtkWidget *label_quotemark;
1434 GtkWidget *entry_quotemark;
1435 GtkWidget *scrolledwin_quotefmt;
1436 GtkWidget *text_quotefmt;
1438 GtkWidget *entry_fw_quotemark;
1439 GtkWidget *text_fw_quotefmt;
1441 GtkWidget *entry_quote_chars;
1442 GtkWidget *label_quote_chars;
1444 GtkWidget *btn_quotedesc;
1446 GtkWidget *checkbtn_reply_with_quote;
1448 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1449 gtk_widget_show (vbox1);
1450 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1451 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1455 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1457 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1459 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1460 gtk_widget_show (vbox_quote);
1461 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1462 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1464 hbox1 = gtk_hbox_new (FALSE, 32);
1465 gtk_widget_show (hbox1);
1466 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1468 hbox2 = gtk_hbox_new (FALSE, 8);
1469 gtk_widget_show (hbox2);
1470 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1472 label_quotemark = gtk_label_new (_("Quotation mark"));
1473 gtk_widget_show (label_quotemark);
1474 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1476 entry_quotemark = gtk_entry_new ();
1477 gtk_widget_show (entry_quotemark);
1478 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1479 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1481 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1482 gtk_widget_show (scrolledwin_quotefmt);
1483 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1484 gtk_scrolled_window_set_policy
1485 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1486 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1488 text_quotefmt = gtk_text_view_new ();
1489 gtk_widget_show (text_quotefmt);
1490 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1491 gtk_text_view_set_editable (GTK_TEXT_VIEW(text_quotefmt), TRUE);
1492 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1496 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1498 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1499 gtk_widget_show (vbox_quote);
1500 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1501 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1503 hbox1 = gtk_hbox_new (FALSE, 32);
1504 gtk_widget_show (hbox1);
1505 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1507 hbox2 = gtk_hbox_new (FALSE, 8);
1508 gtk_widget_show (hbox2);
1509 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1511 label_quotemark = gtk_label_new (_("Quotation mark"));
1512 gtk_widget_show (label_quotemark);
1513 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1515 entry_fw_quotemark = gtk_entry_new ();
1516 gtk_widget_show (entry_fw_quotemark);
1517 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1519 gtk_widget_set_size_request (entry_fw_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_AUTOMATIC);
1528 text_fw_quotefmt = gtk_text_view_new ();
1529 gtk_widget_show (text_fw_quotefmt);
1530 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1532 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1533 gtk_widget_set_size_request(text_fw_quotefmt, -1, 60);
1535 hbox1 = gtk_hbox_new (FALSE, 32);
1536 gtk_widget_show (hbox1);
1537 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1540 gtk_button_new_with_label (_(" Description of symbols "));
1541 gtk_widget_show (btn_quotedesc);
1542 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1543 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1544 G_CALLBACK(quote_fmt_quote_description), NULL);
1548 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1550 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1551 gtk_widget_show (vbox_quote);
1552 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1553 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1555 hbox1 = gtk_hbox_new (FALSE, 32);
1556 gtk_widget_show (hbox1);
1557 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1559 hbox2 = gtk_hbox_new (FALSE, 8);
1560 gtk_widget_show (hbox2);
1561 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1563 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1564 gtk_widget_show (label_quote_chars);
1565 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1567 entry_quote_chars = gtk_entry_new ();
1568 gtk_widget_show (entry_quote_chars);
1569 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1571 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1574 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1575 quote.entry_quotemark = entry_quotemark;
1576 quote.text_quotefmt = text_quotefmt;
1577 quote.entry_fw_quotemark = entry_fw_quotemark;
1578 quote.text_fw_quotefmt = text_fw_quotefmt;
1579 quote.entry_quote_chars = entry_quote_chars;
1582 static void prefs_display_create(void)
1585 GtkWidget *chkbtn_transhdr;
1586 GtkWidget *chkbtn_folder_unread;
1588 GtkWidget *label_ng_abbrev;
1589 GtkWidget *spinbtn_ng_abbrev_len;
1590 GtkObject *spinbtn_ng_abbrev_len_adj;
1591 GtkWidget *frame_summary;
1593 GtkWidget *chkbtn_swapfrom;
1594 GtkWidget *chkbtn_useaddrbook;
1595 GtkWidget *chkbtn_threadsubj;
1597 GtkWidget *label_datefmt;
1598 GtkWidget *button_datefmt;
1599 GtkWidget *entry_datefmt;
1600 GtkWidget *button_dispitem;
1602 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1603 gtk_widget_show (vbox1);
1604 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1605 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1607 vbox2 = gtk_vbox_new (FALSE, 0);
1608 gtk_widget_show (vbox2);
1609 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1612 (vbox2, chkbtn_transhdr,
1613 _("Translate header name (such as `From:', `Subject:')"));
1615 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1616 _("Display unread number next to folder name"));
1618 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1620 hbox1 = gtk_hbox_new (FALSE, 8);
1621 gtk_widget_show (hbox1);
1622 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1624 label_ng_abbrev = gtk_label_new
1625 (_("Abbreviate newsgroup names longer than"));
1626 gtk_widget_show (label_ng_abbrev);
1627 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1629 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1630 spinbtn_ng_abbrev_len = gtk_spin_button_new
1631 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1632 gtk_widget_show (spinbtn_ng_abbrev_len);
1633 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1635 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1636 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1639 label_ng_abbrev = gtk_label_new
1641 gtk_widget_show (label_ng_abbrev);
1642 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1644 /* ---- Summary ---- */
1646 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1648 vbox2 = gtk_vbox_new (FALSE, 0);
1649 gtk_widget_show (vbox2);
1650 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1651 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1654 (vbox2, chkbtn_swapfrom,
1655 _("Display recipient in `From' column if sender is yourself"));
1657 (vbox2, chkbtn_useaddrbook,
1658 _("Display sender using address book"));
1660 (vbox2, chkbtn_threadsubj,
1661 _("Thread using subject in addition to standard headers"));
1663 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1665 hbox1 = gtk_hbox_new (FALSE, 8);
1666 gtk_widget_show (hbox1);
1667 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1669 label_datefmt = gtk_label_new (_("Date format"));
1670 gtk_widget_show (label_datefmt);
1671 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1673 entry_datefmt = gtk_entry_new ();
1674 gtk_widget_show (entry_datefmt);
1675 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1677 button_datefmt = gtk_button_new_with_label (" ... ");
1679 gtk_widget_show (button_datefmt);
1680 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1681 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1682 G_CALLBACK (date_format_create), NULL);
1684 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1686 hbox1 = gtk_hbox_new (FALSE, 8);
1687 gtk_widget_show (hbox1);
1688 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1690 button_dispitem = gtk_button_new_with_label
1691 (_(" Set displayed items in summary... "));
1692 gtk_widget_show (button_dispitem);
1693 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1694 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1695 G_CALLBACK (prefs_summary_column_open),
1698 display.chkbtn_transhdr = chkbtn_transhdr;
1699 display.chkbtn_folder_unread = chkbtn_folder_unread;
1700 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1701 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1703 display.chkbtn_swapfrom = chkbtn_swapfrom;
1704 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1705 display.chkbtn_threadsubj = chkbtn_threadsubj;
1706 display.entry_datefmt = entry_datefmt;
1709 static void prefs_message_create(void)
1715 GtkWidget *chkbtn_mbalnum;
1716 GtkWidget *chkbtn_disphdrpane;
1717 GtkWidget *chkbtn_disphdr;
1718 GtkWidget *button_edit_disphdr;
1719 GtkWidget *hbox_linespc;
1720 GtkWidget *label_linespc;
1721 GtkObject *spinbtn_linespc_adj;
1722 GtkWidget *spinbtn_linespc;
1723 GtkWidget *chkbtn_headspc;
1725 GtkWidget *frame_scr;
1726 GtkWidget *vbox_scr;
1727 GtkWidget *chkbtn_smoothscroll;
1728 GtkWidget *hbox_scr;
1729 GtkWidget *label_scr;
1730 GtkObject *spinbtn_scrollstep_adj;
1731 GtkWidget *spinbtn_scrollstep;
1732 GtkWidget *chkbtn_halfpage;
1734 GtkWidget *chkbtn_attach_desc;
1736 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1737 gtk_widget_show (vbox1);
1738 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1739 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1741 vbox2 = gtk_vbox_new (FALSE, 0);
1742 gtk_widget_show (vbox2);
1743 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1746 (vbox2, chkbtn_mbalnum,
1747 _("Display multi-byte alphanumeric as\n"
1748 "ASCII character (Japanese only)"));
1749 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1752 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1753 _("Display header pane above message view"));
1755 hbox1 = gtk_hbox_new (FALSE, 8);
1756 gtk_widget_show (hbox1);
1757 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1759 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1760 _("Display short headers on message view"));
1762 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1763 gtk_widget_show (button_edit_disphdr);
1764 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1766 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1767 G_CALLBACK (prefs_display_header_open),
1770 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1772 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1774 hbox1 = gtk_hbox_new (FALSE, 32);
1775 gtk_widget_show (hbox1);
1776 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1778 hbox_linespc = gtk_hbox_new (FALSE, 8);
1779 gtk_widget_show (hbox1);
1780 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1782 label_linespc = gtk_label_new (_("Line space"));
1783 gtk_widget_show (label_linespc);
1784 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1787 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1788 spinbtn_linespc = gtk_spin_button_new
1789 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1790 gtk_widget_show (spinbtn_linespc);
1791 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1793 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1794 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1796 label_linespc = gtk_label_new (_("pixel(s)"));
1797 gtk_widget_show (label_linespc);
1798 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1801 PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Indent text"));
1803 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1805 vbox_scr = gtk_vbox_new (FALSE, 0);
1806 gtk_widget_show (vbox_scr);
1807 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1808 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1810 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1812 hbox1 = gtk_hbox_new (FALSE, 32);
1813 gtk_widget_show (hbox1);
1814 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1816 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1818 hbox_scr = gtk_hbox_new (FALSE, 8);
1819 gtk_widget_show (hbox_scr);
1820 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1822 label_scr = gtk_label_new (_("Step"));
1823 gtk_widget_show (label_scr);
1824 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1826 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1827 spinbtn_scrollstep = gtk_spin_button_new
1828 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1829 gtk_widget_show (spinbtn_scrollstep);
1830 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1832 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1833 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1836 label_scr = gtk_label_new (_("pixel(s)"));
1837 gtk_widget_show (label_scr);
1838 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1840 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1842 vbox3 = gtk_vbox_new (FALSE, 0);
1843 gtk_widget_show (vbox3);
1844 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1846 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1847 _("Show attachment descriptions (rather than names)"));
1849 message.chkbtn_mbalnum = chkbtn_mbalnum;
1850 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1851 message.chkbtn_disphdr = chkbtn_disphdr;
1852 message.spinbtn_linespc = spinbtn_linespc;
1853 message.chkbtn_headspc = chkbtn_headspc;
1855 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1856 message.spinbtn_scrollstep = spinbtn_scrollstep;
1857 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1858 message.chkbtn_halfpage = chkbtn_halfpage;
1860 message.chkbtn_attach_desc = chkbtn_attach_desc;
1863 static void prefs_interface_create(void)
1868 /* GtkWidget *checkbtn_emacs; */
1869 GtkWidget *checkbtn_always_show_msg;
1870 GtkWidget *checkbtn_openunread;
1871 GtkWidget *checkbtn_mark_as_read_on_newwin;
1872 GtkWidget *checkbtn_openinbox;
1873 GtkWidget *checkbtn_immedexec;
1874 GtkTooltips *immedexec_tooltip;
1878 GtkWidget *menuitem;
1880 GtkWidget *button_keybind;
1882 GtkWidget *hbox_nextunreadmsgdialog;
1883 GtkWidget *optmenu_nextunreadmsgdialog;
1885 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1886 gtk_widget_show (vbox1);
1887 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
1888 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1890 vbox2 = gtk_vbox_new (FALSE, 0);
1891 gtk_widget_show (vbox2);
1892 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1894 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1895 _("Emulate the behavior of mouse operation of\n"
1896 "Emacs-based mailer"));
1897 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1898 GTK_JUSTIFY_LEFT); */
1901 (vbox2, checkbtn_always_show_msg,
1902 _("Always open messages in summary when selected"));
1905 (vbox2, checkbtn_openunread,
1906 _("Open first unread message when entering a folder"));
1909 (vbox2, checkbtn_mark_as_read_on_newwin,
1910 _("Only mark message as read when opened in new window"));
1913 (vbox2, checkbtn_openinbox,
1914 _("Go to inbox after receiving new mail"));
1916 vbox3 = gtk_vbox_new (FALSE, 0);
1917 gtk_widget_show (vbox3);
1918 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1920 immedexec_tooltip = gtk_tooltips_new();
1923 (vbox3, checkbtn_immedexec,
1924 _("Execute immediately when moving or deleting messages"));
1925 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1926 _("Messages will be marked until execution"
1927 " if this is turned off"),
1930 hbox1 = gtk_hbox_new (FALSE, 0);
1931 gtk_widget_show (hbox1);
1932 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1934 /* Next Unread Message Dialog */
1935 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1936 gtk_widget_show (hbox1);
1937 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1939 label = gtk_label_new (_("Show no-unread-message dialog"));
1940 gtk_widget_show (label);
1941 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1943 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1944 gtk_widget_show (optmenu_nextunreadmsgdialog);
1945 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1947 menu = gtk_menu_new ();
1948 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1949 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
1950 NEXTUNREADMSGDIALOG_ASSUME_YES);
1951 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
1952 NEXTUNREADMSGDIALOG_ASSUME_NO);
1954 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1956 hbox1 = gtk_hbox_new (FALSE, 8);
1957 gtk_widget_show (hbox1);
1958 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1960 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1961 gtk_widget_show (button_keybind);
1962 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1963 g_signal_connect (G_OBJECT (button_keybind), "clicked",
1964 G_CALLBACK (prefs_keybind_select), NULL);
1966 /* interface.checkbtn_emacs = checkbtn_emacs; */
1967 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
1968 interface.checkbtn_openunread = checkbtn_openunread;
1969 interface.checkbtn_mark_as_read_on_newwin
1970 = checkbtn_mark_as_read_on_newwin;
1971 interface.checkbtn_openinbox = checkbtn_openinbox;
1972 interface.checkbtn_immedexec = checkbtn_immedexec;
1973 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
1976 static void prefs_other_create(void)
1981 GtkWidget *frame_addr;
1982 GtkWidget *vbox_addr;
1983 GtkWidget *checkbtn_addaddrbyclick;
1985 GtkWidget *frame_cliplog;
1986 GtkWidget *vbox_cliplog;
1987 GtkWidget *hbox_cliplog;
1988 GtkWidget *checkbtn_cliplog;
1989 GtkWidget *loglength_label;
1990 GtkWidget *loglength_entry;
1991 GtkTooltips *loglength_tooltip;
1993 GtkWidget *frame_exit;
1994 GtkWidget *vbox_exit;
1995 GtkWidget *checkbtn_confonexit;
1996 GtkWidget *checkbtn_cleanonexit;
1997 GtkWidget *checkbtn_askonclean;
1998 GtkWidget *checkbtn_warnqueued;
2000 GtkWidget *label_iotimeout;
2001 GtkWidget *spinbtn_iotimeout;
2002 GtkObject *spinbtn_iotimeout_adj;
2006 GtkWidget *frame_ssl;
2007 GtkWidget *vbox_ssl;
2008 GtkWidget *hbox_ssl;
2009 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2012 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2013 gtk_widget_show (vbox1);
2014 gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1);
2015 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2017 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2019 vbox_addr = gtk_vbox_new (FALSE, 0);
2020 gtk_widget_show (vbox_addr);
2021 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2022 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2025 (vbox_addr, checkbtn_addaddrbyclick,
2026 _("Add address to destination when double-clicked"));
2029 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2031 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2032 gtk_widget_show (vbox_cliplog);
2033 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2034 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2035 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2036 _("Clip the log size"));
2037 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2038 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2039 gtk_widget_show (hbox_cliplog);
2041 loglength_label = gtk_label_new (_("Log window length"));
2042 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2044 gtk_widget_show (GTK_WIDGET (loglength_label));
2046 loglength_tooltip = gtk_tooltips_new();
2048 loglength_entry = gtk_entry_new ();
2049 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2050 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2052 gtk_widget_show (GTK_WIDGET (loglength_entry));
2053 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2054 _("0 to stop logging in the log window"),
2056 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2061 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2063 vbox_ssl = gtk_vbox_new (FALSE, 0);
2064 gtk_widget_show (vbox_ssl);
2065 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2066 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2067 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2068 _("Ask before accepting SSL certificates"));
2069 hbox_ssl = gtk_hbox_new (FALSE, 3);
2070 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2071 gtk_widget_show (hbox_ssl);
2076 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2078 vbox_exit = gtk_vbox_new (FALSE, 0);
2079 gtk_widget_show (vbox_exit);
2080 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2081 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2083 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2084 _("Confirm on exit"));
2086 hbox1 = gtk_hbox_new (FALSE, 32);
2087 gtk_widget_show (hbox1);
2088 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2090 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2091 _("Empty trash on exit"));
2092 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2093 _("Ask before emptying"));
2094 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2096 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2097 _("Warn if there are queued messages"));
2099 hbox1 = gtk_hbox_new (FALSE, 8);
2100 gtk_widget_show (hbox1);
2101 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2103 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2104 gtk_widget_show (label_iotimeout);
2105 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2107 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2108 spinbtn_iotimeout = gtk_spin_button_new
2109 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2110 gtk_widget_show (spinbtn_iotimeout);
2111 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2113 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2114 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2116 label_iotimeout = gtk_label_new (_("seconds"));
2117 gtk_widget_show (label_iotimeout);
2118 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2120 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2122 other.checkbtn_cliplog = checkbtn_cliplog;
2123 other.loglength_entry = loglength_entry;
2125 other.checkbtn_confonexit = checkbtn_confonexit;
2126 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2127 other.checkbtn_askonclean = checkbtn_askonclean;
2128 other.checkbtn_warnqueued = checkbtn_warnqueued;
2130 other.spinbtn_iotimeout = spinbtn_iotimeout;
2131 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2135 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2140 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2142 GtkWidget *datefmt_sample = NULL;
2145 g_return_if_fail(widget != NULL);
2146 g_return_if_fail(*widget != NULL);
2147 g_return_if_fail(display.entry_datefmt != NULL);
2149 datefmt_sample = GTK_WIDGET(g_object_get_data
2150 (G_OBJECT(*widget), "datefmt_sample"));
2151 g_return_if_fail(datefmt_sample != NULL);
2153 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2154 g_free(prefs_common.date_format);
2155 prefs_common.date_format = text;
2156 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2158 gtk_widget_destroy(*widget);
2162 static void date_format_cancel_btn_clicked(GtkButton *button,
2165 g_return_if_fail(widget != NULL);
2166 g_return_if_fail(*widget != NULL);
2168 gtk_widget_destroy(*widget);
2172 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2175 if (event && event->keyval == GDK_Escape)
2176 date_format_cancel_btn_clicked(NULL, widget);
2180 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2181 GdkEventAny *event, GtkWidget **widget)
2183 g_return_val_if_fail(widget != NULL, FALSE);
2184 g_return_val_if_fail(*widget != NULL, FALSE);
2190 static void date_format_entry_on_change(GtkEditable *editable,
2194 struct tm *cal_time;
2198 cur_time = time(NULL);
2199 cal_time = localtime(&cur_time);
2201 text = gtk_editable_get_chars(editable, 0, -1);
2203 strftime(buffer, sizeof buffer, text, cal_time);
2206 text = conv_codeset_strdup(buffer,
2207 conv_get_current_charset_str(),
2210 text = g_strdup(buffer);
2212 gtk_label_set_text(example, text);
2217 static void date_format_select_row(GtkWidget *date_format_list, gint row,
2218 gint column, GdkEventButton *event,
2219 GtkWidget *date_format)
2223 const gchar *old_format;
2225 GtkWidget *datefmt_sample;
2227 /* only on double click */
2228 if (!event || event->type != GDK_2BUTTON_PRESS) return;
2231 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2234 g_return_if_fail(date_format_list != NULL);
2235 g_return_if_fail(date_format != NULL);
2236 g_return_if_fail(datefmt_sample != NULL);
2238 /* get format from clist */
2239 gtk_clist_get_text(GTK_CLIST(date_format_list), row, 0, &format);
2241 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2242 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2244 /* insert the format into the text entry */
2245 new_format = g_malloc(strlen(old_format) + 3);
2247 strncpy(new_format, old_format, cur_pos);
2248 new_format[cur_pos] = '\0';
2249 strcat(new_format, format);
2250 strcat(new_format, &old_format[cur_pos]);
2252 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2253 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2258 static GtkWidget *date_format_create(GtkButton *button, void *data)
2260 static GtkWidget *datefmt_win = NULL;
2262 GtkWidget *scrolledwindow1;
2263 GtkWidget *datefmt_clist;
2268 GtkWidget *confirm_area;
2270 GtkWidget *cancel_btn;
2271 GtkWidget *datefmt_entry;
2300 const gint TIME_FORMAT_ELEMS =
2301 sizeof time_format / sizeof time_format[0];
2303 time_format[0].txt = _("the full abbreviated weekday name");
2304 time_format[1].txt = _("the full weekday name");
2305 time_format[2].txt = _("the abbreviated month name");
2306 time_format[3].txt = _("the full month name");
2307 time_format[4].txt = _("the preferred date and time for the current locale");
2308 time_format[5].txt = _("the century number (year/100)");
2309 time_format[6].txt = _("the day of the month as a decimal number");
2310 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2311 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2312 time_format[9].txt = _("the day of the year as a decimal number");
2313 time_format[10].txt = _("the month as a decimal number");
2314 time_format[11].txt = _("the minute as a decimal number");
2315 time_format[12].txt = _("either AM or PM");
2316 time_format[13].txt = _("the second as a decimal number");
2317 time_format[14].txt = _("the day of the week as a decimal number");
2318 time_format[15].txt = _("the preferred date for the current locale");
2319 time_format[16].txt = _("the last two digits of a year");
2320 time_format[17].txt = _("the year as a decimal number");
2321 time_format[18].txt = _("the time zone or name or abbreviation");
2323 if (datefmt_win) return datefmt_win;
2325 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2326 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2327 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2328 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2329 gtk_widget_set_size_request(datefmt_win, 440, 280);
2331 vbox1 = gtk_vbox_new(FALSE, 10);
2332 gtk_widget_show(vbox1);
2333 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2335 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2336 gtk_scrolled_window_set_policy
2337 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2338 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2339 gtk_widget_show(scrolledwindow1);
2340 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2342 titles[0] = _("Specifier");
2343 titles[1] = _("Description");
2344 datefmt_clist = gtk_clist_new_with_titles(2, titles);
2345 gtk_widget_show(datefmt_clist);
2346 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_clist);
2347 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2348 gtk_clist_set_selection_mode(GTK_CLIST(datefmt_clist),
2349 GTK_SELECTION_BROWSE);
2351 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2353 /* phoney casting necessary because of gtk... */
2354 text[0] = (gchar *)time_format[i].fmt;
2355 text[1] = (gchar *)time_format[i].txt;
2356 gtk_clist_append(GTK_CLIST(datefmt_clist), text);
2359 table = gtk_table_new(2, 2, FALSE);
2360 gtk_widget_show(table);
2361 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2362 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2363 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2365 label1 = gtk_label_new(_("Date format"));
2366 gtk_widget_show(label1);
2367 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2369 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2370 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2372 datefmt_entry = gtk_entry_new();
2373 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2374 gtk_widget_show(datefmt_entry);
2375 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2376 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2378 /* we need the "sample" entry box; add it as data so callbacks can
2379 * get the entry box */
2380 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2383 label2 = gtk_label_new(_("Example"));
2384 gtk_widget_show(label2);
2385 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2387 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2388 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2390 label3 = gtk_label_new("");
2391 gtk_widget_show(label3);
2392 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2393 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2394 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2395 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2397 gtkut_button_set_create(&confirm_area, &ok_btn, _("OK"),
2398 &cancel_btn, _("Cancel"), NULL, NULL);
2399 gtk_widget_grab_default(ok_btn);
2400 gtk_widget_show(confirm_area);
2402 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2404 /* set the current format */
2405 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2406 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2409 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2410 G_CALLBACK(date_format_ok_btn_clicked),
2412 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2413 G_CALLBACK(date_format_cancel_btn_clicked),
2415 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2416 G_CALLBACK(date_format_key_pressed),
2418 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2419 G_CALLBACK(date_format_on_delete),
2421 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2422 G_CALLBACK(date_format_entry_on_change),
2425 g_signal_connect(G_OBJECT(datefmt_clist), "select_row",
2426 G_CALLBACK(date_format_select_row),
2429 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2430 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2432 gtk_widget_show(datefmt_win);
2433 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2435 gtk_widget_grab_focus(ok_btn);
2440 static void prefs_keybind_select(void)
2447 GtkWidget *confirm_area;
2449 GtkWidget *cancel_btn;
2451 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2452 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2453 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2454 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2455 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2456 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2457 manage_window_set_transient (GTK_WINDOW (window));
2459 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2460 gtk_container_add (GTK_CONTAINER (window), vbox1);
2461 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2463 hbox1 = gtk_hbox_new (FALSE, 8);
2464 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2466 label = gtk_label_new
2467 (_("Select preset:"));
2468 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2469 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2471 hbox1 = gtk_hbox_new (FALSE, 8);
2472 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2474 combo = gtk_combo_new ();
2475 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2476 gtkut_combo_set_items (GTK_COMBO (combo),
2482 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2484 hbox1 = gtk_hbox_new (FALSE, 8);
2485 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2487 label = gtk_label_new
2488 (_("You can also modify each menu shortcut by pressing\n"
2489 "any key(s) when placing the mouse pointer on the item."));
2490 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2491 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2493 hbox1 = gtk_hbox_new (FALSE, 8);
2494 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2496 gtkut_button_set_create (&confirm_area, &ok_btn, _("OK"),
2497 &cancel_btn, _("Cancel"), NULL, NULL);
2498 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2499 gtk_widget_grab_default (ok_btn);
2501 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2502 g_signal_connect (G_OBJECT (window), "delete_event",
2503 G_CALLBACK (prefs_keybind_deleted), NULL);
2504 g_signal_connect (G_OBJECT (window), "key_press_event",
2505 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2506 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2507 G_CALLBACK (prefs_keybind_apply_clicked),
2509 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2510 G_CALLBACK (prefs_keybind_cancel),
2513 gtk_widget_show_all(window);
2515 keybind.window = window;
2516 keybind.combo = combo;
2519 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2522 if (event && event->keyval == GDK_Escape)
2523 prefs_keybind_cancel();
2527 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2530 prefs_keybind_cancel();
2534 static void prefs_keybind_cancel(void)
2536 gtk_widget_destroy(keybind.window);
2537 keybind.window = NULL;
2538 keybind.combo = NULL;
2542 const gchar *accel_path;
2543 const gchar *accel_key;
2546 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2550 GdkModifierType mods;
2552 for (i = 0; i < num; i++) {
2553 const gchar *accel_key
2554 = keybind[i].accel_key ? keybind[i].accel_key : "";
2555 gtk_accelerator_parse(accel_key, &key, &mods);
2556 gtk_accel_map_change_entry(keybind[i].accel_path,
2561 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2563 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2565 struct KeyBind *menurc;
2568 static struct KeyBind default_menurc[] = {
2569 {"<Main>/File/Empty trash", ""},
2570 {"<Main>/File/Save as...", "<control>S"},
2571 {"<Main>/File/Print...", ""},
2572 {"<Main>/File/Exit", "<control>Q"},
2574 {"<Main>/Edit/Copy", "<control>C"},
2575 {"<Main>/Edit/Select all", "<control>A"},
2576 {"<Main>/Edit/Find in current message...", "<control>F"},
2577 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2579 {"<Main>/View/Expand Summary View", "V"},
2580 {"<Main>/View/Expand Message View", "<shift>V"},
2581 {"<Main>/View/Thread view", "<control>T"},
2582 {"<Main>/View/Go to/Prev message", "P"},
2583 {"<Main>/View/Go to/Next message", "N"},
2584 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2585 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2586 {"<Main>/View/Go to/Other folder...", "G"},
2587 {"<Main>/View/Open in new window", "<control><alt>N"},
2588 {"<Main>/View/View source", "<control>U"},
2589 {"<Main>/View/Show all headers", "<control>H"},
2590 {"<Main>/View/Update", "<control><alt>U"},
2592 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2593 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2594 {"<Main>/Message/Compose an email message", "<control>M"},
2595 {"<Main>/Message/Reply", "<control>R"},
2596 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2597 {"<Main>/Message/Reply to/sender", ""},
2598 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2599 {"<Main>/Message/Forward", "<control><alt>F"},
2600 /* {"<Main>/Message/Forward as attachment", ""}, */
2601 {"<Main>/Message/Move...", "<control>O"},
2602 {"<Main>/Message/Copy...", "<shift><control>O"},
2603 {"<Main>/Message/Delete", "<control>D"},
2604 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2605 {"<Main>/Message/Mark/Unmark", "U"},
2606 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2607 {"<Main>/Message/Mark/Mark as read", ""},
2609 {"<Main>/Tools/Address book", "<shift><control>A"},
2610 {"<Main>/Tools/Execute", "X"},
2611 {"<Main>/Tools/Log window", "<shift><control>L"},
2613 {"<Compose>/File/Close", "<control>W"},
2614 {"<Compose>/Edit/Select all", "<control>A"},
2615 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2616 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2617 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2618 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2619 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2622 static struct KeyBind mew_wl_menurc[] = {
2623 {"<Main>/File/Empty trash", "<shift>D"},
2624 {"<Main>/File/Save as...", "Y"},
2625 {"<Main>/File/Print...", "<shift>numbersign"},
2626 {"<Main>/File/Exit", "<shift>Q"},
2628 {"<Main>/Edit/Copy", "<control>C"},
2629 {"<Main>/Edit/Select all", "<control>A"},
2630 {"<Main>/Edit/Find in current message...", "<control>F"},
2631 {"<Main>/Edit/Search folder...", "<control>S"},
2633 {"<Main>/View/Expand Summary View", ""},
2634 {"<Main>/View/Expand Message View", ""},
2635 {"<Main>/View/Thread view", "<shift>T"},
2636 {"<Main>/View/Go to/Prev message", "P"},
2637 {"<Main>/View/Go to/Next message", "N"},
2638 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2639 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2640 {"<Main>/View/Go to/Other folder...", "G"},
2641 {"<Main>/View/Open in new window", "<control><alt>N"},
2642 {"<Main>/View/View source", "<control>U"},
2643 {"<Main>/View/Show all headers", "<shift>H"},
2644 {"<Main>/View/Update", "<shift>S"},
2646 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2647 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2648 {"<Main>/Message/Compose an email message", "W"},
2649 {"<Main>/Message/Reply", "<control>R"},
2650 {"<Main>/Message/Reply to/all", "<shift>A"},
2651 {"<Main>/Message/Reply to/sender", ""},
2652 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2653 {"<Main>/Message/Forward", "F"},
2654 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2655 {"<Main>/Message/Move...", "O"},
2656 {"<Main>/Message/Copy...", "<shift>O"},
2657 {"<Main>/Message/Delete", "D"},
2658 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2659 {"<Main>/Message/Mark/Unmark", "U"},
2660 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2661 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2663 {"<Main>/Tools/Address book", "<shift><control>A"},
2664 {"<Main>/Tools/Execute", "X"},
2665 {"<Main>/Tools/Log window", "<shift><control>L"},
2667 {"<Compose>/File/Close", "<alt>W"},
2668 {"<Compose>/Edit/Select all", ""},
2669 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2670 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2671 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2672 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2673 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2676 static struct KeyBind mutt_menurc[] = {
2677 {"<Main>/File/Empty trash", ""},
2678 {"<Main>/File/Save as...", "S"},
2679 {"<Main>/File/Print...", "P"},
2680 {"<Main>/File/Exit", "Q"},
2682 {"<Main>/Edit/Copy", "<control>C"},
2683 {"<Main>/Edit/Select all", "<control>A"},
2684 {"<Main>/Edit/Find in current message...", "<control>F"},
2685 {"<Main>/Edit/Search messages...", "slash"},
2687 {"<Main>/View/Toggle summary view", "V"},
2688 {"<Main>/View/Thread view", "<control>T"},
2689 {"<Main>/View/Go to/Prev message", ""},
2690 {"<Main>/View/Go to/Next message", ""},
2691 {"<Main>/View/Go to/Prev unread message", ""},
2692 {"<Main>/View/Go to/Next unread message", ""},
2693 {"<Main>/View/Go to/Other folder...", "C"},
2694 {"<Main>/View/Open in new window", "<control><alt>N"},
2695 {"<Main>/View/View source", "<control>U"},
2696 {"<Main>/View/Show all headers", "<control>H"},
2697 {"<Main>/View/Update", "<control><alt>U"},
2699 {"<Main>/Message/Receive/Get new mail", "<control>I"},
2700 {"<Main>/Message/Receive/Get from all accounts", "<shift><control>I"},
2701 {"<Main>/Message/Compose an email message", "M"},
2702 {"<Main>/Message/Reply", "R"},
2703 {"<Main>/Message/Reply to/all", "G"},
2704 {"<Main>/Message/Reply to/sender", ""},
2705 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2706 {"<Main>/Message/Forward", "F"},
2707 {"<Main>/Message/Forward as attachment", ""},
2708 {"<Main>/Message/Move...", "<control>O"},
2709 {"<Main>/Message/Copy...", "<shift>C"},
2710 {"<Main>/Message/Delete", "D"},
2711 {"<Main>/Message/Mark/Mark", "<shift>F"},
2712 {"<Main>/Message/Mark/Unmark", "U"},
2713 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2714 {"<Main>/Message/Mark/Mark as read", ""},
2716 {"<Main>/Tools/Address book", "<shift><control>A"},
2717 {"<Main>/Tools/Execute", "X"},
2718 {"<Main>/Tools/Log window", "<shift><control>L"},
2720 {"<Compose>/File/Close", "<alt>W"},
2721 {"<Compose>/Edit/Select all", ""},
2722 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2723 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2724 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2725 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2726 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2729 static struct KeyBind old_sylpheed_menurc[] = {
2730 {"<Main>/File/Empty trash", ""},
2731 {"<Main>/File/Save as...", ""},
2732 {"<Main>/File/Print...", "<alt>P"},
2733 {"<Main>/File/Exit", "<alt>Q"},
2735 {"<Main>/Edit/Copy", "<control>C"},
2736 {"<Main>/Edit/Select all", "<control>A"},
2737 {"<Main>/Edit/Find in current message...", "<control>F"},
2738 {"<Main>/Edit/Search folder...", "<control>S"},
2740 {"<Main>/View/Expand Summary View", ""},
2741 {"<Main>/View/Expand Message View", ""},
2742 {"<Main>/View/Thread view", "<control>T"},
2743 {"<Main>/View/Go to/Prev message", "P"},
2744 {"<Main>/View/Go to/Next message", "N"},
2745 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2746 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2747 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2748 {"<Main>/View/Open in new window", "<shift><control>N"},
2749 {"<Main>/View/View source", "<control>U"},
2750 {"<Main>/View/Show all headers", "<control>H"},
2751 {"<Main>/View/Update", "<alt>U"},
2753 {"<Main>/Message/Receive/Get new mail", "<alt>I"},
2754 {"<Main>/Message/Receive/Get from all accounts", "<shift><alt>I"},
2755 {"<Main>/Message/Compose an email message", "<alt>N"},
2756 {"<Main>/Message/Reply", "<alt>R"},
2757 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2758 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2759 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2760 {"<Main>/Message/Forward", "<shift><alt>F"},
2761 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2762 {"<Main>/Message/Move...", "<alt>O"},
2763 {"<Main>/Message/Copy...", ""},
2764 {"<Main>/Message/Delete", "<alt>D"},
2765 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2766 {"<Main>/Message/Mark/Unmark", "U"},
2767 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2768 {"<Main>/Message/Mark/Mark as read", ""},
2770 {"<Main>/Tools/Address book", "<alt>A"},
2771 {"<Main>/Tools/Execute", "<alt>X"},
2772 {"<Main>/Tools/Log window", "<alt>L"},
2774 {"<Compose>/File/Close", "<alt>W"},
2775 {"<Compose>/Edit/Select all", ""},
2776 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2777 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2778 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2779 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2780 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2783 text = gtk_entry_get_text(entry);
2785 if (!strcmp(text, _("Default"))) {
2786 menurc = default_menurc;
2787 n_menurc = G_N_ELEMENTS(default_menurc);
2788 } else if (!strcmp(text, "Mew / Wanderlust")) {
2789 menurc = mew_wl_menurc;
2790 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2791 } else if (!strcmp(text, "Mutt")) {
2792 menurc = mutt_menurc;
2793 n_menurc = G_N_ELEMENTS(mutt_menurc);
2794 } else if (!strcmp(text, _("Old Sylpheed"))) {
2795 menurc = old_sylpheed_menurc;
2796 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2801 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2802 prefs_keybind_apply(menurc, n_menurc);
2804 gtk_widget_destroy(keybind.window);
2805 keybind.window = NULL;
2806 keybind.combo = NULL;
2809 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2812 GtkWidget *menuitem;
2815 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2816 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2817 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2818 g_free(*((gchar **)pparam->data));
2819 *((gchar **)pparam->data) = g_strdup(charset);
2822 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2824 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2827 g_return_if_fail(optmenu != NULL);
2828 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2830 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2831 (GCompareFunc)strcmp);
2833 gtk_option_menu_set_history(optmenu, index);
2835 gtk_option_menu_set_history(optmenu, 0);
2836 prefs_common_charset_set_data_from_optmenu(pparam);
2840 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2843 GtkWidget *menuitem;
2845 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2846 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2847 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2848 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2851 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2853 TransferEncodingMethod method =
2854 *((TransferEncodingMethod *)pparam->data);
2855 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2858 g_return_if_fail(optmenu != NULL);
2860 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2863 gtk_option_menu_set_history(optmenu, index);
2865 gtk_option_menu_set_history(optmenu, 0);
2866 prefs_common_encoding_set_data_from_optmenu(pparam);
2870 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2873 GtkWidget *menuitem;
2875 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2876 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2877 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2878 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2881 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2883 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2884 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2886 GtkWidget *menuitem;
2889 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2892 gtk_option_menu_set_history(optmenu, index);
2894 gtk_option_menu_set_history(optmenu, 0);
2895 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2898 menu = gtk_option_menu_get_menu(optmenu);
2899 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2900 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2903 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2906 GtkWidget *menuitem;
2908 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2909 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2910 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2911 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2914 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2916 SendDialogMode mode = *((SendDialogMode *)pparam->data);
2917 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2919 GtkWidget *menuitem;
2922 case SEND_DIALOG_ALWAYS:
2923 gtk_option_menu_set_history(optmenu, 0);
2925 case SEND_DIALOG_NEVER:
2926 gtk_option_menu_set_history(optmenu, 1);
2932 menu = gtk_option_menu_get_menu(optmenu);
2933 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2934 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2937 static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event,
2940 prefs_common_cancel();
2944 static gboolean prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event,
2947 if (event && event->keyval == GDK_Escape)
2948 prefs_common_cancel();
2952 static void prefs_common_ok(void)
2954 prefs_common_apply();
2955 gtk_widget_hide(dialog.window);
2960 static void prefs_common_apply(void)
2962 MainWindow *mainwindow;
2964 prefs_set_data_from_dialog(param);
2965 sock_set_io_timeout(prefs_common.io_timeout_secs);
2966 main_window_reflect_prefs_all_real(FALSE);
2967 prefs_common_write_config();
2969 mainwindow = mainwindow_get_mainwindow();
2970 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
2971 prefs_common.loglength);
2973 inc_autocheck_timer_remove();
2974 inc_autocheck_timer_set();
2977 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
2980 GtkWidget *menuitem;
2982 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2983 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2984 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
2985 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2988 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
2990 NextUnreadMsgDialogShow dialog_show;
2991 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2993 GtkWidget *menuitem;
2995 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
2997 switch (dialog_show) {
2998 case NEXTUNREADMSGDIALOG_ALWAYS:
2999 gtk_option_menu_set_history(optmenu, 0);
3001 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3002 gtk_option_menu_set_history(optmenu, 1);
3004 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3005 gtk_option_menu_set_history(optmenu, 2);
3009 menu = gtk_option_menu_get_menu(optmenu);
3010 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3011 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3014 static void prefs_common_cancel(void)
3016 gtk_widget_hide(dialog.window);
3021 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3024 GtkWidget *menuitem;
3026 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3027 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3028 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3029 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3032 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3034 RecvDialogShow dialog_show;
3035 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3037 GtkWidget *menuitem;
3039 dialog_show = *((RecvDialogShow *)pparam->data);
3041 switch (dialog_show) {
3042 case RECVDIALOG_ALWAYS:
3043 gtk_option_menu_set_history(optmenu, 0);
3045 case RECVDIALOG_WINDOW_ACTIVE:
3046 gtk_option_menu_set_history(optmenu, 1);
3048 case RECVDIALOG_NEVER:
3049 gtk_option_menu_set_history(optmenu, 2);
3054 menu = gtk_option_menu_get_menu(optmenu);
3055 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3056 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));