2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2005 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.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #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"
59 #include "prefswindow.h"
67 PrefsCommon prefs_common;
71 static struct Receive {
72 GtkWidget *checkbtn_incext;
73 GtkWidget *entry_incext;
74 GtkWidget *button_incext;
76 GtkWidget *checkbtn_autochk;
77 GtkWidget *spinbtn_autochk;
78 GtkObject *spinbtn_autochk_adj;
80 GtkWidget *checkbtn_chkonstartup;
81 GtkWidget *checkbtn_scan_after_inc;
84 GtkWidget *checkbtn_newmail_auto;
85 GtkWidget *checkbtn_newmail_manu;
86 GtkWidget *entry_newmail_notify_cmd;
87 GtkWidget *hbox_newmail_notify;
88 GtkWidget *optmenu_recvdialog;
89 GtkWidget *checkbtn_no_recv_err_panel;
90 GtkWidget *checkbtn_close_recv_dialog;
94 GtkWidget *checkbtn_savemsg;
95 GtkWidget *optmenu_senddialog;
97 GtkWidget *optmenu_charset;
98 GtkWidget *optmenu_encoding_method;
101 static struct Compose {
102 GtkWidget *entry_fw_quotemark;
103 GtkWidget *text_fw_quotefmt;
105 GtkWidget *checkbtn_autoextedit;
106 GtkWidget *spinbtn_undolevel;
107 GtkObject *spinbtn_undolevel_adj;
109 GtkWidget *checkbtn_reply_account_autosel;
110 GtkWidget *checkbtn_forward_account_autosel;
111 GtkWidget *checkbtn_reedit_account_autosel;
112 GtkWidget *checkbtn_quote;
113 GtkWidget *checkbtn_default_reply_list;
114 GtkWidget *checkbtn_forward_as_attachment;
115 GtkWidget *checkbtn_redirect_keep_from;
116 GtkWidget *checkbtn_reply_with_quote;
118 GtkWidget *checkbtn_autosave;
119 GtkWidget *entry_autosave_length;
122 static struct Quote {
123 GtkWidget *entry_quotemark;
124 GtkWidget *text_quotefmt;
126 GtkWidget *entry_fw_quotemark;
127 GtkWidget *text_fw_quotefmt;
129 GtkWidget *entry_quote_chars;
132 static struct Display {
133 GtkWidget *chkbtn_folder_unread;
134 GtkWidget *entry_ng_abbrev_len;
135 GtkWidget *spinbtn_ng_abbrev_len;
136 GtkObject *spinbtn_ng_abbrev_len_adj;
138 GtkWidget *chkbtn_transhdr;
140 GtkWidget *chkbtn_swapfrom;
141 GtkWidget *chkbtn_useaddrbook;
142 GtkWidget *chkbtn_threadsubj;
143 GtkWidget *entry_datefmt;
146 static struct Message {
147 GtkWidget *chkbtn_mbalnum;
148 GtkWidget *chkbtn_disphdrpane;
149 GtkWidget *chkbtn_disphdr;
150 GtkWidget *chkbtn_html;
151 GtkWidget *spinbtn_linespc;
152 GtkObject *spinbtn_linespc_adj;
154 GtkWidget *chkbtn_smoothscroll;
155 GtkWidget *spinbtn_scrollstep;
156 GtkObject *spinbtn_scrollstep_adj;
157 GtkWidget *chkbtn_halfpage;
159 GtkWidget *chkbtn_attach_desc;
162 static struct Interface {
163 /* GtkWidget *checkbtn_emacs; */
164 GtkWidget *checkbtn_always_show_msg;
165 GtkWidget *checkbtn_openunread;
166 GtkWidget *checkbtn_mark_as_read_on_newwin;
167 GtkWidget *checkbtn_openinbox;
168 GtkWidget *checkbtn_immedexec;
169 GtkWidget *optmenu_nextunreadmsgdialog;
172 static struct Other {
173 GtkWidget *checkbtn_addaddrbyclick;
174 GtkWidget *checkbtn_confonexit;
175 GtkWidget *checkbtn_cleanonexit;
176 GtkWidget *checkbtn_askonclean;
177 GtkWidget *checkbtn_warnqueued;
178 GtkWidget *checkbtn_cliplog;
179 GtkWidget *loglength_entry;
182 GtkWidget *checkbtn_ssl_ask_unknown_valid;
186 GtkWidget *spinbtn_iotimeout;
187 GtkObject *spinbtn_iotimeout_adj;
190 static struct KeybindDialog {
195 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
196 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
197 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
198 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
199 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
200 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
201 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
203 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
204 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
205 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
206 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
207 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
208 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
211 parameter name, default value, pointer to the prefs variable, data type,
212 pointer to the widget pointer,
213 pointer to the function for data setting,
214 pointer to the function for widget setting
217 static PrefParam param[] = {
219 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
220 &receive.checkbtn_incext,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
223 &receive.entry_incext,
224 prefs_set_data_from_entry, prefs_set_entry},
226 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
227 &receive.checkbtn_autochk,
228 prefs_set_data_from_toggle, prefs_set_toggle},
229 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
230 &receive.spinbtn_autochk,
231 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
232 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
233 &receive.checkbtn_chkonstartup,
234 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
236 P_BOOL, &receive.checkbtn_scan_after_inc,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
239 P_BOOL, &receive.checkbtn_newmail_manu,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
242 P_BOOL, &receive.checkbtn_newmail_auto,
243 prefs_set_data_from_toggle, prefs_set_toggle},
244 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
245 &receive.entry_newmail_notify_cmd,
246 prefs_set_data_from_entry, prefs_set_entry},
247 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
248 &receive.optmenu_recvdialog,
249 prefs_common_recv_dialog_set_data_from_optmenu,
250 prefs_common_recv_dialog_set_optmenu},
251 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
252 P_BOOL, &receive.checkbtn_no_recv_err_panel,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
255 P_BOOL, &receive.checkbtn_close_recv_dialog,
256 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
260 &p_send.checkbtn_savemsg,
261 prefs_set_data_from_toggle, prefs_set_toggle},
262 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
263 &p_send.optmenu_senddialog,
264 prefs_common_send_dialog_set_data_from_optmenu,
265 prefs_common_send_dialog_set_optmenu},
267 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
268 &p_send.optmenu_charset,
269 prefs_common_charset_set_data_from_optmenu,
270 prefs_common_charset_set_optmenu},
271 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
272 &p_send.optmenu_encoding_method,
273 prefs_common_encoding_set_data_from_optmenu,
274 prefs_common_encoding_set_optmenu},
276 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
277 P_BOOL, NULL, NULL, NULL},
280 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
281 &compose.checkbtn_autoextedit,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
284 P_BOOL, &compose.checkbtn_forward_as_attachment,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"redirect_keep_from", "FALSE",
287 &prefs_common.redirect_keep_from, P_BOOL,
288 &compose.checkbtn_redirect_keep_from,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"undo_level", "50", &prefs_common.undolevels, P_INT,
291 &compose.spinbtn_undolevel,
292 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
294 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
296 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
298 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
300 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
302 {"autosave", "FALSE", &prefs_common.autosave,
303 P_BOOL, &compose.checkbtn_autosave,
304 prefs_set_data_from_toggle, prefs_set_toggle},
305 {"autosave_length", "50", &prefs_common.autosave_length,
306 P_INT, &compose.entry_autosave_length,
307 prefs_set_data_from_entry, prefs_set_entry},
309 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
311 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
313 {"dictionary", "", &prefs_common.dictionary, P_STRING,
315 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
317 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
319 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
321 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
324 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
325 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
327 /* Account autoselection */
328 {"reply_account_autoselect", "TRUE",
329 &prefs_common.reply_account_autosel, P_BOOL,
330 &compose.checkbtn_reply_account_autosel,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"forward_account_autoselect", "TRUE",
333 &prefs_common.forward_account_autosel, P_BOOL,
334 &compose.checkbtn_forward_account_autosel,
335 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"reedit_account_autoselect", "TRUE",
337 &prefs_common.reedit_account_autosel, P_BOOL,
338 &compose.checkbtn_reedit_account_autosel,
339 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
342 &compose.checkbtn_default_reply_list,
343 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
349 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
350 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
351 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
352 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
353 prefs_set_data_from_text, prefs_set_text},
355 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
356 "e.entry_fw_quotemark,
357 prefs_set_data_from_entry, prefs_set_entry},
358 {"forward_quote_format",
359 "\\n\\nBegin forwarded message:\\n\\n"
360 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
361 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
362 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
363 prefs_set_data_from_text, prefs_set_text},
364 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
365 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
368 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
369 {"widget_font", NULL,
370 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
371 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
372 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
373 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
374 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
375 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
376 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
377 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
378 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
381 {"widget_font_gtk2", NULL,
382 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
383 {"message_font_gtk2", "Monospace 9",
384 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
385 {"small_font_gtk2", "Sans 9",
386 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
387 {"bold_font_gtk2", "Sans Bold 9",
388 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
389 {"normal_font_gtk2", "Sans 9",
390 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
393 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
395 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
397 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
400 {"display_folder_unread_num", "TRUE",
401 &prefs_common.display_folder_unread, P_BOOL,
402 &display.chkbtn_folder_unread,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"newsgroup_abbrev_len", "16",
405 &prefs_common.ng_abbrev_len, P_INT,
406 &display.spinbtn_ng_abbrev_len,
407 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
409 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
410 &display.chkbtn_transhdr,
411 prefs_set_data_from_toggle, prefs_set_toggle},
413 /* Display: Summary View */
414 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
415 &display.chkbtn_swapfrom,
416 prefs_set_data_from_toggle, prefs_set_toggle},
417 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
418 &display.chkbtn_useaddrbook,
419 prefs_set_data_from_toggle, prefs_set_toggle},
420 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
421 &display.chkbtn_threadsubj,
422 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
424 P_STRING, &display.entry_datefmt,
425 prefs_set_data_from_entry, prefs_set_entry},
427 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
429 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
431 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
432 P_INT, NULL, NULL, NULL },
434 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
436 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
438 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
440 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
443 {"folderview_vscrollbar_policy", "0",
444 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
447 {"summary_col_show_mark", "TRUE",
448 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
449 {"summary_col_show_unread", "TRUE",
450 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_show_mime", "TRUE",
452 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_show_subject", "TRUE",
454 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
455 {"summary_col_show_from", "TRUE",
456 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
457 {"summary_col_show_date", "TRUE",
458 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_show_size", "TRUE",
460 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_show_number", "FALSE",
462 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_show_score", "FALSE",
464 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_show_locked", "FALSE",
466 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_pos_mark", "0",
469 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
470 {"summary_col_pos_unread", "1",
471 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
472 {"summary_col_pos_mime", "2",
473 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
474 {"summary_col_pos_subject", "3",
475 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_from", "4",
477 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
478 {"summary_col_pos_date", "5",
479 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
480 {"summary_col_pos_size", "6",
481 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
482 {"summary_col_pos_number", "7",
483 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
484 {"summary_col_pos_score", "8",
485 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
486 {"summary_col_pos_locked", "9",
487 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
489 {"summary_col_size_mark", "10",
490 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_unread", "13",
492 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_mime", "10",
494 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_subject", "200",
496 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_from", "120",
498 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_date", "118",
500 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_size", "45",
502 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_number", "40",
504 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_score", "40",
506 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_locked", "13",
508 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
511 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
513 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
515 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
517 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
519 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
522 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
524 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
526 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
528 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
531 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
533 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
536 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
538 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
540 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
542 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
544 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
547 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
549 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
551 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
553 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
555 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
557 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
559 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
561 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
563 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
565 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
567 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
569 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
571 {"compose_width", "600", &prefs_common.compose_width, P_INT,
573 {"compose_height", "560", &prefs_common.compose_height, P_INT,
575 {"compose_x", "0", &prefs_common.compose_x, P_INT,
577 {"compose_y", "0", &prefs_common.compose_y, P_INT,
580 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
583 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
585 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
587 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
589 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
591 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
593 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
595 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
596 P_BOOL, NULL, NULL, NULL},
598 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
599 &message.chkbtn_mbalnum,
600 prefs_set_data_from_toggle, prefs_set_toggle},
601 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
602 P_BOOL, &message.chkbtn_disphdrpane,
603 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
605 &message.chkbtn_disphdr,
606 prefs_set_data_from_toggle, prefs_set_toggle},
607 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
608 &message.chkbtn_html,
609 prefs_set_data_from_toggle, prefs_set_toggle},
610 {"line_space", "2", &prefs_common.line_space, P_INT,
611 &message.spinbtn_linespc,
612 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
614 {"enable_smooth_scroll", "FALSE",
615 &prefs_common.enable_smooth_scroll, P_BOOL,
616 &message.chkbtn_smoothscroll,
617 prefs_set_data_from_toggle, prefs_set_toggle},
618 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
619 &message.spinbtn_scrollstep,
620 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
621 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
622 &message.chkbtn_halfpage,
623 prefs_set_data_from_toggle, prefs_set_toggle},
625 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
628 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
629 &message.chkbtn_attach_desc,
630 prefs_set_data_from_toggle, prefs_set_toggle},
631 {"attach_save_directory", NULL,
632 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
635 {"mime_image_viewer", "display '%s'",
636 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
637 {"mime_audio_player", "play '%s'",
638 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
639 {"mime_open_command", "gedit '%s'",
640 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
643 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
645 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
648 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
649 NULL, NULL, NULL}, */
650 {"always_show_message_when_selected", "FALSE",
651 &prefs_common.always_show_msg,
652 P_BOOL, &interface.checkbtn_always_show_msg,
653 prefs_set_data_from_toggle, prefs_set_toggle},
654 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
655 P_BOOL, &interface.checkbtn_openunread,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 {"mark_as_read_on_new_window", "FALSE",
658 &prefs_common.mark_as_read_on_new_window,
659 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 {"mark_as_read_delay", "0",
662 &prefs_common.mark_as_read_delay, P_INT,
664 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
665 P_BOOL, &interface.checkbtn_openinbox,
666 prefs_set_data_from_toggle, prefs_set_toggle},
667 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
668 &interface.checkbtn_immedexec,
669 prefs_set_data_from_toggle, prefs_set_toggle},
670 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
671 &interface.optmenu_nextunreadmsgdialog,
672 prefs_nextunreadmsgdialog_set_data_from_optmenu,
673 prefs_nextunreadmsgdialog_set_optmenu},
675 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
676 &prefs_common.pixmap_theme_path, P_STRING,
679 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
683 {"uri_open_command", DEFAULT_BROWSER_CMD,
684 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
685 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
687 {"ext_editor_command", "gedit %s",
688 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
690 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
691 P_BOOL, &other.checkbtn_addaddrbyclick,
692 prefs_set_data_from_toggle, prefs_set_toggle},
694 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
695 &other.checkbtn_confonexit,
696 prefs_set_data_from_toggle, prefs_set_toggle},
697 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
698 &other.checkbtn_cleanonexit,
699 prefs_set_data_from_toggle, prefs_set_toggle},
700 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
701 &other.checkbtn_askonclean,
702 prefs_set_data_from_toggle, prefs_set_toggle},
703 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
704 P_BOOL, &other.checkbtn_warnqueued,
705 prefs_set_data_from_toggle, prefs_set_toggle},
708 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
709 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
710 prefs_set_data_from_toggle, prefs_set_toggle},
713 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
715 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
717 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
719 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
722 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
723 P_INT, &other.spinbtn_iotimeout,
724 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
725 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
727 {"important_score", "1", &prefs_common.important_score, P_INT,
729 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
730 &other.checkbtn_cliplog,
731 prefs_set_data_from_toggle, prefs_set_toggle},
732 {"log_length", "500", &prefs_common.loglength, P_INT,
733 &other.loglength_entry,
734 prefs_set_data_from_entry, prefs_set_entry},
736 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
738 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
741 {"color_new", "179", &prefs_common.color_new, P_COLOR,
744 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
747 /* widget creating functions */
748 static void prefs_common_create (void);
749 static void prefs_receive_create (void);
750 static void prefs_send_create (void);
751 static void prefs_compose_create (void);
752 static void prefs_quote_create (void);
753 static void prefs_display_create (void);
754 static void prefs_message_create (void);
755 static void prefs_interface_create (void);
756 static void prefs_other_create (void);
758 static void date_format_ok_btn_clicked (GtkButton *button,
760 static void date_format_cancel_btn_clicked (GtkButton *button,
762 static gboolean date_format_key_pressed (GtkWidget *keywidget,
765 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
768 static void date_format_entry_on_change (GtkEditable *editable,
770 static void date_format_select_row (GtkTreeView *list_view,
772 GtkTreeViewColumn *column,
773 GtkWidget *date_format);
774 static GtkWidget *date_format_create (GtkButton *button,
777 static void prefs_keybind_select (void);
778 static gint prefs_keybind_deleted (GtkWidget *widget,
781 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
784 static void prefs_keybind_cancel (void);
785 static void prefs_keybind_apply_clicked (GtkWidget *widget);
787 static void prefs_common_apply (void);
789 typedef struct CommonPage
796 static CommonPage common_page;
798 static void create_widget_func(PrefsPage * _page,
802 CommonPage *page = (CommonPage *) _page;
805 vbox = gtk_vbox_new(FALSE, 6);
806 gtk_widget_show(vbox);
808 if (notebook == NULL)
809 prefs_common_create();
810 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
811 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
813 prefs_set_dialog(param);
817 page->page.widget = vbox;
820 static void destroy_widget_func(PrefsPage *_page)
822 CommonPage *page = (CommonPage *) _page;
824 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
827 static void save_func(PrefsPage * _page)
829 prefs_common_apply();
832 void prefs_common_init(void)
834 static gchar *path[2];
836 prefs_common.disphdr_list = NULL;
838 path[0] = _("Common");
841 common_page.page.path = path;
842 common_page.page.weight = 1000.0;
843 common_page.page.create_widget = create_widget_func;
844 common_page.page.destroy_widget = destroy_widget_func;
845 common_page.page.save_page = save_func;
847 prefs_gtk_register_page((PrefsPage *) &common_page);
850 PrefsCommon *prefs_common_get(void)
852 return &prefs_common;
856 * Read history list from the specified history file
858 GList *prefs_common_read_history(const gchar *history)
862 gchar buf[PREFSBUFSIZE];
865 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
867 if ((fp = fopen(path, "rb")) == NULL) {
868 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
873 while (fgets(buf, sizeof(buf), fp) != NULL) {
875 if (buf[0] == '\0') continue;
876 tmp = add_history(tmp, buf);
880 tmp = g_list_reverse(tmp);
885 void prefs_common_read_config(void)
889 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
890 prefs_read_config(param, "Common", rcpath, NULL);
893 prefs_common.mime_open_cmd_history =
894 prefs_common_read_history(COMMAND_HISTORY);
895 prefs_common.summary_quicksearch_history =
896 prefs_common_read_history(QUICKSEARCH_HISTORY);
900 * Save history list to the specified history file
902 void prefs_common_save_history(const gchar *history, GList *list)
908 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
910 if ((fp = fopen(path, "wb")) == NULL) {
911 FILE_OP_ERROR(path, "fopen");
916 for (cur = list; cur != NULL; cur = cur->next) {
917 fputs((gchar *)cur->data, fp);
925 void prefs_common_write_config(void)
927 prefs_write_config(param, "Common", COMMON_RC);
929 prefs_common_save_history(COMMAND_HISTORY,
930 prefs_common.mime_open_cmd_history);
931 prefs_common_save_history(QUICKSEARCH_HISTORY,
932 prefs_common.summary_quicksearch_history);
935 static void prefs_common_create(void)
939 debug_print("Creating common preferences window...\n");
941 notebook = gtk_notebook_new ();
942 gtk_widget_show(notebook);
943 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
944 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
945 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
947 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
949 gtk_widget_ref(notebook);
951 /* create all widgets on notebook */
952 prefs_receive_create();
953 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
955 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
956 prefs_compose_create();
957 SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
958 prefs_quote_create();
959 SET_NOTEBOOK_LABEL(notebook, _("Quote"), page++);
960 prefs_display_create();
961 SET_NOTEBOOK_LABEL(notebook, _("Display"), page++);
962 prefs_message_create();
963 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
964 prefs_interface_create();
965 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
966 prefs_other_create();
967 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
969 gtk_widget_show_all(notebook);
972 static void prefs_receive_create(void)
976 GtkWidget *frame_incext;
977 GtkWidget *checkbtn_incext;
979 GtkWidget *label_incext;
980 GtkWidget *entry_incext;
981 /* GtkWidget *button_incext; */
983 GtkWidget *hbox_autochk;
984 GtkWidget *checkbtn_autochk;
985 GtkWidget *label_autochk1;
986 GtkObject *spinbtn_autochk_adj;
987 GtkWidget *spinbtn_autochk;
988 GtkWidget *label_autochk2;
989 GtkWidget *checkbtn_chkonstartup;
990 GtkWidget *checkbtn_scan_after_inc;
993 GtkWidget *frame_newmail;
994 GtkWidget *hbox_newmail_notify;
995 GtkWidget *checkbtn_newmail_auto;
996 GtkWidget *checkbtn_newmail_manu;
997 GtkWidget *entry_newmail_notify_cmd;
998 GtkWidget *label_newmail_notify_cmd;
1000 GtkWidget *hbox_recvdialog;
1001 GtkWidget *label_recvdialog;
1003 GtkWidget *menuitem;
1004 GtkWidget *optmenu_recvdialog;
1005 GtkWidget *checkbtn_no_recv_err_panel;
1006 GtkWidget *checkbtn_close_recv_dialog;
1008 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1009 gtk_widget_show (vbox1);
1010 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1011 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1013 PACK_FRAME(vbox1, frame_incext, _("External program"));
1015 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1016 gtk_widget_show (vbox2);
1017 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1018 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1020 /* Use of external incorporation program */
1021 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1022 _("Use external program for incorporation"));
1024 hbox = gtk_hbox_new (FALSE, 8);
1025 gtk_widget_show (hbox);
1026 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1027 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1029 label_incext = gtk_label_new (_("Command"));
1030 gtk_widget_show (label_incext);
1031 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1033 entry_incext = gtk_entry_new ();
1034 gtk_widget_show (entry_incext);
1035 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1038 button_incext = gtk_button_new_with_label ("... ");
1039 gtk_widget_show (button_incext);
1040 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1043 vbox2 = gtk_vbox_new (FALSE, 0);
1044 gtk_widget_show (vbox2);
1045 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1048 hbox_autochk = gtk_hbox_new (FALSE, 8);
1049 gtk_widget_show (hbox_autochk);
1050 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1052 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1053 _("Auto-check new mail"));
1055 label_autochk1 = gtk_label_new (_("every"));
1056 gtk_widget_show (label_autochk1);
1057 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1059 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1060 spinbtn_autochk = gtk_spin_button_new
1061 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1062 gtk_widget_show (spinbtn_autochk);
1063 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1064 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1065 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1067 label_autochk2 = gtk_label_new (_("minute(s)"));
1068 gtk_widget_show (label_autochk2);
1069 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1071 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1072 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1073 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1075 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1076 _("Check new mail on startup"));
1077 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1078 _("Update all local folders after incorporation"));
1081 /* receive dialog */
1082 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1083 gtk_widget_show (hbox_recvdialog);
1084 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1086 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1087 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1088 gtk_widget_show (label_recvdialog);
1089 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1091 optmenu_recvdialog = gtk_option_menu_new ();
1092 gtk_widget_show (optmenu_recvdialog);
1093 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1095 menu = gtk_menu_new ();
1096 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1097 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1098 RECV_DIALOG_MANUAL);
1099 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1101 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1103 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1104 _("Don't popup error dialog on receive error"));
1106 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1107 _("Close receive dialog when finished"));
1109 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1111 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1112 gtk_widget_show (vbox2);
1113 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1114 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1116 hbox = gtk_hbox_new (TRUE, 8);
1117 gtk_widget_show (hbox);
1118 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1119 _("after autochecking"));
1120 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1121 _("after manual checking"));
1122 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1123 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1124 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1126 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1127 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1130 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1131 gtk_widget_show (hbox);
1132 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1135 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1136 "(use %d as number of new "
1138 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1140 gtk_widget_show (label_newmail_notify_cmd);
1141 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1142 label_newmail_notify_cmd, FALSE, FALSE, 0);
1144 entry_newmail_notify_cmd = gtk_entry_new ();
1145 gtk_widget_show (entry_newmail_notify_cmd);
1146 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1147 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1149 gtk_widget_set_sensitive(hbox_newmail_notify,
1150 prefs_common.newmail_notify_auto ||
1151 prefs_common.newmail_notify_manu);
1153 receive.checkbtn_incext = checkbtn_incext;
1154 receive.entry_incext = entry_incext;
1155 /* receive.button_incext = button_incext; */
1157 receive.checkbtn_autochk = checkbtn_autochk;
1158 receive.spinbtn_autochk = spinbtn_autochk;
1159 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1161 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1162 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1165 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1166 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1167 receive.hbox_newmail_notify = hbox_newmail_notify;
1168 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1169 receive.optmenu_recvdialog = optmenu_recvdialog;
1170 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1171 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1174 static void prefs_send_create(void)
1179 GtkWidget *checkbtn_savemsg;
1180 GtkWidget *label_outcharset;
1181 GtkWidget *optmenu_charset;
1182 GtkWidget *optmenu_menu;
1183 GtkWidget *menuitem;
1184 GtkTooltips *charset_tooltip;
1185 GtkWidget *optmenu_encoding;
1186 GtkWidget *label_encoding;
1187 GtkTooltips *encoding_tooltip;
1188 GtkWidget *label_senddialog;
1190 GtkWidget *optmenu_senddialog;
1191 GtkWidget *hbox_senddialog;
1193 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1194 gtk_widget_show (vbox1);
1195 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1196 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1198 vbox2 = gtk_vbox_new (FALSE, 0);
1199 gtk_widget_show (vbox2);
1200 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1202 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1203 _("Save sent messages to Sent folder"));
1205 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1206 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1208 label_senddialog = gtk_label_new (_("Show send dialog"));
1209 gtk_widget_show (label_senddialog);
1210 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1212 optmenu_senddialog = gtk_option_menu_new ();
1213 gtk_widget_show (optmenu_senddialog);
1214 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1216 menu = gtk_menu_new ();
1217 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1218 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1220 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1222 hbox1 = gtk_hbox_new (FALSE, 8);
1223 gtk_widget_show (hbox1);
1224 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1226 label_outcharset = gtk_label_new (_("Outgoing encoding"));
1227 gtk_widget_show (label_outcharset);
1228 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1230 charset_tooltip = gtk_tooltips_new();
1232 optmenu_charset = gtk_option_menu_new ();
1233 gtk_widget_show (optmenu_charset);
1234 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1235 _("If `Automatic' is selected, the optimal encoding"
1236 " for the current locale will be used"),
1238 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1240 optmenu_menu = gtk_menu_new ();
1242 #define SET_MENUITEM(str, data) \
1244 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1247 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1248 SET_MENUITEM(NULL, NULL);
1249 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1250 SET_MENUITEM(NULL, NULL);
1251 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1252 SET_MENUITEM(NULL, NULL);
1253 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1254 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1255 SET_MENUITEM(NULL, NULL);
1256 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1257 SET_MENUITEM(NULL, NULL);
1258 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1259 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1260 SET_MENUITEM(NULL, NULL);
1261 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1262 SET_MENUITEM(NULL, NULL);
1263 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1264 SET_MENUITEM(NULL, NULL);
1265 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1266 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1267 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1268 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1269 SET_MENUITEM(NULL, NULL);
1270 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1272 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1273 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1275 SET_MENUITEM(NULL, NULL);
1276 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1277 SET_MENUITEM(_("Simplified Chinese (GBK)"), CS_GBK);
1278 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1280 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1281 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1283 SET_MENUITEM(NULL, NULL);
1284 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1285 SET_MENUITEM(NULL, NULL);
1286 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1287 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1289 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1292 hbox1 = gtk_hbox_new (FALSE, 8);
1293 gtk_widget_show (hbox1);
1294 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1296 hbox1 = gtk_hbox_new (FALSE, 8);
1297 gtk_widget_show (hbox1);
1298 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1300 label_encoding = gtk_label_new (_("Transfer encoding"));
1301 gtk_widget_show (label_encoding);
1302 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1304 encoding_tooltip = gtk_tooltips_new();
1306 optmenu_encoding = gtk_option_menu_new ();
1307 gtk_widget_show (optmenu_encoding);
1308 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1309 _("Specify Content-Transfer-Encoding used when"
1310 " message body contains non-ASCII characters"),
1312 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1314 optmenu_menu = gtk_menu_new ();
1316 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1317 SET_MENUITEM("base64", CTE_BASE64);
1318 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1319 SET_MENUITEM("8bit", CTE_8BIT);
1321 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1324 hbox1 = gtk_hbox_new (FALSE, 8);
1325 gtk_widget_show (hbox1);
1326 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1328 p_send.checkbtn_savemsg = checkbtn_savemsg;
1329 p_send.optmenu_senddialog = optmenu_senddialog;
1331 p_send.optmenu_charset = optmenu_charset;
1332 p_send.optmenu_encoding_method = optmenu_encoding;
1335 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1339 toggled = gtk_toggle_button_get_active
1340 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1341 gtk_toggle_button_get_active
1342 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1343 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1346 static void prefs_compose_create(void)
1351 GtkWidget *checkbtn_autoextedit;
1353 GtkWidget *frame_autosel;
1354 GtkWidget *hbox_autosel;
1355 GtkWidget *checkbtn_reply_account_autosel;
1356 GtkWidget *checkbtn_forward_account_autosel;
1357 GtkWidget *checkbtn_reedit_account_autosel;
1359 GtkWidget *hbox_undolevel;
1360 GtkWidget *label_undolevel;
1361 GtkObject *spinbtn_undolevel_adj;
1362 GtkWidget *spinbtn_undolevel;
1366 GtkWidget *checkbtn_default_reply_list;
1368 GtkWidget *checkbtn_forward_as_attachment;
1369 GtkWidget *checkbtn_redirect_keep_from;
1371 GtkWidget *hbox_autosave;
1372 GtkWidget *checkbtn_autosave;
1373 GtkWidget *entry_autosave_length;
1374 GtkWidget *label_autosave_length;
1376 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1377 gtk_widget_show (vbox1);
1378 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1379 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1381 /* Account autoselection */
1382 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1384 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1385 gtk_widget_show (hbox_autosel);
1386 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1387 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1389 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1390 _("when replying"));
1391 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1392 _("when forwarding"));
1393 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1394 _("when re-editing"));
1396 vbox2 = gtk_vbox_new (FALSE, 0);
1397 gtk_widget_show (vbox2);
1398 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1400 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1401 _("Reply button invokes mailing list reply"));
1403 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1404 _("Automatically launch the external editor"));
1406 hbox5 = gtk_hbox_new (FALSE, 8);
1407 gtk_widget_show (hbox5);
1408 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1410 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1411 _("Forward as attachment"));
1413 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1414 _("Keep the original 'From' header when redirecting"));
1417 hbox_autosave = gtk_hbox_new (FALSE, 8);
1418 gtk_widget_show (hbox_autosave);
1419 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1421 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1422 _("Autosave to Drafts folder every "));
1424 entry_autosave_length = gtk_entry_new();
1425 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1426 gtk_widget_show (entry_autosave_length);
1427 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1429 label_autosave_length = gtk_label_new(_("characters"));
1430 gtk_widget_show (label_autosave_length);
1431 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1433 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1434 gtk_widget_show (hbox_undolevel);
1435 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1437 label_undolevel = gtk_label_new (_("Undo level"));
1438 gtk_widget_show (label_undolevel);
1439 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1441 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1442 spinbtn_undolevel = gtk_spin_button_new
1443 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1444 gtk_widget_show (spinbtn_undolevel);
1445 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1446 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1447 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1450 compose.checkbtn_quote = checkbtn_quote;
1451 compose.entry_quotemark = entry_quotemark;
1452 compose.text_quotefmt = text_quotefmt;
1455 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1457 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1458 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1459 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1461 compose.spinbtn_undolevel = spinbtn_undolevel;
1462 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1464 compose.checkbtn_autosave = checkbtn_autosave;
1465 compose.entry_autosave_length = entry_autosave_length;
1467 compose.checkbtn_forward_as_attachment =
1468 checkbtn_forward_as_attachment;
1469 compose.checkbtn_redirect_keep_from =
1470 checkbtn_redirect_keep_from;
1471 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1474 static void prefs_quote_create(void)
1477 GtkWidget *frame_quote;
1478 GtkWidget *vbox_quote;
1481 GtkWidget *label_quotemark;
1482 GtkWidget *entry_quotemark;
1483 GtkWidget *scrolledwin_quotefmt;
1484 GtkWidget *text_quotefmt;
1486 GtkWidget *entry_fw_quotemark;
1487 GtkWidget *text_fw_quotefmt;
1489 GtkWidget *entry_quote_chars;
1490 GtkWidget *label_quote_chars;
1492 GtkWidget *btn_quotedesc;
1494 GtkWidget *checkbtn_reply_with_quote;
1496 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1497 gtk_widget_show (vbox1);
1498 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1499 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1503 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1505 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1507 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1508 gtk_widget_show (vbox_quote);
1509 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1510 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1512 hbox1 = gtk_hbox_new (FALSE, 32);
1513 gtk_widget_show (hbox1);
1514 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1516 hbox2 = gtk_hbox_new (FALSE, 8);
1517 gtk_widget_show (hbox2);
1518 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1520 label_quotemark = gtk_label_new (_("Quotation mark"));
1521 gtk_widget_show (label_quotemark);
1522 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1524 entry_quotemark = gtk_entry_new ();
1525 gtk_widget_show (entry_quotemark);
1526 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1527 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1529 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1530 gtk_widget_show (scrolledwin_quotefmt);
1531 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1533 gtk_scrolled_window_set_policy
1534 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1535 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1536 gtk_scrolled_window_set_shadow_type
1537 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1539 text_quotefmt = gtk_text_view_new ();
1540 gtk_widget_show (text_quotefmt);
1541 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1542 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
1543 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1547 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1549 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1550 gtk_widget_show (vbox_quote);
1551 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1552 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1554 hbox1 = gtk_hbox_new (FALSE, 32);
1555 gtk_widget_show (hbox1);
1556 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1558 hbox2 = gtk_hbox_new (FALSE, 8);
1559 gtk_widget_show (hbox2);
1560 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1562 label_quotemark = gtk_label_new (_("Quotation mark"));
1563 gtk_widget_show (label_quotemark);
1564 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1566 entry_fw_quotemark = gtk_entry_new ();
1567 gtk_widget_show (entry_fw_quotemark);
1568 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1570 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1572 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1573 gtk_widget_show (scrolledwin_quotefmt);
1574 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1576 gtk_scrolled_window_set_policy
1577 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1578 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1579 gtk_scrolled_window_set_shadow_type
1580 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1582 text_fw_quotefmt = gtk_text_view_new ();
1583 gtk_widget_show (text_fw_quotefmt);
1584 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1586 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1587 gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
1589 hbox1 = gtk_hbox_new (FALSE, 32);
1590 gtk_widget_show (hbox1);
1591 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1594 gtk_button_new_with_label (_(" Description of symbols "));
1595 gtk_widget_show (btn_quotedesc);
1596 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1597 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1598 G_CALLBACK(quote_fmt_quote_description), NULL);
1602 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1604 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1605 gtk_widget_show (vbox_quote);
1606 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1607 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1609 hbox1 = gtk_hbox_new (FALSE, 32);
1610 gtk_widget_show (hbox1);
1611 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1613 hbox2 = gtk_hbox_new (FALSE, 8);
1614 gtk_widget_show (hbox2);
1615 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1617 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1618 gtk_widget_show (label_quote_chars);
1619 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1621 entry_quote_chars = gtk_entry_new ();
1622 gtk_widget_show (entry_quote_chars);
1623 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1625 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1628 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1629 quote.entry_quotemark = entry_quotemark;
1630 quote.text_quotefmt = text_quotefmt;
1631 quote.entry_fw_quotemark = entry_fw_quotemark;
1632 quote.text_fw_quotefmt = text_fw_quotefmt;
1633 quote.entry_quote_chars = entry_quote_chars;
1636 static void prefs_display_create(void)
1639 GtkWidget *chkbtn_transhdr;
1640 GtkWidget *chkbtn_folder_unread;
1642 GtkWidget *label_ng_abbrev;
1643 GtkWidget *spinbtn_ng_abbrev_len;
1644 GtkObject *spinbtn_ng_abbrev_len_adj;
1645 GtkWidget *frame_summary;
1647 GtkWidget *chkbtn_swapfrom;
1648 GtkWidget *chkbtn_useaddrbook;
1649 GtkWidget *chkbtn_threadsubj;
1651 GtkWidget *label_datefmt;
1652 GtkWidget *button_datefmt;
1653 GtkWidget *entry_datefmt;
1654 GtkWidget *button_dispitem;
1656 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1657 gtk_widget_show (vbox1);
1658 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1659 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1661 vbox2 = gtk_vbox_new (FALSE, 0);
1662 gtk_widget_show (vbox2);
1663 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1666 (vbox2, chkbtn_transhdr,
1667 _("Translate header name (such as `From:', `Subject:')"));
1669 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1670 _("Display unread number next to folder name"));
1672 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1674 hbox1 = gtk_hbox_new (FALSE, 8);
1675 gtk_widget_show (hbox1);
1676 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1678 label_ng_abbrev = gtk_label_new
1679 (_("Abbreviate newsgroup names longer than"));
1680 gtk_widget_show (label_ng_abbrev);
1681 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1683 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1684 spinbtn_ng_abbrev_len = gtk_spin_button_new
1685 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1686 gtk_widget_show (spinbtn_ng_abbrev_len);
1687 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1689 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1690 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1693 label_ng_abbrev = gtk_label_new
1695 gtk_widget_show (label_ng_abbrev);
1696 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1698 /* ---- Summary ---- */
1700 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1702 vbox2 = gtk_vbox_new (FALSE, 0);
1703 gtk_widget_show (vbox2);
1704 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1705 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1708 (vbox2, chkbtn_swapfrom,
1709 _("Display recipient in `From' column if sender is yourself"));
1711 (vbox2, chkbtn_useaddrbook,
1712 _("Display sender using address book"));
1714 (vbox2, chkbtn_threadsubj,
1715 _("Thread using subject in addition to standard headers"));
1717 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1719 hbox1 = gtk_hbox_new (FALSE, 8);
1720 gtk_widget_show (hbox1);
1721 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1723 label_datefmt = gtk_label_new (_("Date format"));
1724 gtk_widget_show (label_datefmt);
1725 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1727 entry_datefmt = gtk_entry_new ();
1728 gtk_widget_show (entry_datefmt);
1729 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1731 button_datefmt = gtk_button_new_with_label (" ... ");
1733 gtk_widget_show (button_datefmt);
1734 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1735 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1736 G_CALLBACK (date_format_create), NULL);
1738 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1740 hbox1 = gtk_hbox_new (FALSE, 8);
1741 gtk_widget_show (hbox1);
1742 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1744 button_dispitem = gtk_button_new_with_label
1745 (_(" Set displayed items in summary... "));
1746 gtk_widget_show (button_dispitem);
1747 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1748 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1749 G_CALLBACK (prefs_summary_column_open),
1752 display.chkbtn_transhdr = chkbtn_transhdr;
1753 display.chkbtn_folder_unread = chkbtn_folder_unread;
1754 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1755 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1757 display.chkbtn_swapfrom = chkbtn_swapfrom;
1758 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1759 display.chkbtn_threadsubj = chkbtn_threadsubj;
1760 display.entry_datefmt = entry_datefmt;
1763 static void prefs_message_create(void)
1769 GtkWidget *chkbtn_mbalnum;
1770 GtkWidget *chkbtn_disphdrpane;
1771 GtkWidget *chkbtn_disphdr;
1772 GtkWidget *button_edit_disphdr;
1773 GtkWidget *chkbtn_html;
1774 GtkWidget *hbox_linespc;
1775 GtkWidget *label_linespc;
1776 GtkObject *spinbtn_linespc_adj;
1777 GtkWidget *spinbtn_linespc;
1779 GtkWidget *frame_scr;
1780 GtkWidget *vbox_scr;
1781 GtkWidget *chkbtn_smoothscroll;
1782 GtkWidget *hbox_scr;
1783 GtkWidget *label_scr;
1784 GtkObject *spinbtn_scrollstep_adj;
1785 GtkWidget *spinbtn_scrollstep;
1786 GtkWidget *chkbtn_halfpage;
1788 GtkWidget *chkbtn_attach_desc;
1790 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1791 gtk_widget_show (vbox1);
1792 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1793 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1795 vbox2 = gtk_vbox_new (FALSE, 0);
1796 gtk_widget_show (vbox2);
1797 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1800 (vbox2, chkbtn_mbalnum,
1801 _("Display multi-byte alphanumeric as\n"
1802 "ASCII character (Japanese only)"));
1803 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1806 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1807 _("Display header pane above message view"));
1809 hbox1 = gtk_hbox_new (FALSE, 8);
1810 gtk_widget_show (hbox1);
1811 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1813 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1814 _("Display short headers on message view"));
1816 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1817 gtk_widget_show (button_edit_disphdr);
1818 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1820 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1821 G_CALLBACK (prefs_display_header_open),
1824 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1826 PACK_CHECK_BUTTON(vbox2, chkbtn_html,
1827 _("Render HTML messages as text"));
1829 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1831 hbox1 = gtk_hbox_new (FALSE, 32);
1832 gtk_widget_show (hbox1);
1833 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1835 hbox_linespc = gtk_hbox_new (FALSE, 8);
1836 gtk_widget_show (hbox1);
1837 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1839 label_linespc = gtk_label_new (_("Line space"));
1840 gtk_widget_show (label_linespc);
1841 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1844 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1845 spinbtn_linespc = gtk_spin_button_new
1846 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1847 gtk_widget_show (spinbtn_linespc);
1848 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1850 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1851 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1853 label_linespc = gtk_label_new (_("pixel(s)"));
1854 gtk_widget_show (label_linespc);
1855 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1858 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1860 vbox_scr = gtk_vbox_new (FALSE, 0);
1861 gtk_widget_show (vbox_scr);
1862 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1863 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1865 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1867 hbox1 = gtk_hbox_new (FALSE, 32);
1868 gtk_widget_show (hbox1);
1869 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1871 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1873 hbox_scr = gtk_hbox_new (FALSE, 8);
1874 gtk_widget_show (hbox_scr);
1875 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1877 label_scr = gtk_label_new (_("Step"));
1878 gtk_widget_show (label_scr);
1879 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1881 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1882 spinbtn_scrollstep = gtk_spin_button_new
1883 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1884 gtk_widget_show (spinbtn_scrollstep);
1885 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1887 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1888 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1891 label_scr = gtk_label_new (_("pixel(s)"));
1892 gtk_widget_show (label_scr);
1893 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1895 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1897 vbox3 = gtk_vbox_new (FALSE, 0);
1898 gtk_widget_show (vbox3);
1899 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1901 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1902 _("Show attachment descriptions (rather than names)"));
1904 message.chkbtn_mbalnum = chkbtn_mbalnum;
1905 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1906 message.chkbtn_disphdr = chkbtn_disphdr;
1907 message.chkbtn_html = chkbtn_html;
1908 message.spinbtn_linespc = spinbtn_linespc;
1910 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1911 message.spinbtn_scrollstep = spinbtn_scrollstep;
1912 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1913 message.chkbtn_halfpage = chkbtn_halfpage;
1915 message.chkbtn_attach_desc = chkbtn_attach_desc;
1918 static void prefs_interface_create(void)
1923 /* GtkWidget *checkbtn_emacs; */
1924 GtkWidget *checkbtn_always_show_msg;
1925 GtkWidget *checkbtn_openunread;
1926 GtkWidget *checkbtn_mark_as_read_on_newwin;
1927 GtkWidget *checkbtn_openinbox;
1928 GtkWidget *checkbtn_immedexec;
1929 GtkTooltips *immedexec_tooltip;
1933 GtkWidget *menuitem;
1935 GtkWidget *button_keybind;
1937 GtkWidget *hbox_nextunreadmsgdialog;
1938 GtkWidget *optmenu_nextunreadmsgdialog;
1940 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1941 gtk_widget_show (vbox1);
1942 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1943 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1945 vbox2 = gtk_vbox_new (FALSE, 0);
1946 gtk_widget_show (vbox2);
1947 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1949 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1950 _("Emulate the behavior of mouse operation of\n"
1951 "Emacs-based mailer"));
1952 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1953 GTK_JUSTIFY_LEFT); */
1956 (vbox2, checkbtn_always_show_msg,
1957 _("Always open messages in summary when selected"));
1960 (vbox2, checkbtn_openunread,
1961 _("Open first unread message when entering a folder"));
1964 (vbox2, checkbtn_mark_as_read_on_newwin,
1965 _("Only mark message as read when opened in new window"));
1968 (vbox2, checkbtn_openinbox,
1969 _("Go to inbox after receiving new mail"));
1971 vbox3 = gtk_vbox_new (FALSE, 0);
1972 gtk_widget_show (vbox3);
1973 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1975 immedexec_tooltip = gtk_tooltips_new();
1978 (vbox3, checkbtn_immedexec,
1979 _("Execute immediately when moving or deleting messages"));
1980 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1981 _("Messages will be marked until execution"
1982 " if this is turned off"),
1985 hbox1 = gtk_hbox_new (FALSE, 0);
1986 gtk_widget_show (hbox1);
1987 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1989 /* Next Unread Message Dialog */
1990 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1991 gtk_widget_show (hbox1);
1992 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1994 label = gtk_label_new (_("Show no-unread-message dialog"));
1995 gtk_widget_show (label);
1996 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1998 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1999 gtk_widget_show (optmenu_nextunreadmsgdialog);
2000 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2002 menu = gtk_menu_new ();
2003 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2004 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2005 NEXTUNREADMSGDIALOG_ASSUME_YES);
2006 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2007 NEXTUNREADMSGDIALOG_ASSUME_NO);
2009 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2011 hbox1 = gtk_hbox_new (FALSE, 8);
2012 gtk_widget_show (hbox1);
2013 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2015 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2016 gtk_widget_show (button_keybind);
2017 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2018 g_signal_connect (G_OBJECT (button_keybind), "clicked",
2019 G_CALLBACK (prefs_keybind_select), NULL);
2021 /* interface.checkbtn_emacs = checkbtn_emacs; */
2022 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2023 interface.checkbtn_openunread = checkbtn_openunread;
2024 interface.checkbtn_mark_as_read_on_newwin
2025 = checkbtn_mark_as_read_on_newwin;
2026 interface.checkbtn_openinbox = checkbtn_openinbox;
2027 interface.checkbtn_immedexec = checkbtn_immedexec;
2028 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2031 static void prefs_other_create(void)
2036 GtkWidget *frame_addr;
2037 GtkWidget *vbox_addr;
2038 GtkWidget *checkbtn_addaddrbyclick;
2040 GtkWidget *frame_cliplog;
2041 GtkWidget *vbox_cliplog;
2042 GtkWidget *hbox_cliplog;
2043 GtkWidget *checkbtn_cliplog;
2044 GtkWidget *loglength_label;
2045 GtkWidget *loglength_entry;
2046 GtkTooltips *loglength_tooltip;
2048 GtkWidget *frame_exit;
2049 GtkWidget *vbox_exit;
2050 GtkWidget *checkbtn_confonexit;
2051 GtkWidget *checkbtn_cleanonexit;
2052 GtkWidget *checkbtn_askonclean;
2053 GtkWidget *checkbtn_warnqueued;
2055 GtkWidget *label_iotimeout;
2056 GtkWidget *spinbtn_iotimeout;
2057 GtkObject *spinbtn_iotimeout_adj;
2061 GtkWidget *frame_ssl;
2062 GtkWidget *vbox_ssl;
2063 GtkWidget *hbox_ssl;
2064 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2067 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2068 gtk_widget_show (vbox1);
2069 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2070 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2072 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2074 vbox_addr = gtk_vbox_new (FALSE, 0);
2075 gtk_widget_show (vbox_addr);
2076 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2077 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2080 (vbox_addr, checkbtn_addaddrbyclick,
2081 _("Add address to destination when double-clicked"));
2084 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2086 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2087 gtk_widget_show (vbox_cliplog);
2088 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2089 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2090 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2091 _("Clip the log size"));
2092 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2093 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2094 gtk_widget_show (hbox_cliplog);
2096 loglength_label = gtk_label_new (_("Log window length"));
2097 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2099 gtk_widget_show (GTK_WIDGET (loglength_label));
2101 loglength_tooltip = gtk_tooltips_new();
2103 loglength_entry = gtk_entry_new ();
2104 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2105 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2107 gtk_widget_show (GTK_WIDGET (loglength_entry));
2108 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2109 _("0 to stop logging in the log window"),
2111 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2116 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2118 vbox_ssl = gtk_vbox_new (FALSE, 0);
2119 gtk_widget_show (vbox_ssl);
2120 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2121 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2122 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2123 _("Ask before accepting SSL certificates"));
2124 hbox_ssl = gtk_hbox_new (FALSE, 3);
2125 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2126 gtk_widget_show (hbox_ssl);
2131 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2133 vbox_exit = gtk_vbox_new (FALSE, 0);
2134 gtk_widget_show (vbox_exit);
2135 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2136 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2138 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2139 _("Confirm on exit"));
2141 hbox1 = gtk_hbox_new (FALSE, 32);
2142 gtk_widget_show (hbox1);
2143 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2145 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2146 _("Empty trash on exit"));
2147 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2148 _("Ask before emptying"));
2149 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2151 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2152 _("Warn if there are queued messages"));
2154 hbox1 = gtk_hbox_new (FALSE, 8);
2155 gtk_widget_show (hbox1);
2156 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2158 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2159 gtk_widget_show (label_iotimeout);
2160 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2162 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2163 spinbtn_iotimeout = gtk_spin_button_new
2164 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2165 gtk_widget_show (spinbtn_iotimeout);
2166 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2168 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2169 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2171 label_iotimeout = gtk_label_new (_("seconds"));
2172 gtk_widget_show (label_iotimeout);
2173 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2175 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2177 other.checkbtn_cliplog = checkbtn_cliplog;
2178 other.loglength_entry = loglength_entry;
2180 other.checkbtn_confonexit = checkbtn_confonexit;
2181 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2182 other.checkbtn_askonclean = checkbtn_askonclean;
2183 other.checkbtn_warnqueued = checkbtn_warnqueued;
2185 other.spinbtn_iotimeout = spinbtn_iotimeout;
2186 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2190 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2195 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2197 GtkWidget *datefmt_sample = NULL;
2200 g_return_if_fail(widget != NULL);
2201 g_return_if_fail(*widget != NULL);
2202 g_return_if_fail(display.entry_datefmt != NULL);
2204 datefmt_sample = GTK_WIDGET(g_object_get_data
2205 (G_OBJECT(*widget), "datefmt_sample"));
2206 g_return_if_fail(datefmt_sample != NULL);
2208 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2209 g_free(prefs_common.date_format);
2210 prefs_common.date_format = text;
2211 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2213 gtk_widget_destroy(*widget);
2217 static void date_format_cancel_btn_clicked(GtkButton *button,
2220 g_return_if_fail(widget != NULL);
2221 g_return_if_fail(*widget != NULL);
2223 gtk_widget_destroy(*widget);
2227 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2230 if (event && event->keyval == GDK_Escape)
2231 date_format_cancel_btn_clicked(NULL, widget);
2235 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2236 GdkEventAny *event, GtkWidget **widget)
2238 g_return_val_if_fail(widget != NULL, FALSE);
2239 g_return_val_if_fail(*widget != NULL, FALSE);
2245 static void date_format_entry_on_change(GtkEditable *editable,
2249 struct tm *cal_time;
2253 cur_time = time(NULL);
2254 cal_time = localtime(&cur_time);
2256 text = gtk_editable_get_chars(editable, 0, -1);
2258 strftime(buffer, sizeof buffer, text, cal_time);
2261 text = conv_codeset_strdup(buffer,
2262 conv_get_locale_charset_str(),
2265 text = g_strdup(buffer);
2267 gtk_label_set_text(example, text);
2272 static void date_format_select_row(GtkTreeView *list_view,
2274 GtkTreeViewColumn *column,
2275 GtkWidget *date_format)
2279 const gchar *old_format;
2281 GtkWidget *datefmt_sample;
2283 GtkTreeModel *model;
2285 g_return_if_fail(date_format != NULL);
2287 /* only on double click */
2288 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2291 g_return_if_fail(datefmt_sample != NULL);
2293 model = gtk_tree_view_get_model(list_view);
2295 /* get format from list */
2296 if (!gtk_tree_model_get_iter(model, &iter, path))
2299 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
2301 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2302 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2304 /* insert the format into the text entry */
2305 new_format = g_malloc(strlen(old_format) + 3);
2307 strncpy(new_format, old_format, cur_pos);
2308 new_format[cur_pos] = '\0';
2309 strcat(new_format, format);
2310 strcat(new_format, &old_format[cur_pos]);
2312 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2313 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2318 static GtkWidget *date_format_create(GtkButton *button, void *data)
2320 static GtkWidget *datefmt_win = NULL;
2323 GtkWidget *scrolledwindow1;
2324 GtkWidget *datefmt_list_view;
2329 GtkWidget *confirm_area;
2331 GtkWidget *cancel_btn;
2332 GtkWidget *datefmt_entry;
2333 GtkListStore *store;
2362 const gint TIME_FORMAT_ELEMS =
2363 sizeof time_format / sizeof time_format[0];
2365 GtkCellRenderer *renderer;
2366 GtkTreeViewColumn *column;
2367 GtkTreeSelection *selection;
2369 time_format[0].txt = _("the full abbreviated weekday name");
2370 time_format[1].txt = _("the full weekday name");
2371 time_format[2].txt = _("the abbreviated month name");
2372 time_format[3].txt = _("the full month name");
2373 time_format[4].txt = _("the preferred date and time for the current locale");
2374 time_format[5].txt = _("the century number (year/100)");
2375 time_format[6].txt = _("the day of the month as a decimal number");
2376 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2377 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2378 time_format[9].txt = _("the day of the year as a decimal number");
2379 time_format[10].txt = _("the month as a decimal number");
2380 time_format[11].txt = _("the minute as a decimal number");
2381 time_format[12].txt = _("either AM or PM");
2382 time_format[13].txt = _("the second as a decimal number");
2383 time_format[14].txt = _("the day of the week as a decimal number");
2384 time_format[15].txt = _("the preferred date for the current locale");
2385 time_format[16].txt = _("the last two digits of a year");
2386 time_format[17].txt = _("the year as a decimal number");
2387 time_format[18].txt = _("the time zone or name or abbreviation");
2389 if (datefmt_win) return datefmt_win;
2391 store = gtk_list_store_new(N_DATEFMT_COLUMNS,
2396 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2399 gtk_list_store_append(store, &iter);
2400 gtk_list_store_set(store, &iter,
2401 DATEFMT_FMT, time_format[i].fmt,
2402 DATEFMT_TXT, time_format[i].txt,
2406 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2407 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2408 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2409 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2410 gtk_widget_set_size_request(datefmt_win, 440, 280);
2412 vbox1 = gtk_vbox_new(FALSE, 10);
2413 gtk_widget_show(vbox1);
2414 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2416 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2417 gtk_scrolled_window_set_policy
2418 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2419 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2420 gtk_widget_show(scrolledwindow1);
2421 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2423 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2424 g_object_unref(G_OBJECT(store));
2425 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(datefmt_list_view), TRUE);
2426 gtk_widget_show(datefmt_list_view);
2427 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view);
2429 renderer = gtk_cell_renderer_text_new();
2430 column = gtk_tree_view_column_new_with_attributes
2431 (_("Specifier"), renderer, "text", DATEFMT_FMT,
2433 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2435 renderer = gtk_cell_renderer_text_new();
2436 column = gtk_tree_view_column_new_with_attributes
2437 (_("Description"), renderer, "text", DATEFMT_TXT,
2439 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2441 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2442 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view));
2443 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
2445 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated",
2446 G_CALLBACK(date_format_select_row),
2449 table = gtk_table_new(2, 2, FALSE);
2450 gtk_widget_show(table);
2451 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2452 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2453 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2455 label1 = gtk_label_new(_("Date format"));
2456 gtk_widget_show(label1);
2457 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2459 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2460 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2462 datefmt_entry = gtk_entry_new();
2463 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2464 gtk_widget_show(datefmt_entry);
2465 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2466 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2468 /* we need the "sample" entry box; add it as data so callbacks can
2469 * get the entry box */
2470 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2473 label2 = gtk_label_new(_("Example"));
2474 gtk_widget_show(label2);
2475 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2477 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2478 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2480 label3 = gtk_label_new("");
2481 gtk_widget_show(label3);
2482 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2483 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2484 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2485 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2487 gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
2488 &cancel_btn, GTK_STOCK_CANCEL, NULL, NULL);
2490 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2491 gtk_widget_show(confirm_area);
2492 gtk_widget_grab_default(ok_btn);
2494 /* set the current format */
2495 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2496 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2499 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2500 G_CALLBACK(date_format_ok_btn_clicked),
2502 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2503 G_CALLBACK(date_format_cancel_btn_clicked),
2505 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2506 G_CALLBACK(date_format_key_pressed),
2508 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2509 G_CALLBACK(date_format_on_delete),
2511 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2512 G_CALLBACK(date_format_entry_on_change),
2515 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2516 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2518 gtk_widget_show(datefmt_win);
2519 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2521 gtk_widget_grab_focus(ok_btn);
2526 static void prefs_keybind_select(void)
2533 GtkWidget *confirm_area;
2535 GtkWidget *cancel_btn;
2537 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2538 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2539 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2540 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2541 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2542 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2543 manage_window_set_transient (GTK_WINDOW (window));
2545 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2546 gtk_container_add (GTK_CONTAINER (window), vbox1);
2547 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2549 hbox1 = gtk_hbox_new (FALSE, 8);
2550 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2552 label = gtk_label_new
2553 (_("Select preset:"));
2554 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2555 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2557 hbox1 = gtk_hbox_new (FALSE, 8);
2558 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2560 combo = gtk_combo_new ();
2561 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2562 gtkut_combo_set_items (GTK_COMBO (combo),
2568 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2570 hbox1 = gtk_hbox_new (FALSE, 8);
2571 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2573 label = gtk_label_new
2574 (_("You can also modify each menu shortcut by pressing\n"
2575 "any key(s) when placing the mouse pointer on the item."));
2576 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2577 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2579 hbox1 = gtk_hbox_new (FALSE, 8);
2580 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2582 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
2583 &cancel_btn, GTK_STOCK_CANCEL,
2585 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2586 gtk_widget_grab_default (ok_btn);
2588 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2589 g_signal_connect (G_OBJECT (window), "delete_event",
2590 G_CALLBACK (prefs_keybind_deleted), NULL);
2591 g_signal_connect (G_OBJECT (window), "key_press_event",
2592 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2593 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2594 G_CALLBACK (prefs_keybind_apply_clicked),
2596 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2597 G_CALLBACK (prefs_keybind_cancel),
2600 gtk_widget_show_all(window);
2602 keybind.window = window;
2603 keybind.combo = combo;
2606 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2609 if (event && event->keyval == GDK_Escape)
2610 prefs_keybind_cancel();
2614 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2617 prefs_keybind_cancel();
2621 static void prefs_keybind_cancel(void)
2623 gtk_widget_destroy(keybind.window);
2624 keybind.window = NULL;
2625 keybind.combo = NULL;
2629 const gchar *accel_path;
2630 const gchar *accel_key;
2633 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2637 GdkModifierType mods;
2639 for (i = 0; i < num; i++) {
2640 const gchar *accel_key
2641 = keybind[i].accel_key ? keybind[i].accel_key : "";
2642 gtk_accelerator_parse(accel_key, &key, &mods);
2643 gtk_accel_map_change_entry(keybind[i].accel_path,
2648 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2650 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2652 struct KeyBind *menurc;
2655 static struct KeyBind default_menurc[] = {
2656 {"<Main>/File/Empty all Trash folders", ""},
2657 {"<Main>/File/Save as...", "<control>S"},
2658 {"<Main>/File/Print...", ""},
2659 {"<Main>/File/Exit", "<control>Q"},
2661 {"<Main>/Edit/Copy", "<control>C"},
2662 {"<Main>/Edit/Select all", "<control>A"},
2663 {"<Main>/Edit/Find in current message...", "<control>F"},
2664 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2666 {"<Main>/View/Show or hide/Message View", "V"},
2667 {"<Main>/View/Thread view", "<control>T"},
2668 {"<Main>/View/Go to/Prev message", "P"},
2669 {"<Main>/View/Go to/Next message", "N"},
2670 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2671 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2672 {"<Main>/View/Go to/Other folder...", "G"},
2673 {"<Main>/View/Open in new window", "<control><alt>N"},
2674 {"<Main>/View/Message source", "<control>U"},
2675 {"<Main>/View/Show all headers", "<control>H"},
2676 {"<Main>/View/Update summary", "<control><alt>U"},
2678 {"<Main>/Message/Receive/Get from current account",
2680 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2681 {"<Main>/Message/Compose an email message", "<control>M"},
2682 {"<Main>/Message/Reply", "<control>R"},
2683 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2684 {"<Main>/Message/Reply to/sender", ""},
2685 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2686 {"<Main>/Message/Forward", "<control><alt>F"},
2687 /* {"<Main>/Message/Forward as attachment", ""}, */
2688 {"<Main>/Message/Move...", "<control>O"},
2689 {"<Main>/Message/Copy...", "<shift><control>O"},
2690 {"<Main>/Message/Delete", "<control>D"},
2691 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2692 {"<Main>/Message/Mark/Unmark", "U"},
2693 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2694 {"<Main>/Message/Mark/Mark as read", ""},
2696 {"<Main>/Tools/Address book", "<shift><control>A"},
2697 {"<Main>/Tools/Execute", "X"},
2698 {"<Main>/Tools/Log window", "<shift><control>L"},
2700 {"<Compose>/Message/Close", "<control>W"},
2701 {"<Compose>/Edit/Select all", "<control>A"},
2702 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2703 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2704 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2705 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2706 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2709 static struct KeyBind mew_wl_menurc[] = {
2710 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2711 {"<Main>/File/Save as...", "Y"},
2712 {"<Main>/File/Print...", "<shift>numbersign"},
2713 {"<Main>/File/Exit", "<shift>Q"},
2715 {"<Main>/Edit/Copy", "<control>C"},
2716 {"<Main>/Edit/Select all", "<control>A"},
2717 {"<Main>/Edit/Find in current message...", "<control>F"},
2718 {"<Main>/Edit/Search folder...", "<control>S"},
2720 {"<Main>/View/Show or hide/Message View", ""},
2721 {"<Main>/View/Thread view", "<shift>T"},
2722 {"<Main>/View/Go to/Prev message", "P"},
2723 {"<Main>/View/Go to/Next message", "N"},
2724 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2725 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2726 {"<Main>/View/Go to/Other folder...", "G"},
2727 {"<Main>/View/Open in new window", "<control><alt>N"},
2728 {"<Main>/View/Message source", "<control>U"},
2729 {"<Main>/View/Show all headers", "<shift>H"},
2730 {"<Main>/View/Update summary", "<shift>S"},
2732 {"<Main>/Message/Receive/Get from current account",
2734 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2735 {"<Main>/Message/Compose an email message", "W"},
2736 {"<Main>/Message/Reply", "<control>R"},
2737 {"<Main>/Message/Reply to/all", "<shift>A"},
2738 {"<Main>/Message/Reply to/sender", ""},
2739 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2740 {"<Main>/Message/Forward", "F"},
2741 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2742 {"<Main>/Message/Move...", "O"},
2743 {"<Main>/Message/Copy...", "<shift>O"},
2744 {"<Main>/Message/Delete", "D"},
2745 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2746 {"<Main>/Message/Mark/Unmark", "U"},
2747 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2748 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2750 {"<Main>/Tools/Address book", "<shift><control>A"},
2751 {"<Main>/Tools/Execute", "X"},
2752 {"<Main>/Tools/Log window", "<shift><control>L"},
2754 {"<Compose>/Message/Close", "<alt>W"},
2755 {"<Compose>/Edit/Select all", ""},
2756 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2757 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2758 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2759 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2760 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2763 static struct KeyBind mutt_menurc[] = {
2764 {"<Main>/File/Empty all Trash folders", ""},
2765 {"<Main>/File/Save as...", "S"},
2766 {"<Main>/File/Print...", "P"},
2767 {"<Main>/File/Exit", "Q"},
2769 {"<Main>/Edit/Copy", "<control>C"},
2770 {"<Main>/Edit/Select all", "<control>A"},
2771 {"<Main>/Edit/Find in current message...", "<control>F"},
2772 {"<Main>/Edit/Search messages...", "slash"},
2774 {"<Main>/View/Show or hide/Message view", "V"},
2775 {"<Main>/View/Thread view", "<control>T"},
2776 {"<Main>/View/Go to/Prev message", ""},
2777 {"<Main>/View/Go to/Next message", ""},
2778 {"<Main>/View/Go to/Prev unread message", ""},
2779 {"<Main>/View/Go to/Next unread message", ""},
2780 {"<Main>/View/Go to/Other folder...", "C"},
2781 {"<Main>/View/Open in new window", "<control><alt>N"},
2782 {"<Main>/View/Message source", "<control>U"},
2783 {"<Main>/View/Show all headers", "<control>H"},
2784 {"<Main>/View/Update summary", "<control><alt>U"},
2786 {"<Main>/Message/Receive/Get from current account",
2788 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2789 {"<Main>/Message/Compose an email message", "M"},
2790 {"<Main>/Message/Reply", "R"},
2791 {"<Main>/Message/Reply to/all", "G"},
2792 {"<Main>/Message/Reply to/sender", ""},
2793 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2794 {"<Main>/Message/Forward", "F"},
2795 {"<Main>/Message/Forward as attachment", ""},
2796 {"<Main>/Message/Move...", "<control>O"},
2797 {"<Main>/Message/Copy...", "<shift>C"},
2798 {"<Main>/Message/Delete", "D"},
2799 {"<Main>/Message/Mark/Mark", "<shift>F"},
2800 {"<Main>/Message/Mark/Unmark", "U"},
2801 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2802 {"<Main>/Message/Mark/Mark as read", ""},
2804 {"<Main>/Tools/Address book", "<shift><control>A"},
2805 {"<Main>/Tools/Execute", "X"},
2806 {"<Main>/Tools/Log window", "<shift><control>L"},
2808 {"<Compose>/Message/Close", "<alt>W"},
2809 {"<Compose>/Edit/Select all", ""},
2810 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2811 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2812 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2813 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2814 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2817 static struct KeyBind old_sylpheed_menurc[] = {
2818 {"<Main>/File/Empty all Trash folders", ""},
2819 {"<Main>/File/Save as...", ""},
2820 {"<Main>/File/Print...", "<alt>P"},
2821 {"<Main>/File/Exit", "<alt>Q"},
2823 {"<Main>/Edit/Copy", "<control>C"},
2824 {"<Main>/Edit/Select all", "<control>A"},
2825 {"<Main>/Edit/Find in current message...", "<control>F"},
2826 {"<Main>/Edit/Search folder...", "<control>S"},
2828 {"<Main>/View/Show or hide/Message View", ""},
2829 {"<Main>/View/Thread view", "<control>T"},
2830 {"<Main>/View/Go to/Prev message", "P"},
2831 {"<Main>/View/Go to/Next message", "N"},
2832 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2833 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2834 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2835 {"<Main>/View/Open in new window", "<shift><control>N"},
2836 {"<Main>/View/Message source", "<control>U"},
2837 {"<Main>/View/Show all headers", "<control>H"},
2838 {"<Main>/View/Update summary", "<alt>U"},
2840 {"<Main>/Message/Receive/Get from current account",
2842 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2843 {"<Main>/Message/Compose an email message", "<alt>N"},
2844 {"<Main>/Message/Reply", "<alt>R"},
2845 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2846 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2847 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2848 {"<Main>/Message/Forward", "<shift><alt>F"},
2849 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2850 {"<Main>/Message/Move...", "<alt>O"},
2851 {"<Main>/Message/Copy...", ""},
2852 {"<Main>/Message/Delete", "<alt>D"},
2853 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2854 {"<Main>/Message/Mark/Unmark", "U"},
2855 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2856 {"<Main>/Message/Mark/Mark as read", ""},
2858 {"<Main>/Tools/Address book", "<alt>A"},
2859 {"<Main>/Tools/Execute", "<alt>X"},
2860 {"<Main>/Tools/Log window", "<alt>L"},
2862 {"<Compose>/Message/Close", "<alt>W"},
2863 {"<Compose>/Edit/Select all", ""},
2864 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2865 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2866 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2867 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2868 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2871 text = gtk_entry_get_text(entry);
2873 if (!strcmp(text, _("Default"))) {
2874 menurc = default_menurc;
2875 n_menurc = G_N_ELEMENTS(default_menurc);
2876 } else if (!strcmp(text, "Mew / Wanderlust")) {
2877 menurc = mew_wl_menurc;
2878 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2879 } else if (!strcmp(text, "Mutt")) {
2880 menurc = mutt_menurc;
2881 n_menurc = G_N_ELEMENTS(mutt_menurc);
2882 } else if (!strcmp(text, _("Old Sylpheed"))) {
2883 menurc = old_sylpheed_menurc;
2884 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2889 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2890 prefs_keybind_apply(menurc, n_menurc);
2892 gtk_widget_destroy(keybind.window);
2893 keybind.window = NULL;
2894 keybind.combo = NULL;
2897 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2900 GtkWidget *menuitem;
2903 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2904 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2905 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2906 g_free(*((gchar **)pparam->data));
2907 *((gchar **)pparam->data) = g_strdup(charset);
2910 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2912 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2915 g_return_if_fail(optmenu != NULL);
2916 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2918 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2919 (GCompareFunc)strcmp2);
2921 gtk_option_menu_set_history(optmenu, index);
2923 gtk_option_menu_set_history(optmenu, 0);
2924 prefs_common_charset_set_data_from_optmenu(pparam);
2928 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2931 GtkWidget *menuitem;
2933 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2934 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2935 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2936 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2939 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2941 TransferEncodingMethod method =
2942 *((TransferEncodingMethod *)pparam->data);
2943 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2946 g_return_if_fail(optmenu != NULL);
2948 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2951 gtk_option_menu_set_history(optmenu, index);
2953 gtk_option_menu_set_history(optmenu, 0);
2954 prefs_common_encoding_set_data_from_optmenu(pparam);
2958 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2961 GtkWidget *menuitem;
2963 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2964 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2965 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2966 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2969 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2971 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2972 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2974 GtkWidget *menuitem;
2977 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2980 gtk_option_menu_set_history(optmenu, index);
2982 gtk_option_menu_set_history(optmenu, 0);
2983 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2986 menu = gtk_option_menu_get_menu(optmenu);
2987 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2988 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2991 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2994 GtkWidget *menuitem;
2996 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2997 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2998 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2999 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3002 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
3004 SendDialogMode mode = *((SendDialogMode *)pparam->data);
3005 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3007 GtkWidget *menuitem;
3010 case SEND_DIALOG_ALWAYS:
3011 gtk_option_menu_set_history(optmenu, 0);
3013 case SEND_DIALOG_NEVER:
3014 gtk_option_menu_set_history(optmenu, 1);
3020 menu = gtk_option_menu_get_menu(optmenu);
3021 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3022 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3025 static void prefs_common_apply(void)
3027 MainWindow *mainwindow;
3029 prefs_set_data_from_dialog(param);
3030 sock_set_io_timeout(prefs_common.io_timeout_secs);
3031 main_window_reflect_prefs_all_real(FALSE);
3032 prefs_common_write_config();
3034 mainwindow = mainwindow_get_mainwindow();
3035 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3036 prefs_common.loglength);
3038 inc_autocheck_timer_remove();
3039 inc_autocheck_timer_set();
3042 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3045 GtkWidget *menuitem;
3047 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3048 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3049 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3050 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3053 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3055 NextUnreadMsgDialogShow dialog_show;
3056 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3058 GtkWidget *menuitem;
3060 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3062 switch (dialog_show) {
3063 case NEXTUNREADMSGDIALOG_ALWAYS:
3064 gtk_option_menu_set_history(optmenu, 0);
3066 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3067 gtk_option_menu_set_history(optmenu, 1);
3069 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3070 gtk_option_menu_set_history(optmenu, 2);
3074 menu = gtk_option_menu_get_menu(optmenu);
3075 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3076 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3080 static void prefs_common_cancel(void)
3082 gtk_widget_hide(dialog.window);
3087 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3090 GtkWidget *menuitem;
3092 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3093 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3094 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3095 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3098 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3100 RecvDialogShow dialog_show;
3101 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3103 GtkWidget *menuitem;
3105 dialog_show = *((RecvDialogShow *)pparam->data);
3107 switch (dialog_show) {
3108 case RECVDIALOG_ALWAYS:
3109 gtk_option_menu_set_history(optmenu, 0);
3111 case RECVDIALOG_WINDOW_ACTIVE:
3112 gtk_option_menu_set_history(optmenu, 1);
3114 case RECVDIALOG_NEVER:
3115 gtk_option_menu_set_history(optmenu, 2);
3120 menu = gtk_option_menu_get_menu(optmenu);
3121 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3122 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));