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 "prefswindow.h"
66 PrefsCommon prefs_common;
70 static struct Receive {
71 GtkWidget *checkbtn_incext;
72 GtkWidget *entry_incext;
73 GtkWidget *button_incext;
75 GtkWidget *checkbtn_autochk;
76 GtkWidget *spinbtn_autochk;
77 GtkObject *spinbtn_autochk_adj;
79 GtkWidget *checkbtn_chkonstartup;
80 GtkWidget *checkbtn_scan_after_inc;
83 GtkWidget *checkbtn_newmail_auto;
84 GtkWidget *checkbtn_newmail_manu;
85 GtkWidget *entry_newmail_notify_cmd;
86 GtkWidget *hbox_newmail_notify;
87 GtkWidget *optmenu_recvdialog;
88 GtkWidget *checkbtn_no_recv_err_panel;
89 GtkWidget *checkbtn_close_recv_dialog;
93 GtkWidget *checkbtn_savemsg;
94 GtkWidget *optmenu_senddialog;
96 GtkWidget *optmenu_charset;
97 GtkWidget *optmenu_encoding_method;
100 static struct Display {
101 GtkWidget *chkbtn_folder_unread;
102 GtkWidget *entry_ng_abbrev_len;
103 GtkWidget *spinbtn_ng_abbrev_len;
104 GtkObject *spinbtn_ng_abbrev_len_adj;
106 GtkWidget *chkbtn_transhdr;
108 GtkWidget *chkbtn_swapfrom;
109 GtkWidget *chkbtn_useaddrbook;
110 GtkWidget *chkbtn_threadsubj;
111 GtkWidget *entry_datefmt;
114 static struct Message {
115 GtkWidget *chkbtn_mbalnum;
116 GtkWidget *chkbtn_disphdrpane;
117 GtkWidget *chkbtn_disphdr;
118 GtkWidget *chkbtn_html;
119 GtkWidget *chkbtn_cursor;
120 GtkWidget *spinbtn_linespc;
121 GtkObject *spinbtn_linespc_adj;
123 GtkWidget *chkbtn_smoothscroll;
124 GtkWidget *spinbtn_scrollstep;
125 GtkObject *spinbtn_scrollstep_adj;
126 GtkWidget *chkbtn_halfpage;
128 GtkWidget *chkbtn_attach_desc;
131 static struct Interface {
132 /* GtkWidget *checkbtn_emacs; */
133 GtkWidget *checkbtn_always_show_msg;
134 GtkWidget *checkbtn_openunread;
135 GtkWidget *checkbtn_mark_as_read_on_newwin;
136 GtkWidget *checkbtn_openinbox;
137 GtkWidget *checkbtn_immedexec;
138 GtkWidget *optmenu_nextunreadmsgdialog;
141 static struct Other {
142 GtkWidget *checkbtn_addaddrbyclick;
143 GtkWidget *checkbtn_confonexit;
144 GtkWidget *checkbtn_cleanonexit;
145 GtkWidget *checkbtn_askonclean;
146 GtkWidget *checkbtn_warnqueued;
147 GtkWidget *checkbtn_cliplog;
148 GtkWidget *loglength_entry;
151 GtkWidget *checkbtn_ssl_ask_unknown_valid;
155 GtkWidget *spinbtn_iotimeout;
156 GtkObject *spinbtn_iotimeout_adj;
159 static struct KeybindDialog {
164 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
165 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
166 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
167 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
168 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
169 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
170 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
172 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
173 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
174 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
175 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
176 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
177 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
180 parameter name, default value, pointer to the prefs variable, data type,
181 pointer to the widget pointer,
182 pointer to the function for data setting,
183 pointer to the function for widget setting
186 static PrefParam param[] = {
188 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
189 &receive.checkbtn_incext,
190 prefs_set_data_from_toggle, prefs_set_toggle},
191 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
192 &receive.entry_incext,
193 prefs_set_data_from_entry, prefs_set_entry},
195 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
196 &receive.checkbtn_autochk,
197 prefs_set_data_from_toggle, prefs_set_toggle},
198 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
199 &receive.spinbtn_autochk,
200 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
201 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
202 &receive.checkbtn_chkonstartup,
203 prefs_set_data_from_toggle, prefs_set_toggle},
204 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
205 P_BOOL, &receive.checkbtn_scan_after_inc,
206 prefs_set_data_from_toggle, prefs_set_toggle},
207 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
208 P_BOOL, &receive.checkbtn_newmail_manu,
209 prefs_set_data_from_toggle, prefs_set_toggle},
210 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
211 P_BOOL, &receive.checkbtn_newmail_auto,
212 prefs_set_data_from_toggle, prefs_set_toggle},
213 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
214 &receive.entry_newmail_notify_cmd,
215 prefs_set_data_from_entry, prefs_set_entry},
216 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
217 &receive.optmenu_recvdialog,
218 prefs_common_recv_dialog_set_data_from_optmenu,
219 prefs_common_recv_dialog_set_optmenu},
220 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
221 P_BOOL, &receive.checkbtn_no_recv_err_panel,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
224 P_BOOL, &receive.checkbtn_close_recv_dialog,
225 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
229 &p_send.checkbtn_savemsg,
230 prefs_set_data_from_toggle, prefs_set_toggle},
231 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
232 &p_send.optmenu_senddialog,
233 prefs_common_send_dialog_set_data_from_optmenu,
234 prefs_common_send_dialog_set_optmenu},
236 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
237 &p_send.optmenu_charset,
238 prefs_common_charset_set_data_from_optmenu,
239 prefs_common_charset_set_optmenu},
240 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
241 &p_send.optmenu_encoding_method,
242 prefs_common_encoding_set_data_from_optmenu,
243 prefs_common_encoding_set_optmenu},
245 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
246 P_BOOL, NULL, NULL, NULL},
249 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
251 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
252 P_BOOL, NULL, NULL, NULL},
253 {"redirect_keep_from", "FALSE",
254 &prefs_common.redirect_keep_from, P_BOOL,
256 {"undo_level", "50", &prefs_common.undolevels, P_INT,
259 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
261 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
263 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
265 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
267 {"autosave", "FALSE", &prefs_common.autosave,
268 P_BOOL, NULL, NULL, NULL},
269 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
272 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
274 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
276 {"dictionary", "", &prefs_common.dictionary, P_STRING,
278 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
280 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
282 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
284 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
287 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
290 /* Account autoselection */
291 {"reply_account_autoselect", "TRUE",
292 &prefs_common.reply_account_autosel, P_BOOL,
294 {"forward_account_autoselect", "TRUE",
295 &prefs_common.forward_account_autosel, P_BOOL,
297 {"reedit_account_autoselect", "TRUE",
298 &prefs_common.reedit_account_autosel, P_BOOL,
301 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
304 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
308 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
310 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%q",
311 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
313 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
315 {"forward_quote_format",
316 "\\n\\nBegin forwarded message:\\n\\n"
317 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
318 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
319 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
320 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
324 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
325 {"widget_font", NULL,
326 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
327 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
328 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
329 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
330 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
331 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
332 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
333 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
334 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
337 {"widget_font_gtk2", NULL,
338 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
339 {"message_font_gtk2", "Monospace 9",
340 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
341 {"small_font_gtk2", "Sans 9",
342 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
343 {"bold_font_gtk2", "Sans Bold 9",
344 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
345 {"normal_font_gtk2", "Sans 9",
346 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
349 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
351 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
353 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
356 {"display_folder_unread_num", "TRUE",
357 &prefs_common.display_folder_unread, P_BOOL,
359 {"newsgroup_abbrev_len", "16",
360 &prefs_common.ng_abbrev_len, P_INT,
363 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
366 /* Display: Summary View */
367 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
369 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
371 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
373 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
374 P_STRING, NULL, NULL, NULL},
376 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
378 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
380 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
381 P_INT, NULL, NULL, NULL },
383 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
385 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
387 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
389 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
392 {"folderview_vscrollbar_policy", "0",
393 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
396 {"summary_col_show_mark", "TRUE",
397 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
398 {"summary_col_show_unread", "TRUE",
399 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
400 {"summary_col_show_mime", "TRUE",
401 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
402 {"summary_col_show_subject", "TRUE",
403 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
404 {"summary_col_show_from", "TRUE",
405 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
406 {"summary_col_show_date", "TRUE",
407 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
408 {"summary_col_show_size", "TRUE",
409 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
410 {"summary_col_show_number", "FALSE",
411 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
412 {"summary_col_show_score", "FALSE",
413 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
414 {"summary_col_show_locked", "FALSE",
415 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
417 {"summary_col_pos_mark", "0",
418 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
419 {"summary_col_pos_unread", "1",
420 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
421 {"summary_col_pos_mime", "2",
422 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
423 {"summary_col_pos_subject", "3",
424 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
425 {"summary_col_pos_from", "4",
426 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
427 {"summary_col_pos_date", "5",
428 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
429 {"summary_col_pos_size", "6",
430 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
431 {"summary_col_pos_number", "7",
432 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
433 {"summary_col_pos_score", "8",
434 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
435 {"summary_col_pos_locked", "9",
436 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
438 {"summary_col_size_mark", "10",
439 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
440 {"summary_col_size_unread", "13",
441 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
442 {"summary_col_size_mime", "10",
443 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
444 {"summary_col_size_subject", "200",
445 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
446 {"summary_col_size_from", "120",
447 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
448 {"summary_col_size_date", "118",
449 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
450 {"summary_col_size_size", "45",
451 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
452 {"summary_col_size_number", "40",
453 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
454 {"summary_col_size_score", "40",
455 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
456 {"summary_col_size_locked", "13",
457 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
460 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
462 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
464 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
466 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
468 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
471 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
473 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
475 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
477 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
480 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
482 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
485 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
487 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
489 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
491 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
493 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
496 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
498 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
500 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
502 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
504 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
506 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
508 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
510 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
512 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
514 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
516 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
518 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
520 {"compose_width", "600", &prefs_common.compose_width, P_INT,
522 {"compose_height", "560", &prefs_common.compose_height, P_INT,
524 {"compose_x", "0", &prefs_common.compose_x, P_INT,
526 {"compose_y", "0", &prefs_common.compose_y, P_INT,
529 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
532 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
534 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
536 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
538 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
540 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
542 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
544 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
545 P_BOOL, NULL, NULL, NULL},
547 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
548 &message.chkbtn_mbalnum,
549 prefs_set_data_from_toggle, prefs_set_toggle},
550 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
551 P_BOOL, &message.chkbtn_disphdrpane,
552 prefs_set_data_from_toggle, prefs_set_toggle},
553 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
554 &message.chkbtn_disphdr,
555 prefs_set_data_from_toggle, prefs_set_toggle},
556 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
557 &message.chkbtn_html,
558 prefs_set_data_from_toggle, prefs_set_toggle},
559 {"textview_cursor_visible", "FALSE",
560 &prefs_common.textview_cursor_visible, P_BOOL,
561 &message.chkbtn_cursor, prefs_set_data_from_toggle, prefs_set_toggle},
562 {"line_space", "2", &prefs_common.line_space, P_INT,
563 &message.spinbtn_linespc,
564 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
566 {"enable_smooth_scroll", "FALSE",
567 &prefs_common.enable_smooth_scroll, P_BOOL,
568 &message.chkbtn_smoothscroll,
569 prefs_set_data_from_toggle, prefs_set_toggle},
570 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
571 &message.spinbtn_scrollstep,
572 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
573 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
574 &message.chkbtn_halfpage,
575 prefs_set_data_from_toggle, prefs_set_toggle},
577 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
580 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
581 &message.chkbtn_attach_desc,
582 prefs_set_data_from_toggle, prefs_set_toggle},
583 {"attach_save_directory", NULL,
584 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
587 {"mime_image_viewer", "display '%s'",
588 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
589 {"mime_audio_player", "play '%s'",
590 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
591 {"mime_open_command", "gedit '%s'",
592 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
595 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
597 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
600 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
601 NULL, NULL, NULL}, */
602 {"always_show_message_when_selected", "FALSE",
603 &prefs_common.always_show_msg,
604 P_BOOL, &interface.checkbtn_always_show_msg,
605 prefs_set_data_from_toggle, prefs_set_toggle},
606 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
607 P_BOOL, &interface.checkbtn_openunread,
608 prefs_set_data_from_toggle, prefs_set_toggle},
609 {"mark_as_read_on_new_window", "FALSE",
610 &prefs_common.mark_as_read_on_new_window,
611 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
612 prefs_set_data_from_toggle, prefs_set_toggle},
613 {"mark_as_read_delay", "0",
614 &prefs_common.mark_as_read_delay, P_INT,
616 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
617 P_BOOL, &interface.checkbtn_openinbox,
618 prefs_set_data_from_toggle, prefs_set_toggle},
619 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
620 &interface.checkbtn_immedexec,
621 prefs_set_data_from_toggle, prefs_set_toggle},
622 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
623 &interface.optmenu_nextunreadmsgdialog,
624 prefs_nextunreadmsgdialog_set_data_from_optmenu,
625 prefs_nextunreadmsgdialog_set_optmenu},
627 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
628 &prefs_common.pixmap_theme_path, P_STRING,
631 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
635 {"uri_open_command", DEFAULT_BROWSER_CMD,
636 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
637 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
639 {"ext_editor_command", "gedit %s",
640 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
642 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
643 P_BOOL, &other.checkbtn_addaddrbyclick,
644 prefs_set_data_from_toggle, prefs_set_toggle},
646 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
647 &other.checkbtn_confonexit,
648 prefs_set_data_from_toggle, prefs_set_toggle},
649 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
650 &other.checkbtn_cleanonexit,
651 prefs_set_data_from_toggle, prefs_set_toggle},
652 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
653 &other.checkbtn_askonclean,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
656 P_BOOL, &other.checkbtn_warnqueued,
657 prefs_set_data_from_toggle, prefs_set_toggle},
660 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
661 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
662 prefs_set_data_from_toggle, prefs_set_toggle},
665 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
667 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
669 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
671 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
674 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
675 P_INT, &other.spinbtn_iotimeout,
676 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
677 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
679 {"important_score", "1", &prefs_common.important_score, P_INT,
681 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
682 &other.checkbtn_cliplog,
683 prefs_set_data_from_toggle, prefs_set_toggle},
684 {"log_length", "500", &prefs_common.loglength, P_INT,
685 &other.loglength_entry,
686 prefs_set_data_from_entry, prefs_set_entry},
688 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
690 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
693 {"color_new", "179", &prefs_common.color_new, P_COLOR,
696 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
698 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
700 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
703 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
706 /* widget creating functions */
707 static void prefs_common_create (void);
708 static void prefs_receive_create (void);
709 static void prefs_send_create (void);
710 static void prefs_message_create (void);
711 static void prefs_interface_create (void);
712 static void prefs_other_create (void);
714 static void date_format_ok_btn_clicked (GtkButton *button,
716 static void date_format_cancel_btn_clicked (GtkButton *button,
718 static gboolean date_format_key_pressed (GtkWidget *keywidget,
721 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
724 static void date_format_entry_on_change (GtkEditable *editable,
726 static void date_format_select_row (GtkTreeView *list_view,
728 GtkTreeViewColumn *column,
729 GtkWidget *date_format);
730 static void prefs_keybind_select (void);
731 static gint prefs_keybind_deleted (GtkWidget *widget,
734 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
737 static void prefs_keybind_cancel (void);
738 static void prefs_keybind_apply_clicked (GtkWidget *widget);
740 static void prefs_common_apply (void);
742 typedef struct CommonPage
749 static CommonPage common_page;
751 static void create_widget_func(PrefsPage * _page,
755 CommonPage *page = (CommonPage *) _page;
758 vbox = gtk_vbox_new(FALSE, 6);
759 gtk_widget_show(vbox);
761 if (notebook == NULL)
762 prefs_common_create();
763 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
764 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
766 prefs_set_dialog(param);
770 page->page.widget = vbox;
773 static void destroy_widget_func(PrefsPage *_page)
775 CommonPage *page = (CommonPage *) _page;
777 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
780 static void save_func(PrefsPage * _page)
782 prefs_common_apply();
785 void prefs_common_init(void)
787 static gchar *path[2];
789 prefs_common.disphdr_list = NULL;
791 path[0] = _("Common");
794 common_page.page.path = path;
795 common_page.page.weight = 1000.0;
796 common_page.page.create_widget = create_widget_func;
797 common_page.page.destroy_widget = destroy_widget_func;
798 common_page.page.save_page = save_func;
800 prefs_gtk_register_page((PrefsPage *) &common_page);
803 PrefsCommon *prefs_common_get(void)
805 return &prefs_common;
809 * Read history list from the specified history file
811 GList *prefs_common_read_history(const gchar *history)
815 gchar buf[PREFSBUFSIZE];
818 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
820 if ((fp = fopen(path, "rb")) == NULL) {
821 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
826 while (fgets(buf, sizeof(buf), fp) != NULL) {
828 if (buf[0] == '\0') continue;
829 tmp = add_history(tmp, buf);
833 tmp = g_list_reverse(tmp);
838 void prefs_common_read_config(void)
842 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
843 prefs_read_config(param, "Common", rcpath, NULL);
846 prefs_common.mime_open_cmd_history =
847 prefs_common_read_history(COMMAND_HISTORY);
848 prefs_common.summary_quicksearch_history =
849 prefs_common_read_history(QUICKSEARCH_HISTORY);
853 * Save history list to the specified history file
855 void prefs_common_save_history(const gchar *history, GList *list)
861 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
863 if ((fp = fopen(path, "wb")) == NULL) {
864 FILE_OP_ERROR(path, "fopen");
869 for (cur = list; cur != NULL; cur = cur->next) {
870 fputs((gchar *)cur->data, fp);
878 void prefs_common_write_config(void)
880 prefs_write_config(param, "Common", COMMON_RC);
882 prefs_common_save_history(COMMAND_HISTORY,
883 prefs_common.mime_open_cmd_history);
884 prefs_common_save_history(QUICKSEARCH_HISTORY,
885 prefs_common.summary_quicksearch_history);
888 static void prefs_common_create(void)
892 debug_print("Creating common preferences window...\n");
894 notebook = gtk_notebook_new ();
895 gtk_widget_show(notebook);
896 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
897 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
898 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
900 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
902 gtk_widget_ref(notebook);
904 /* create all widgets on notebook */
905 prefs_receive_create();
906 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
908 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
909 prefs_message_create();
910 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
911 prefs_interface_create();
912 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
913 prefs_other_create();
914 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
916 gtk_widget_show_all(notebook);
919 static void prefs_receive_create(void)
923 GtkWidget *frame_incext;
924 GtkWidget *checkbtn_incext;
926 GtkWidget *label_incext;
927 GtkWidget *entry_incext;
928 /* GtkWidget *button_incext; */
930 GtkWidget *hbox_autochk;
931 GtkWidget *checkbtn_autochk;
932 GtkWidget *label_autochk1;
933 GtkObject *spinbtn_autochk_adj;
934 GtkWidget *spinbtn_autochk;
935 GtkWidget *label_autochk2;
936 GtkWidget *checkbtn_chkonstartup;
937 GtkWidget *checkbtn_scan_after_inc;
940 GtkWidget *frame_newmail;
941 GtkWidget *hbox_newmail_notify;
942 GtkWidget *checkbtn_newmail_auto;
943 GtkWidget *checkbtn_newmail_manu;
944 GtkWidget *entry_newmail_notify_cmd;
945 GtkWidget *label_newmail_notify_cmd;
947 GtkWidget *hbox_recvdialog;
948 GtkWidget *label_recvdialog;
951 GtkWidget *optmenu_recvdialog;
952 GtkWidget *checkbtn_no_recv_err_panel;
953 GtkWidget *checkbtn_close_recv_dialog;
955 vbox1 = gtk_vbox_new (FALSE, VSPACING);
956 gtk_widget_show (vbox1);
957 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
958 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
960 PACK_FRAME(vbox1, frame_incext, _("External program"));
962 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
963 gtk_widget_show (vbox2);
964 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
965 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
967 /* Use of external incorporation program */
968 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
969 _("Use external program for incorporation"));
971 hbox = gtk_hbox_new (FALSE, 8);
972 gtk_widget_show (hbox);
973 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
974 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
976 label_incext = gtk_label_new (_("Command"));
977 gtk_widget_show (label_incext);
978 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
980 entry_incext = gtk_entry_new ();
981 gtk_widget_show (entry_incext);
982 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
985 button_incext = gtk_button_new_with_label ("... ");
986 gtk_widget_show (button_incext);
987 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
990 vbox2 = gtk_vbox_new (FALSE, 0);
991 gtk_widget_show (vbox2);
992 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
995 hbox_autochk = gtk_hbox_new (FALSE, 8);
996 gtk_widget_show (hbox_autochk);
997 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
999 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1000 _("Auto-check new mail"));
1002 label_autochk1 = gtk_label_new (_("every"));
1003 gtk_widget_show (label_autochk1);
1004 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1006 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1007 spinbtn_autochk = gtk_spin_button_new
1008 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1009 gtk_widget_show (spinbtn_autochk);
1010 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1011 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1012 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1014 label_autochk2 = gtk_label_new (_("minute(s)"));
1015 gtk_widget_show (label_autochk2);
1016 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1018 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1019 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1020 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1022 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1023 _("Check new mail on startup"));
1024 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1025 _("Update all local folders after incorporation"));
1028 /* receive dialog */
1029 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1030 gtk_widget_show (hbox_recvdialog);
1031 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1033 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1034 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1035 gtk_widget_show (label_recvdialog);
1036 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1038 optmenu_recvdialog = gtk_option_menu_new ();
1039 gtk_widget_show (optmenu_recvdialog);
1040 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1042 menu = gtk_menu_new ();
1043 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1044 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1045 RECV_DIALOG_MANUAL);
1046 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1048 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1050 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1051 _("Don't popup error dialog on receive error"));
1053 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1054 _("Close receive dialog when finished"));
1056 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1058 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1059 gtk_widget_show (vbox2);
1060 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1061 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1063 hbox = gtk_hbox_new (TRUE, 8);
1064 gtk_widget_show (hbox);
1065 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1066 _("after autochecking"));
1067 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1068 _("after manual checking"));
1069 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1070 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1071 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1073 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1074 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1077 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1078 gtk_widget_show (hbox);
1079 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1082 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1083 "(use %d as number of new "
1085 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1087 gtk_widget_show (label_newmail_notify_cmd);
1088 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1089 label_newmail_notify_cmd, FALSE, FALSE, 0);
1091 entry_newmail_notify_cmd = gtk_entry_new ();
1092 gtk_widget_show (entry_newmail_notify_cmd);
1093 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1094 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1096 gtk_widget_set_sensitive(hbox_newmail_notify,
1097 prefs_common.newmail_notify_auto ||
1098 prefs_common.newmail_notify_manu);
1100 receive.checkbtn_incext = checkbtn_incext;
1101 receive.entry_incext = entry_incext;
1102 /* receive.button_incext = button_incext; */
1104 receive.checkbtn_autochk = checkbtn_autochk;
1105 receive.spinbtn_autochk = spinbtn_autochk;
1106 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1108 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1109 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1112 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1113 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1114 receive.hbox_newmail_notify = hbox_newmail_notify;
1115 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1116 receive.optmenu_recvdialog = optmenu_recvdialog;
1117 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1118 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1121 static void prefs_send_create(void)
1126 GtkWidget *checkbtn_savemsg;
1127 GtkWidget *label_outcharset;
1128 GtkWidget *optmenu_charset;
1129 GtkWidget *optmenu_menu;
1130 GtkWidget *menuitem;
1131 GtkTooltips *charset_tooltip;
1132 GtkWidget *optmenu_encoding;
1133 GtkWidget *label_encoding;
1134 GtkTooltips *encoding_tooltip;
1135 GtkWidget *label_senddialog;
1137 GtkWidget *optmenu_senddialog;
1138 GtkWidget *hbox_senddialog;
1140 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1141 gtk_widget_show (vbox1);
1142 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1143 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1145 vbox2 = gtk_vbox_new (FALSE, 0);
1146 gtk_widget_show (vbox2);
1147 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1149 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1150 _("Save sent messages to Sent folder"));
1152 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1153 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1155 label_senddialog = gtk_label_new (_("Show send dialog"));
1156 gtk_widget_show (label_senddialog);
1157 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1159 optmenu_senddialog = gtk_option_menu_new ();
1160 gtk_widget_show (optmenu_senddialog);
1161 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1163 menu = gtk_menu_new ();
1164 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1165 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1167 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1169 hbox1 = gtk_hbox_new (FALSE, 8);
1170 gtk_widget_show (hbox1);
1171 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1173 label_outcharset = gtk_label_new (_("Outgoing encoding"));
1174 gtk_widget_show (label_outcharset);
1175 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1177 charset_tooltip = gtk_tooltips_new();
1179 optmenu_charset = gtk_option_menu_new ();
1180 gtk_widget_show (optmenu_charset);
1181 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1182 _("If `Automatic' is selected, the optimal encoding"
1183 " for the current locale will be used"),
1185 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1187 optmenu_menu = gtk_menu_new ();
1189 #define SET_MENUITEM(str, data) \
1191 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1194 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1195 SET_MENUITEM(NULL, NULL);
1196 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1197 SET_MENUITEM(NULL, NULL);
1198 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1199 SET_MENUITEM(NULL, NULL);
1200 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1201 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1202 SET_MENUITEM(NULL, NULL);
1203 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1204 SET_MENUITEM(NULL, NULL);
1205 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1206 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1207 SET_MENUITEM(NULL, NULL);
1208 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1209 SET_MENUITEM(NULL, NULL);
1210 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1211 SET_MENUITEM(NULL, NULL);
1212 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1213 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1214 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1215 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1216 SET_MENUITEM(NULL, NULL);
1217 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1219 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1220 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1222 SET_MENUITEM(NULL, NULL);
1223 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1224 SET_MENUITEM(_("Simplified Chinese (GBK)"), CS_GBK);
1225 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1227 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1228 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1230 SET_MENUITEM(NULL, NULL);
1231 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1232 SET_MENUITEM(NULL, NULL);
1233 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1234 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1236 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1239 hbox1 = gtk_hbox_new (FALSE, 8);
1240 gtk_widget_show (hbox1);
1241 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1243 hbox1 = gtk_hbox_new (FALSE, 8);
1244 gtk_widget_show (hbox1);
1245 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1247 label_encoding = gtk_label_new (_("Transfer encoding"));
1248 gtk_widget_show (label_encoding);
1249 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1251 encoding_tooltip = gtk_tooltips_new();
1253 optmenu_encoding = gtk_option_menu_new ();
1254 gtk_widget_show (optmenu_encoding);
1255 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1256 _("Specify Content-Transfer-Encoding used when"
1257 " message body contains non-ASCII characters"),
1259 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1261 optmenu_menu = gtk_menu_new ();
1263 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1264 SET_MENUITEM("base64", CTE_BASE64);
1265 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1266 SET_MENUITEM("8bit", CTE_8BIT);
1268 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1271 hbox1 = gtk_hbox_new (FALSE, 8);
1272 gtk_widget_show (hbox1);
1273 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1275 p_send.checkbtn_savemsg = checkbtn_savemsg;
1276 p_send.optmenu_senddialog = optmenu_senddialog;
1278 p_send.optmenu_charset = optmenu_charset;
1279 p_send.optmenu_encoding_method = optmenu_encoding;
1282 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1286 toggled = gtk_toggle_button_get_active
1287 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1288 gtk_toggle_button_get_active
1289 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1290 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1293 static void prefs_message_create(void)
1299 GtkWidget *chkbtn_mbalnum;
1300 GtkWidget *chkbtn_disphdrpane;
1301 GtkWidget *chkbtn_disphdr;
1302 GtkWidget *button_edit_disphdr;
1303 GtkWidget *chkbtn_html;
1304 GtkWidget *chkbtn_cursor;
1305 GtkWidget *hbox_linespc;
1306 GtkWidget *label_linespc;
1307 GtkObject *spinbtn_linespc_adj;
1308 GtkWidget *spinbtn_linespc;
1310 GtkWidget *frame_scr;
1311 GtkWidget *vbox_scr;
1312 GtkWidget *chkbtn_smoothscroll;
1313 GtkWidget *hbox_scr;
1314 GtkWidget *label_scr;
1315 GtkObject *spinbtn_scrollstep_adj;
1316 GtkWidget *spinbtn_scrollstep;
1317 GtkWidget *chkbtn_halfpage;
1319 GtkWidget *chkbtn_attach_desc;
1321 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1322 gtk_widget_show (vbox1);
1323 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1324 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1326 vbox2 = gtk_vbox_new (FALSE, 0);
1327 gtk_widget_show (vbox2);
1328 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1331 (vbox2, chkbtn_mbalnum,
1332 _("Display multi-byte alphanumeric as\n"
1333 "ASCII character (Japanese only)"));
1334 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1337 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1338 _("Display header pane above message view"));
1340 hbox1 = gtk_hbox_new (FALSE, 8);
1341 gtk_widget_show (hbox1);
1342 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1344 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1345 _("Display short headers on message view"));
1347 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1348 gtk_widget_show (button_edit_disphdr);
1349 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1351 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1352 G_CALLBACK (prefs_display_header_open),
1355 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1357 PACK_CHECK_BUTTON(vbox2, chkbtn_html,
1358 _("Render HTML messages as text"));
1360 PACK_CHECK_BUTTON(vbox2, chkbtn_cursor,
1361 _("Display cursor in message view"));
1363 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1365 hbox1 = gtk_hbox_new (FALSE, 32);
1366 gtk_widget_show (hbox1);
1367 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1369 hbox_linespc = gtk_hbox_new (FALSE, 8);
1370 gtk_widget_show (hbox1);
1371 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1373 label_linespc = gtk_label_new (_("Line space"));
1374 gtk_widget_show (label_linespc);
1375 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1378 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1379 spinbtn_linespc = gtk_spin_button_new
1380 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1381 gtk_widget_show (spinbtn_linespc);
1382 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1384 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1385 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1387 label_linespc = gtk_label_new (_("pixel(s)"));
1388 gtk_widget_show (label_linespc);
1389 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1392 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1394 vbox_scr = gtk_vbox_new (FALSE, 0);
1395 gtk_widget_show (vbox_scr);
1396 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1397 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1399 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1401 hbox1 = gtk_hbox_new (FALSE, 32);
1402 gtk_widget_show (hbox1);
1403 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1405 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1407 hbox_scr = gtk_hbox_new (FALSE, 8);
1408 gtk_widget_show (hbox_scr);
1409 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1411 label_scr = gtk_label_new (_("Step"));
1412 gtk_widget_show (label_scr);
1413 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1415 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1416 spinbtn_scrollstep = gtk_spin_button_new
1417 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1418 gtk_widget_show (spinbtn_scrollstep);
1419 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1421 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1422 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1425 label_scr = gtk_label_new (_("pixel(s)"));
1426 gtk_widget_show (label_scr);
1427 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1429 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1431 vbox3 = gtk_vbox_new (FALSE, 0);
1432 gtk_widget_show (vbox3);
1433 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1435 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1436 _("Show attachment descriptions (rather than names)"));
1438 message.chkbtn_mbalnum = chkbtn_mbalnum;
1439 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1440 message.chkbtn_disphdr = chkbtn_disphdr;
1441 message.chkbtn_html = chkbtn_html;
1442 message.chkbtn_cursor = chkbtn_cursor;
1443 message.spinbtn_linespc = spinbtn_linespc;
1445 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1446 message.spinbtn_scrollstep = spinbtn_scrollstep;
1447 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1448 message.chkbtn_halfpage = chkbtn_halfpage;
1450 message.chkbtn_attach_desc = chkbtn_attach_desc;
1453 static void prefs_interface_create(void)
1458 /* GtkWidget *checkbtn_emacs; */
1459 GtkWidget *checkbtn_always_show_msg;
1460 GtkWidget *checkbtn_openunread;
1461 GtkWidget *checkbtn_mark_as_read_on_newwin;
1462 GtkWidget *checkbtn_openinbox;
1463 GtkWidget *checkbtn_immedexec;
1464 GtkTooltips *immedexec_tooltip;
1468 GtkWidget *menuitem;
1470 GtkWidget *button_keybind;
1472 GtkWidget *hbox_nextunreadmsgdialog;
1473 GtkWidget *optmenu_nextunreadmsgdialog;
1475 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1476 gtk_widget_show (vbox1);
1477 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1478 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1480 vbox2 = gtk_vbox_new (FALSE, 0);
1481 gtk_widget_show (vbox2);
1482 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1484 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1485 _("Emulate the behavior of mouse operation of\n"
1486 "Emacs-based mailer"));
1487 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1488 GTK_JUSTIFY_LEFT); */
1491 (vbox2, checkbtn_always_show_msg,
1492 _("Always open messages in summary when selected"));
1495 (vbox2, checkbtn_openunread,
1496 _("Open first unread message when entering a folder"));
1499 (vbox2, checkbtn_mark_as_read_on_newwin,
1500 _("Only mark message as read when opened in new window"));
1503 (vbox2, checkbtn_openinbox,
1504 _("Go to inbox after receiving new mail"));
1506 vbox3 = gtk_vbox_new (FALSE, 0);
1507 gtk_widget_show (vbox3);
1508 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1510 immedexec_tooltip = gtk_tooltips_new();
1513 (vbox3, checkbtn_immedexec,
1514 _("Execute immediately when moving or deleting messages"));
1515 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1516 _("Messages will be marked until execution"
1517 " if this is turned off"),
1520 hbox1 = gtk_hbox_new (FALSE, 0);
1521 gtk_widget_show (hbox1);
1522 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1524 /* Next Unread Message Dialog */
1525 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1526 gtk_widget_show (hbox1);
1527 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1529 label = gtk_label_new (_("Show no-unread-message dialog"));
1530 gtk_widget_show (label);
1531 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1533 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1534 gtk_widget_show (optmenu_nextunreadmsgdialog);
1535 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1537 menu = gtk_menu_new ();
1538 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1539 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
1540 NEXTUNREADMSGDIALOG_ASSUME_YES);
1541 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
1542 NEXTUNREADMSGDIALOG_ASSUME_NO);
1544 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1546 hbox1 = gtk_hbox_new (FALSE, 8);
1547 gtk_widget_show (hbox1);
1548 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1550 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1551 gtk_widget_show (button_keybind);
1552 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1553 g_signal_connect (G_OBJECT (button_keybind), "clicked",
1554 G_CALLBACK (prefs_keybind_select), NULL);
1556 /* interface.checkbtn_emacs = checkbtn_emacs; */
1557 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
1558 interface.checkbtn_openunread = checkbtn_openunread;
1559 interface.checkbtn_mark_as_read_on_newwin
1560 = checkbtn_mark_as_read_on_newwin;
1561 interface.checkbtn_openinbox = checkbtn_openinbox;
1562 interface.checkbtn_immedexec = checkbtn_immedexec;
1563 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
1566 static void prefs_other_create(void)
1571 GtkWidget *frame_addr;
1572 GtkWidget *vbox_addr;
1573 GtkWidget *checkbtn_addaddrbyclick;
1575 GtkWidget *frame_cliplog;
1576 GtkWidget *vbox_cliplog;
1577 GtkWidget *hbox_cliplog;
1578 GtkWidget *checkbtn_cliplog;
1579 GtkWidget *loglength_label;
1580 GtkWidget *loglength_entry;
1581 GtkTooltips *loglength_tooltip;
1583 GtkWidget *frame_exit;
1584 GtkWidget *vbox_exit;
1585 GtkWidget *checkbtn_confonexit;
1586 GtkWidget *checkbtn_cleanonexit;
1587 GtkWidget *checkbtn_askonclean;
1588 GtkWidget *checkbtn_warnqueued;
1590 GtkWidget *label_iotimeout;
1591 GtkWidget *spinbtn_iotimeout;
1592 GtkObject *spinbtn_iotimeout_adj;
1596 GtkWidget *frame_ssl;
1597 GtkWidget *vbox_ssl;
1598 GtkWidget *hbox_ssl;
1599 GtkWidget *checkbtn_ssl_ask_unknown_valid;
1602 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1603 gtk_widget_show (vbox1);
1604 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1605 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1607 PACK_FRAME (vbox1, frame_addr, _("Address book"));
1609 vbox_addr = gtk_vbox_new (FALSE, 0);
1610 gtk_widget_show (vbox_addr);
1611 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
1612 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
1615 (vbox_addr, checkbtn_addaddrbyclick,
1616 _("Add address to destination when double-clicked"));
1619 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
1621 vbox_cliplog = gtk_vbox_new (FALSE, 0);
1622 gtk_widget_show (vbox_cliplog);
1623 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
1624 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
1625 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
1626 _("Clip the log size"));
1627 hbox_cliplog = gtk_hbox_new (FALSE, 3);
1628 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
1629 gtk_widget_show (hbox_cliplog);
1631 loglength_label = gtk_label_new (_("Log window length"));
1632 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
1634 gtk_widget_show (GTK_WIDGET (loglength_label));
1636 loglength_tooltip = gtk_tooltips_new();
1638 loglength_entry = gtk_entry_new ();
1639 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
1640 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
1642 gtk_widget_show (GTK_WIDGET (loglength_entry));
1643 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
1644 _("0 to stop logging in the log window"),
1646 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
1651 PACK_FRAME (vbox1, frame_ssl, _("Security"));
1653 vbox_ssl = gtk_vbox_new (FALSE, 0);
1654 gtk_widget_show (vbox_ssl);
1655 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
1656 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
1657 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
1658 _("Ask before accepting SSL certificates"));
1659 hbox_ssl = gtk_hbox_new (FALSE, 3);
1660 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
1661 gtk_widget_show (hbox_ssl);
1666 PACK_FRAME (vbox1, frame_exit, _("On exit"));
1668 vbox_exit = gtk_vbox_new (FALSE, 0);
1669 gtk_widget_show (vbox_exit);
1670 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
1671 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
1673 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
1674 _("Confirm on exit"));
1676 hbox1 = gtk_hbox_new (FALSE, 32);
1677 gtk_widget_show (hbox1);
1678 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
1680 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
1681 _("Empty trash on exit"));
1682 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
1683 _("Ask before emptying"));
1684 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
1686 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
1687 _("Warn if there are queued messages"));
1689 hbox1 = gtk_hbox_new (FALSE, 8);
1690 gtk_widget_show (hbox1);
1691 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1693 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
1694 gtk_widget_show (label_iotimeout);
1695 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
1697 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
1698 spinbtn_iotimeout = gtk_spin_button_new
1699 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
1700 gtk_widget_show (spinbtn_iotimeout);
1701 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
1703 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
1704 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
1706 label_iotimeout = gtk_label_new (_("seconds"));
1707 gtk_widget_show (label_iotimeout);
1708 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
1710 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
1712 other.checkbtn_cliplog = checkbtn_cliplog;
1713 other.loglength_entry = loglength_entry;
1715 other.checkbtn_confonexit = checkbtn_confonexit;
1716 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
1717 other.checkbtn_askonclean = checkbtn_askonclean;
1718 other.checkbtn_warnqueued = checkbtn_warnqueued;
1720 other.spinbtn_iotimeout = spinbtn_iotimeout;
1721 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
1725 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
1730 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
1732 GtkWidget *datefmt_sample = NULL;
1735 g_return_if_fail(widget != NULL);
1736 g_return_if_fail(*widget != NULL);
1737 g_return_if_fail(display.entry_datefmt != NULL);
1739 datefmt_sample = GTK_WIDGET(g_object_get_data
1740 (G_OBJECT(*widget), "datefmt_sample"));
1741 g_return_if_fail(datefmt_sample != NULL);
1743 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
1744 g_free(prefs_common.date_format);
1745 prefs_common.date_format = text;
1746 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
1748 gtk_widget_destroy(*widget);
1752 static void date_format_cancel_btn_clicked(GtkButton *button,
1755 g_return_if_fail(widget != NULL);
1756 g_return_if_fail(*widget != NULL);
1758 gtk_widget_destroy(*widget);
1762 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
1765 if (event && event->keyval == GDK_Escape)
1766 date_format_cancel_btn_clicked(NULL, widget);
1770 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
1771 GdkEventAny *event, GtkWidget **widget)
1773 g_return_val_if_fail(widget != NULL, FALSE);
1774 g_return_val_if_fail(*widget != NULL, FALSE);
1780 static void date_format_entry_on_change(GtkEditable *editable,
1784 struct tm *cal_time;
1788 cur_time = time(NULL);
1789 cal_time = localtime(&cur_time);
1791 text = gtk_editable_get_chars(editable, 0, -1);
1793 strftime(buffer, sizeof buffer, text, cal_time);
1796 text = conv_codeset_strdup(buffer,
1797 conv_get_locale_charset_str(),
1800 text = g_strdup(buffer);
1802 gtk_label_set_text(example, text);
1807 static void date_format_select_row(GtkTreeView *list_view,
1809 GtkTreeViewColumn *column,
1810 GtkWidget *date_format)
1814 const gchar *old_format;
1816 GtkWidget *datefmt_sample;
1818 GtkTreeModel *model;
1820 g_return_if_fail(date_format != NULL);
1822 /* only on double click */
1823 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
1826 g_return_if_fail(datefmt_sample != NULL);
1828 model = gtk_tree_view_get_model(list_view);
1830 /* get format from list */
1831 if (!gtk_tree_model_get_iter(model, &iter, path))
1834 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
1836 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
1837 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
1839 /* insert the format into the text entry */
1840 new_format = g_malloc(strlen(old_format) + 3);
1842 strncpy(new_format, old_format, cur_pos);
1843 new_format[cur_pos] = '\0';
1844 strcat(new_format, format);
1845 strcat(new_format, &old_format[cur_pos]);
1847 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
1848 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
1853 static void prefs_keybind_select(void)
1860 GtkWidget *confirm_area;
1862 GtkWidget *cancel_btn;
1864 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1865 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
1866 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
1867 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
1868 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
1869 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
1870 manage_window_set_transient (GTK_WINDOW (window));
1872 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1873 gtk_container_add (GTK_CONTAINER (window), vbox1);
1874 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
1876 hbox1 = gtk_hbox_new (FALSE, 8);
1877 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1879 label = gtk_label_new
1880 (_("Select preset:"));
1881 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1882 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1884 hbox1 = gtk_hbox_new (FALSE, 8);
1885 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1887 combo = gtk_combo_new ();
1888 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
1889 gtkut_combo_set_items (GTK_COMBO (combo),
1895 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
1897 hbox1 = gtk_hbox_new (FALSE, 8);
1898 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1900 label = gtk_label_new
1901 (_("You can also modify each menu shortcut by pressing\n"
1902 "any key(s) when placing the mouse pointer on the item."));
1903 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
1904 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
1906 hbox1 = gtk_hbox_new (FALSE, 8);
1907 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1909 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
1910 &cancel_btn, GTK_STOCK_CANCEL,
1912 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
1913 gtk_widget_grab_default (ok_btn);
1915 MANAGE_WINDOW_SIGNALS_CONNECT(window);
1916 g_signal_connect (G_OBJECT (window), "delete_event",
1917 G_CALLBACK (prefs_keybind_deleted), NULL);
1918 g_signal_connect (G_OBJECT (window), "key_press_event",
1919 G_CALLBACK (prefs_keybind_key_pressed), NULL);
1920 g_signal_connect (G_OBJECT (ok_btn), "clicked",
1921 G_CALLBACK (prefs_keybind_apply_clicked),
1923 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
1924 G_CALLBACK (prefs_keybind_cancel),
1927 gtk_widget_show_all(window);
1929 keybind.window = window;
1930 keybind.combo = combo;
1933 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
1936 if (event && event->keyval == GDK_Escape)
1937 prefs_keybind_cancel();
1941 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
1944 prefs_keybind_cancel();
1948 static void prefs_keybind_cancel(void)
1950 gtk_widget_destroy(keybind.window);
1951 keybind.window = NULL;
1952 keybind.combo = NULL;
1956 const gchar *accel_path;
1957 const gchar *accel_key;
1960 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
1964 GdkModifierType mods;
1966 for (i = 0; i < num; i++) {
1967 const gchar *accel_key
1968 = keybind[i].accel_key ? keybind[i].accel_key : "";
1969 gtk_accelerator_parse(accel_key, &key, &mods);
1970 gtk_accel_map_change_entry(keybind[i].accel_path,
1975 static void prefs_keybind_apply_clicked(GtkWidget *widget)
1977 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
1979 struct KeyBind *menurc;
1982 static struct KeyBind default_menurc[] = {
1983 {"<Main>/File/Empty all Trash folders", ""},
1984 {"<Main>/File/Save as...", "<control>S"},
1985 {"<Main>/File/Print...", ""},
1986 {"<Main>/File/Exit", "<control>Q"},
1988 {"<Main>/Edit/Copy", "<control>C"},
1989 {"<Main>/Edit/Select all", "<control>A"},
1990 {"<Main>/Edit/Find in current message...", "<control>F"},
1991 {"<Main>/Edit/Search folder...", "<shift><control>F"},
1993 {"<Main>/View/Show or hide/Message View", "V"},
1994 {"<Main>/View/Thread view", "<control>T"},
1995 {"<Main>/View/Go to/Prev message", "P"},
1996 {"<Main>/View/Go to/Next message", "N"},
1997 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
1998 {"<Main>/View/Go to/Next unread message", "<shift>N"},
1999 {"<Main>/View/Go to/Other folder...", "G"},
2000 {"<Main>/View/Open in new window", "<control><alt>N"},
2001 {"<Main>/View/Message source", "<control>U"},
2002 {"<Main>/View/Show all headers", "<control>H"},
2003 {"<Main>/View/Update summary", "<control><alt>U"},
2005 {"<Main>/Message/Receive/Get from current account",
2007 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2008 {"<Main>/Message/Compose an email message", "<control>M"},
2009 {"<Main>/Message/Reply", "<control>R"},
2010 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2011 {"<Main>/Message/Reply to/sender", ""},
2012 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2013 {"<Main>/Message/Forward", "<control><alt>F"},
2014 /* {"<Main>/Message/Forward as attachment", ""}, */
2015 {"<Main>/Message/Move...", "<control>O"},
2016 {"<Main>/Message/Copy...", "<shift><control>O"},
2017 {"<Main>/Message/Delete", "<control>D"},
2018 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2019 {"<Main>/Message/Mark/Unmark", "U"},
2020 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2021 {"<Main>/Message/Mark/Mark as read", ""},
2023 {"<Main>/Tools/Address book", "<shift><control>A"},
2024 {"<Main>/Tools/Execute", "X"},
2025 {"<Main>/Tools/Log window", "<shift><control>L"},
2027 {"<Compose>/Message/Close", "<control>W"},
2028 {"<Compose>/Edit/Select all", "<control>A"},
2029 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2030 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2031 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2032 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2033 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2036 static struct KeyBind mew_wl_menurc[] = {
2037 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2038 {"<Main>/File/Save as...", "Y"},
2039 {"<Main>/File/Print...", "<shift>numbersign"},
2040 {"<Main>/File/Exit", "<shift>Q"},
2042 {"<Main>/Edit/Copy", "<control>C"},
2043 {"<Main>/Edit/Select all", "<control>A"},
2044 {"<Main>/Edit/Find in current message...", "<control>F"},
2045 {"<Main>/Edit/Search folder...", "<control>S"},
2047 {"<Main>/View/Show or hide/Message View", ""},
2048 {"<Main>/View/Thread view", "<shift>T"},
2049 {"<Main>/View/Go to/Prev message", "P"},
2050 {"<Main>/View/Go to/Next message", "N"},
2051 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2052 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2053 {"<Main>/View/Go to/Other folder...", "G"},
2054 {"<Main>/View/Open in new window", "<control><alt>N"},
2055 {"<Main>/View/Message source", "<control>U"},
2056 {"<Main>/View/Show all headers", "<shift>H"},
2057 {"<Main>/View/Update summary", "<shift>S"},
2059 {"<Main>/Message/Receive/Get from current account",
2061 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2062 {"<Main>/Message/Compose an email message", "W"},
2063 {"<Main>/Message/Reply", "<control>R"},
2064 {"<Main>/Message/Reply to/all", "<shift>A"},
2065 {"<Main>/Message/Reply to/sender", ""},
2066 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2067 {"<Main>/Message/Forward", "F"},
2068 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2069 {"<Main>/Message/Move...", "O"},
2070 {"<Main>/Message/Copy...", "<shift>O"},
2071 {"<Main>/Message/Delete", "D"},
2072 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2073 {"<Main>/Message/Mark/Unmark", "U"},
2074 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2075 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2077 {"<Main>/Tools/Address book", "<shift><control>A"},
2078 {"<Main>/Tools/Execute", "X"},
2079 {"<Main>/Tools/Log window", "<shift><control>L"},
2081 {"<Compose>/Message/Close", "<alt>W"},
2082 {"<Compose>/Edit/Select all", ""},
2083 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2084 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2085 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2086 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2087 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2090 static struct KeyBind mutt_menurc[] = {
2091 {"<Main>/File/Empty all Trash folders", ""},
2092 {"<Main>/File/Save as...", "S"},
2093 {"<Main>/File/Print...", "P"},
2094 {"<Main>/File/Exit", "Q"},
2096 {"<Main>/Edit/Copy", "<control>C"},
2097 {"<Main>/Edit/Select all", "<control>A"},
2098 {"<Main>/Edit/Find in current message...", "<control>F"},
2099 {"<Main>/Edit/Search messages...", "slash"},
2101 {"<Main>/View/Show or hide/Message view", "V"},
2102 {"<Main>/View/Thread view", "<control>T"},
2103 {"<Main>/View/Go to/Prev message", ""},
2104 {"<Main>/View/Go to/Next message", ""},
2105 {"<Main>/View/Go to/Prev unread message", ""},
2106 {"<Main>/View/Go to/Next unread message", ""},
2107 {"<Main>/View/Go to/Other folder...", "C"},
2108 {"<Main>/View/Open in new window", "<control><alt>N"},
2109 {"<Main>/View/Message source", "<control>U"},
2110 {"<Main>/View/Show all headers", "<control>H"},
2111 {"<Main>/View/Update summary", "<control><alt>U"},
2113 {"<Main>/Message/Receive/Get from current account",
2115 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2116 {"<Main>/Message/Compose an email message", "M"},
2117 {"<Main>/Message/Reply", "R"},
2118 {"<Main>/Message/Reply to/all", "G"},
2119 {"<Main>/Message/Reply to/sender", ""},
2120 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2121 {"<Main>/Message/Forward", "F"},
2122 {"<Main>/Message/Forward as attachment", ""},
2123 {"<Main>/Message/Move...", "<control>O"},
2124 {"<Main>/Message/Copy...", "<shift>C"},
2125 {"<Main>/Message/Delete", "D"},
2126 {"<Main>/Message/Mark/Mark", "<shift>F"},
2127 {"<Main>/Message/Mark/Unmark", "U"},
2128 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2129 {"<Main>/Message/Mark/Mark as read", ""},
2131 {"<Main>/Tools/Address book", "<shift><control>A"},
2132 {"<Main>/Tools/Execute", "X"},
2133 {"<Main>/Tools/Log window", "<shift><control>L"},
2135 {"<Compose>/Message/Close", "<alt>W"},
2136 {"<Compose>/Edit/Select all", ""},
2137 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2138 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2139 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2140 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2141 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2144 static struct KeyBind old_sylpheed_menurc[] = {
2145 {"<Main>/File/Empty all Trash folders", ""},
2146 {"<Main>/File/Save as...", ""},
2147 {"<Main>/File/Print...", "<alt>P"},
2148 {"<Main>/File/Exit", "<alt>Q"},
2150 {"<Main>/Edit/Copy", "<control>C"},
2151 {"<Main>/Edit/Select all", "<control>A"},
2152 {"<Main>/Edit/Find in current message...", "<control>F"},
2153 {"<Main>/Edit/Search folder...", "<control>S"},
2155 {"<Main>/View/Show or hide/Message View", ""},
2156 {"<Main>/View/Thread view", "<control>T"},
2157 {"<Main>/View/Go to/Prev message", "P"},
2158 {"<Main>/View/Go to/Next message", "N"},
2159 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2160 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2161 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2162 {"<Main>/View/Open in new window", "<shift><control>N"},
2163 {"<Main>/View/Message source", "<control>U"},
2164 {"<Main>/View/Show all headers", "<control>H"},
2165 {"<Main>/View/Update summary", "<alt>U"},
2167 {"<Main>/Message/Receive/Get from current account",
2169 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2170 {"<Main>/Message/Compose an email message", "<alt>N"},
2171 {"<Main>/Message/Reply", "<alt>R"},
2172 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2173 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2174 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2175 {"<Main>/Message/Forward", "<shift><alt>F"},
2176 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2177 {"<Main>/Message/Move...", "<alt>O"},
2178 {"<Main>/Message/Copy...", ""},
2179 {"<Main>/Message/Delete", "<alt>D"},
2180 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2181 {"<Main>/Message/Mark/Unmark", "U"},
2182 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2183 {"<Main>/Message/Mark/Mark as read", ""},
2185 {"<Main>/Tools/Address book", "<alt>A"},
2186 {"<Main>/Tools/Execute", "<alt>X"},
2187 {"<Main>/Tools/Log window", "<alt>L"},
2189 {"<Compose>/Message/Close", "<alt>W"},
2190 {"<Compose>/Edit/Select all", ""},
2191 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2192 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2193 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2194 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2195 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2198 text = gtk_entry_get_text(entry);
2200 if (!strcmp(text, _("Default"))) {
2201 menurc = default_menurc;
2202 n_menurc = G_N_ELEMENTS(default_menurc);
2203 } else if (!strcmp(text, "Mew / Wanderlust")) {
2204 menurc = mew_wl_menurc;
2205 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2206 } else if (!strcmp(text, "Mutt")) {
2207 menurc = mutt_menurc;
2208 n_menurc = G_N_ELEMENTS(mutt_menurc);
2209 } else if (!strcmp(text, _("Old Sylpheed"))) {
2210 menurc = old_sylpheed_menurc;
2211 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2216 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2217 prefs_keybind_apply(menurc, n_menurc);
2219 gtk_widget_destroy(keybind.window);
2220 keybind.window = NULL;
2221 keybind.combo = NULL;
2224 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2227 GtkWidget *menuitem;
2230 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2231 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2232 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2233 g_free(*((gchar **)pparam->data));
2234 *((gchar **)pparam->data) = g_strdup(charset);
2237 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2239 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2242 g_return_if_fail(optmenu != NULL);
2243 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2245 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2246 (GCompareFunc)strcmp2);
2248 gtk_option_menu_set_history(optmenu, index);
2250 gtk_option_menu_set_history(optmenu, 0);
2251 prefs_common_charset_set_data_from_optmenu(pparam);
2255 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2258 GtkWidget *menuitem;
2260 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2261 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2262 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2263 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2266 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2268 TransferEncodingMethod method =
2269 *((TransferEncodingMethod *)pparam->data);
2270 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2273 g_return_if_fail(optmenu != NULL);
2275 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2278 gtk_option_menu_set_history(optmenu, index);
2280 gtk_option_menu_set_history(optmenu, 0);
2281 prefs_common_encoding_set_data_from_optmenu(pparam);
2285 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2288 GtkWidget *menuitem;
2290 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2291 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2292 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2293 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2296 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2298 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2299 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2301 GtkWidget *menuitem;
2304 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2307 gtk_option_menu_set_history(optmenu, index);
2309 gtk_option_menu_set_history(optmenu, 0);
2310 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2313 menu = gtk_option_menu_get_menu(optmenu);
2314 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2315 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2318 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2321 GtkWidget *menuitem;
2323 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2324 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2325 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2326 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2329 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2331 SendDialogMode mode = *((SendDialogMode *)pparam->data);
2332 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2334 GtkWidget *menuitem;
2337 case SEND_DIALOG_ALWAYS:
2338 gtk_option_menu_set_history(optmenu, 0);
2340 case SEND_DIALOG_NEVER:
2341 gtk_option_menu_set_history(optmenu, 1);
2347 menu = gtk_option_menu_get_menu(optmenu);
2348 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2349 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2352 static void prefs_common_apply(void)
2354 MainWindow *mainwindow;
2356 prefs_set_data_from_dialog(param);
2357 sock_set_io_timeout(prefs_common.io_timeout_secs);
2358 main_window_reflect_prefs_all_real(FALSE);
2359 prefs_common_write_config();
2361 mainwindow = mainwindow_get_mainwindow();
2362 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
2363 prefs_common.loglength);
2365 inc_autocheck_timer_remove();
2366 inc_autocheck_timer_set();
2369 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
2372 GtkWidget *menuitem;
2374 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2375 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2376 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
2377 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2380 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
2382 NextUnreadMsgDialogShow dialog_show;
2383 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2385 GtkWidget *menuitem;
2387 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
2389 switch (dialog_show) {
2390 case NEXTUNREADMSGDIALOG_ALWAYS:
2391 gtk_option_menu_set_history(optmenu, 0);
2393 case NEXTUNREADMSGDIALOG_ASSUME_YES:
2394 gtk_option_menu_set_history(optmenu, 1);
2396 case NEXTUNREADMSGDIALOG_ASSUME_NO:
2397 gtk_option_menu_set_history(optmenu, 2);
2401 menu = gtk_option_menu_get_menu(optmenu);
2402 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2403 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2406 void pref_set_textview_from_pref(GtkTextView *textview, gchar *txt)
2408 GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
2409 gchar *o_out, *out = malloc(txt?(strlen(txt)+1):1);
2411 memset(out, 0, strlen(txt)+1);
2413 while (*t != '\0') {
2414 if (*t == '\\' && *(t+1) == 'n') {
2417 } else if (*t == '\\') {
2426 gtk_text_buffer_set_text(buffer, o_out?o_out:"", -1);
2430 gchar *pref_get_pref_from_textview(GtkTextView *textview)
2432 GtkTextBuffer *buffer;
2433 GtkTextIter start, end;
2434 gchar *o_out, *out, *tmp, *t;
2436 buffer = gtk_text_view_get_buffer(textview);
2437 gtk_text_buffer_get_start_iter(buffer, &start);
2438 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
2439 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
2441 o_out = out = malloc(2*strlen(tmp)+1);
2443 while (*t != '\0') {
2447 } else if (*t == '\\') {