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 *chkbtn_cursor;
152 GtkWidget *spinbtn_linespc;
153 GtkObject *spinbtn_linespc_adj;
155 GtkWidget *chkbtn_smoothscroll;
156 GtkWidget *spinbtn_scrollstep;
157 GtkObject *spinbtn_scrollstep_adj;
158 GtkWidget *chkbtn_halfpage;
160 GtkWidget *chkbtn_attach_desc;
163 static struct Interface {
164 /* GtkWidget *checkbtn_emacs; */
165 GtkWidget *checkbtn_always_show_msg;
166 GtkWidget *checkbtn_openunread;
167 GtkWidget *checkbtn_mark_as_read_on_newwin;
168 GtkWidget *checkbtn_openinbox;
169 GtkWidget *checkbtn_immedexec;
170 GtkWidget *optmenu_nextunreadmsgdialog;
173 static struct Other {
174 GtkWidget *checkbtn_addaddrbyclick;
175 GtkWidget *checkbtn_confonexit;
176 GtkWidget *checkbtn_cleanonexit;
177 GtkWidget *checkbtn_askonclean;
178 GtkWidget *checkbtn_warnqueued;
179 GtkWidget *checkbtn_cliplog;
180 GtkWidget *loglength_entry;
183 GtkWidget *checkbtn_ssl_ask_unknown_valid;
187 GtkWidget *spinbtn_iotimeout;
188 GtkObject *spinbtn_iotimeout_adj;
191 static struct KeybindDialog {
196 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
197 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
198 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
199 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
200 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
201 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
202 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
204 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
205 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
206 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
207 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
208 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
209 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
212 parameter name, default value, pointer to the prefs variable, data type,
213 pointer to the widget pointer,
214 pointer to the function for data setting,
215 pointer to the function for widget setting
218 static PrefParam param[] = {
220 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
221 &receive.checkbtn_incext,
222 prefs_set_data_from_toggle, prefs_set_toggle},
223 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
224 &receive.entry_incext,
225 prefs_set_data_from_entry, prefs_set_entry},
227 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
228 &receive.checkbtn_autochk,
229 prefs_set_data_from_toggle, prefs_set_toggle},
230 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
231 &receive.spinbtn_autochk,
232 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
233 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
234 &receive.checkbtn_chkonstartup,
235 prefs_set_data_from_toggle, prefs_set_toggle},
236 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
237 P_BOOL, &receive.checkbtn_scan_after_inc,
238 prefs_set_data_from_toggle, prefs_set_toggle},
239 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
240 P_BOOL, &receive.checkbtn_newmail_manu,
241 prefs_set_data_from_toggle, prefs_set_toggle},
242 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
243 P_BOOL, &receive.checkbtn_newmail_auto,
244 prefs_set_data_from_toggle, prefs_set_toggle},
245 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
246 &receive.entry_newmail_notify_cmd,
247 prefs_set_data_from_entry, prefs_set_entry},
248 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
249 &receive.optmenu_recvdialog,
250 prefs_common_recv_dialog_set_data_from_optmenu,
251 prefs_common_recv_dialog_set_optmenu},
252 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
253 P_BOOL, &receive.checkbtn_no_recv_err_panel,
254 prefs_set_data_from_toggle, prefs_set_toggle},
255 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
256 P_BOOL, &receive.checkbtn_close_recv_dialog,
257 prefs_set_data_from_toggle, prefs_set_toggle},
260 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
261 &p_send.checkbtn_savemsg,
262 prefs_set_data_from_toggle, prefs_set_toggle},
263 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
264 &p_send.optmenu_senddialog,
265 prefs_common_send_dialog_set_data_from_optmenu,
266 prefs_common_send_dialog_set_optmenu},
268 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
269 &p_send.optmenu_charset,
270 prefs_common_charset_set_data_from_optmenu,
271 prefs_common_charset_set_optmenu},
272 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
273 &p_send.optmenu_encoding_method,
274 prefs_common_encoding_set_data_from_optmenu,
275 prefs_common_encoding_set_optmenu},
277 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
278 P_BOOL, NULL, NULL, NULL},
281 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
282 &compose.checkbtn_autoextedit,
283 prefs_set_data_from_toggle, prefs_set_toggle},
284 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
285 P_BOOL, &compose.checkbtn_forward_as_attachment,
286 prefs_set_data_from_toggle, prefs_set_toggle},
287 {"redirect_keep_from", "FALSE",
288 &prefs_common.redirect_keep_from, P_BOOL,
289 &compose.checkbtn_redirect_keep_from,
290 prefs_set_data_from_toggle, prefs_set_toggle},
291 {"undo_level", "50", &prefs_common.undolevels, P_INT,
292 &compose.spinbtn_undolevel,
293 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
295 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
297 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
299 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
301 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
303 {"autosave", "FALSE", &prefs_common.autosave,
304 P_BOOL, &compose.checkbtn_autosave,
305 prefs_set_data_from_toggle, prefs_set_toggle},
306 {"autosave_length", "50", &prefs_common.autosave_length,
307 P_INT, &compose.entry_autosave_length,
308 prefs_set_data_from_entry, prefs_set_entry},
310 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
312 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
314 {"dictionary", "", &prefs_common.dictionary, P_STRING,
316 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
318 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
320 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
322 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
325 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
326 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
328 /* Account autoselection */
329 {"reply_account_autoselect", "TRUE",
330 &prefs_common.reply_account_autosel, P_BOOL,
331 &compose.checkbtn_reply_account_autosel,
332 prefs_set_data_from_toggle, prefs_set_toggle},
333 {"forward_account_autoselect", "TRUE",
334 &prefs_common.forward_account_autosel, P_BOOL,
335 &compose.checkbtn_forward_account_autosel,
336 prefs_set_data_from_toggle, prefs_set_toggle},
337 {"reedit_account_autoselect", "TRUE",
338 &prefs_common.reedit_account_autosel, P_BOOL,
339 &compose.checkbtn_reedit_account_autosel,
340 prefs_set_data_from_toggle, prefs_set_toggle},
342 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
343 &compose.checkbtn_default_reply_list,
344 prefs_set_data_from_toggle, prefs_set_toggle},
346 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
350 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
351 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
352 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%q",
353 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
354 prefs_set_data_from_text, prefs_set_text},
356 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
357 "e.entry_fw_quotemark,
358 prefs_set_data_from_entry, prefs_set_entry},
359 {"forward_quote_format",
360 "\\n\\nBegin forwarded message:\\n\\n"
361 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
362 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
363 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
364 prefs_set_data_from_text, prefs_set_text},
365 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
366 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
369 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
370 {"widget_font", NULL,
371 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
372 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
373 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
374 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
375 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
376 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
377 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
378 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
379 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
382 {"widget_font_gtk2", NULL,
383 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
384 {"message_font_gtk2", "Monospace 9",
385 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
386 {"small_font_gtk2", "Sans 9",
387 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
388 {"bold_font_gtk2", "Sans Bold 9",
389 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
390 {"normal_font_gtk2", "Sans 9",
391 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
394 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
396 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
398 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
401 {"display_folder_unread_num", "TRUE",
402 &prefs_common.display_folder_unread, P_BOOL,
403 &display.chkbtn_folder_unread,
404 prefs_set_data_from_toggle, prefs_set_toggle},
405 {"newsgroup_abbrev_len", "16",
406 &prefs_common.ng_abbrev_len, P_INT,
407 &display.spinbtn_ng_abbrev_len,
408 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
410 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
411 &display.chkbtn_transhdr,
412 prefs_set_data_from_toggle, prefs_set_toggle},
414 /* Display: Summary View */
415 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
416 &display.chkbtn_swapfrom,
417 prefs_set_data_from_toggle, prefs_set_toggle},
418 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
419 &display.chkbtn_useaddrbook,
420 prefs_set_data_from_toggle, prefs_set_toggle},
421 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
422 &display.chkbtn_threadsubj,
423 prefs_set_data_from_toggle, prefs_set_toggle},
424 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
425 P_STRING, &display.entry_datefmt,
426 prefs_set_data_from_entry, prefs_set_entry},
428 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
430 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
432 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
433 P_INT, NULL, NULL, NULL },
435 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
437 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
439 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
441 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
444 {"folderview_vscrollbar_policy", "0",
445 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
448 {"summary_col_show_mark", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_unread", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_mime", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_subject", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_from", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_date", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_size", "TRUE",
461 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_number", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_score", "FALSE",
465 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_locked", "FALSE",
467 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
469 {"summary_col_pos_mark", "0",
470 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_unread", "1",
472 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_mime", "2",
474 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_subject", "3",
476 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_from", "4",
478 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_date", "5",
480 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_size", "6",
482 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_number", "7",
484 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_score", "8",
486 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_locked", "9",
488 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_mark", "10",
491 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_unread", "13",
493 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_mime", "10",
495 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_subject", "200",
497 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_from", "120",
499 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_date", "118",
501 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_size", "45",
503 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_number", "40",
505 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_score", "40",
507 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_locked", "13",
509 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
512 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
514 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
516 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
518 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
520 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
523 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
525 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
527 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
529 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
532 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
534 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
537 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
539 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
541 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
543 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
545 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
548 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
550 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
552 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
554 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
556 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
558 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
560 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
562 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
564 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
566 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
568 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
570 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
572 {"compose_width", "600", &prefs_common.compose_width, P_INT,
574 {"compose_height", "560", &prefs_common.compose_height, P_INT,
576 {"compose_x", "0", &prefs_common.compose_x, P_INT,
578 {"compose_y", "0", &prefs_common.compose_y, P_INT,
581 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
584 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
586 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
588 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
590 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
592 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
594 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
596 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
597 P_BOOL, NULL, NULL, NULL},
599 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
600 &message.chkbtn_mbalnum,
601 prefs_set_data_from_toggle, prefs_set_toggle},
602 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
603 P_BOOL, &message.chkbtn_disphdrpane,
604 prefs_set_data_from_toggle, prefs_set_toggle},
605 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
606 &message.chkbtn_disphdr,
607 prefs_set_data_from_toggle, prefs_set_toggle},
608 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
609 &message.chkbtn_html,
610 prefs_set_data_from_toggle, prefs_set_toggle},
611 {"textview_cursor_visible", "FALSE",
612 &prefs_common.textview_cursor_visible, P_BOOL,
613 &message.chkbtn_cursor, prefs_set_data_from_toggle, prefs_set_toggle},
614 {"line_space", "2", &prefs_common.line_space, P_INT,
615 &message.spinbtn_linespc,
616 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
618 {"enable_smooth_scroll", "FALSE",
619 &prefs_common.enable_smooth_scroll, P_BOOL,
620 &message.chkbtn_smoothscroll,
621 prefs_set_data_from_toggle, prefs_set_toggle},
622 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
623 &message.spinbtn_scrollstep,
624 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
625 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
626 &message.chkbtn_halfpage,
627 prefs_set_data_from_toggle, prefs_set_toggle},
629 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
632 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
633 &message.chkbtn_attach_desc,
634 prefs_set_data_from_toggle, prefs_set_toggle},
635 {"attach_save_directory", NULL,
636 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
639 {"mime_image_viewer", "display '%s'",
640 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
641 {"mime_audio_player", "play '%s'",
642 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
643 {"mime_open_command", "gedit '%s'",
644 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
647 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
649 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
652 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
653 NULL, NULL, NULL}, */
654 {"always_show_message_when_selected", "FALSE",
655 &prefs_common.always_show_msg,
656 P_BOOL, &interface.checkbtn_always_show_msg,
657 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
659 P_BOOL, &interface.checkbtn_openunread,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 {"mark_as_read_on_new_window", "FALSE",
662 &prefs_common.mark_as_read_on_new_window,
663 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
664 prefs_set_data_from_toggle, prefs_set_toggle},
665 {"mark_as_read_delay", "0",
666 &prefs_common.mark_as_read_delay, P_INT,
668 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
669 P_BOOL, &interface.checkbtn_openinbox,
670 prefs_set_data_from_toggle, prefs_set_toggle},
671 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
672 &interface.checkbtn_immedexec,
673 prefs_set_data_from_toggle, prefs_set_toggle},
674 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
675 &interface.optmenu_nextunreadmsgdialog,
676 prefs_nextunreadmsgdialog_set_data_from_optmenu,
677 prefs_nextunreadmsgdialog_set_optmenu},
679 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
680 &prefs_common.pixmap_theme_path, P_STRING,
683 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
687 {"uri_open_command", DEFAULT_BROWSER_CMD,
688 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
689 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
691 {"ext_editor_command", "gedit %s",
692 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
694 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
695 P_BOOL, &other.checkbtn_addaddrbyclick,
696 prefs_set_data_from_toggle, prefs_set_toggle},
698 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
699 &other.checkbtn_confonexit,
700 prefs_set_data_from_toggle, prefs_set_toggle},
701 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
702 &other.checkbtn_cleanonexit,
703 prefs_set_data_from_toggle, prefs_set_toggle},
704 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
705 &other.checkbtn_askonclean,
706 prefs_set_data_from_toggle, prefs_set_toggle},
707 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
708 P_BOOL, &other.checkbtn_warnqueued,
709 prefs_set_data_from_toggle, prefs_set_toggle},
712 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
713 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
714 prefs_set_data_from_toggle, prefs_set_toggle},
717 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
719 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
721 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
723 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
726 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
727 P_INT, &other.spinbtn_iotimeout,
728 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
729 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
731 {"important_score", "1", &prefs_common.important_score, P_INT,
733 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
734 &other.checkbtn_cliplog,
735 prefs_set_data_from_toggle, prefs_set_toggle},
736 {"log_length", "500", &prefs_common.loglength, P_INT,
737 &other.loglength_entry,
738 prefs_set_data_from_entry, prefs_set_entry},
740 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
742 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
745 {"color_new", "179", &prefs_common.color_new, P_COLOR,
748 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
750 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
752 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
755 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
758 /* widget creating functions */
759 static void prefs_common_create (void);
760 static void prefs_receive_create (void);
761 static void prefs_send_create (void);
762 static void prefs_compose_create (void);
763 static void prefs_quote_create (void);
764 static void prefs_display_create (void);
765 static void prefs_message_create (void);
766 static void prefs_interface_create (void);
767 static void prefs_other_create (void);
769 static void date_format_ok_btn_clicked (GtkButton *button,
771 static void date_format_cancel_btn_clicked (GtkButton *button,
773 static gboolean date_format_key_pressed (GtkWidget *keywidget,
776 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
779 static void date_format_entry_on_change (GtkEditable *editable,
781 static void date_format_select_row (GtkTreeView *list_view,
783 GtkTreeViewColumn *column,
784 GtkWidget *date_format);
785 static GtkWidget *date_format_create (GtkButton *button,
788 static void prefs_keybind_select (void);
789 static gint prefs_keybind_deleted (GtkWidget *widget,
792 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
795 static void prefs_keybind_cancel (void);
796 static void prefs_keybind_apply_clicked (GtkWidget *widget);
798 static void prefs_common_apply (void);
800 typedef struct CommonPage
807 static CommonPage common_page;
809 static void create_widget_func(PrefsPage * _page,
813 CommonPage *page = (CommonPage *) _page;
816 vbox = gtk_vbox_new(FALSE, 6);
817 gtk_widget_show(vbox);
819 if (notebook == NULL)
820 prefs_common_create();
821 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
822 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
824 prefs_set_dialog(param);
828 page->page.widget = vbox;
831 static void destroy_widget_func(PrefsPage *_page)
833 CommonPage *page = (CommonPage *) _page;
835 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
838 static void save_func(PrefsPage * _page)
840 prefs_common_apply();
843 void prefs_common_init(void)
845 static gchar *path[2];
847 prefs_common.disphdr_list = NULL;
849 path[0] = _("Common");
852 common_page.page.path = path;
853 common_page.page.weight = 1000.0;
854 common_page.page.create_widget = create_widget_func;
855 common_page.page.destroy_widget = destroy_widget_func;
856 common_page.page.save_page = save_func;
858 prefs_gtk_register_page((PrefsPage *) &common_page);
861 PrefsCommon *prefs_common_get(void)
863 return &prefs_common;
867 * Read history list from the specified history file
869 GList *prefs_common_read_history(const gchar *history)
873 gchar buf[PREFSBUFSIZE];
876 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
878 if ((fp = fopen(path, "rb")) == NULL) {
879 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
884 while (fgets(buf, sizeof(buf), fp) != NULL) {
886 if (buf[0] == '\0') continue;
887 tmp = add_history(tmp, buf);
891 tmp = g_list_reverse(tmp);
896 void prefs_common_read_config(void)
900 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
901 prefs_read_config(param, "Common", rcpath, NULL);
904 prefs_common.mime_open_cmd_history =
905 prefs_common_read_history(COMMAND_HISTORY);
906 prefs_common.summary_quicksearch_history =
907 prefs_common_read_history(QUICKSEARCH_HISTORY);
911 * Save history list to the specified history file
913 void prefs_common_save_history(const gchar *history, GList *list)
919 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
921 if ((fp = fopen(path, "wb")) == NULL) {
922 FILE_OP_ERROR(path, "fopen");
927 for (cur = list; cur != NULL; cur = cur->next) {
928 fputs((gchar *)cur->data, fp);
936 void prefs_common_write_config(void)
938 prefs_write_config(param, "Common", COMMON_RC);
940 prefs_common_save_history(COMMAND_HISTORY,
941 prefs_common.mime_open_cmd_history);
942 prefs_common_save_history(QUICKSEARCH_HISTORY,
943 prefs_common.summary_quicksearch_history);
946 static void prefs_common_create(void)
950 debug_print("Creating common preferences window...\n");
952 notebook = gtk_notebook_new ();
953 gtk_widget_show(notebook);
954 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
955 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
956 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
958 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
960 gtk_widget_ref(notebook);
962 /* create all widgets on notebook */
963 prefs_receive_create();
964 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
966 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
967 prefs_compose_create();
968 SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
969 prefs_quote_create();
970 SET_NOTEBOOK_LABEL(notebook, _("Quote"), page++);
971 prefs_display_create();
972 SET_NOTEBOOK_LABEL(notebook, _("Display"), page++);
973 prefs_message_create();
974 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
975 prefs_interface_create();
976 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
977 prefs_other_create();
978 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
980 gtk_widget_show_all(notebook);
983 static void prefs_receive_create(void)
987 GtkWidget *frame_incext;
988 GtkWidget *checkbtn_incext;
990 GtkWidget *label_incext;
991 GtkWidget *entry_incext;
992 /* GtkWidget *button_incext; */
994 GtkWidget *hbox_autochk;
995 GtkWidget *checkbtn_autochk;
996 GtkWidget *label_autochk1;
997 GtkObject *spinbtn_autochk_adj;
998 GtkWidget *spinbtn_autochk;
999 GtkWidget *label_autochk2;
1000 GtkWidget *checkbtn_chkonstartup;
1001 GtkWidget *checkbtn_scan_after_inc;
1004 GtkWidget *frame_newmail;
1005 GtkWidget *hbox_newmail_notify;
1006 GtkWidget *checkbtn_newmail_auto;
1007 GtkWidget *checkbtn_newmail_manu;
1008 GtkWidget *entry_newmail_notify_cmd;
1009 GtkWidget *label_newmail_notify_cmd;
1011 GtkWidget *hbox_recvdialog;
1012 GtkWidget *label_recvdialog;
1014 GtkWidget *menuitem;
1015 GtkWidget *optmenu_recvdialog;
1016 GtkWidget *checkbtn_no_recv_err_panel;
1017 GtkWidget *checkbtn_close_recv_dialog;
1019 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1020 gtk_widget_show (vbox1);
1021 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1022 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1024 PACK_FRAME(vbox1, frame_incext, _("External program"));
1026 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1027 gtk_widget_show (vbox2);
1028 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1029 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1031 /* Use of external incorporation program */
1032 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1033 _("Use external program for incorporation"));
1035 hbox = gtk_hbox_new (FALSE, 8);
1036 gtk_widget_show (hbox);
1037 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1038 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1040 label_incext = gtk_label_new (_("Command"));
1041 gtk_widget_show (label_incext);
1042 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1044 entry_incext = gtk_entry_new ();
1045 gtk_widget_show (entry_incext);
1046 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1049 button_incext = gtk_button_new_with_label ("... ");
1050 gtk_widget_show (button_incext);
1051 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1054 vbox2 = gtk_vbox_new (FALSE, 0);
1055 gtk_widget_show (vbox2);
1056 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1059 hbox_autochk = gtk_hbox_new (FALSE, 8);
1060 gtk_widget_show (hbox_autochk);
1061 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1063 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1064 _("Auto-check new mail"));
1066 label_autochk1 = gtk_label_new (_("every"));
1067 gtk_widget_show (label_autochk1);
1068 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1070 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1071 spinbtn_autochk = gtk_spin_button_new
1072 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1073 gtk_widget_show (spinbtn_autochk);
1074 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1075 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1076 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1078 label_autochk2 = gtk_label_new (_("minute(s)"));
1079 gtk_widget_show (label_autochk2);
1080 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1082 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1083 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1084 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1086 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1087 _("Check new mail on startup"));
1088 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1089 _("Update all local folders after incorporation"));
1092 /* receive dialog */
1093 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1094 gtk_widget_show (hbox_recvdialog);
1095 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1097 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1098 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1099 gtk_widget_show (label_recvdialog);
1100 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1102 optmenu_recvdialog = gtk_option_menu_new ();
1103 gtk_widget_show (optmenu_recvdialog);
1104 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1106 menu = gtk_menu_new ();
1107 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1108 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1109 RECV_DIALOG_MANUAL);
1110 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1112 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1114 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1115 _("Don't popup error dialog on receive error"));
1117 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1118 _("Close receive dialog when finished"));
1120 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1122 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1123 gtk_widget_show (vbox2);
1124 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1125 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1127 hbox = gtk_hbox_new (TRUE, 8);
1128 gtk_widget_show (hbox);
1129 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1130 _("after autochecking"));
1131 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1132 _("after manual checking"));
1133 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1134 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1135 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1137 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1138 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1141 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1142 gtk_widget_show (hbox);
1143 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1146 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1147 "(use %d as number of new "
1149 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1151 gtk_widget_show (label_newmail_notify_cmd);
1152 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1153 label_newmail_notify_cmd, FALSE, FALSE, 0);
1155 entry_newmail_notify_cmd = gtk_entry_new ();
1156 gtk_widget_show (entry_newmail_notify_cmd);
1157 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1158 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1160 gtk_widget_set_sensitive(hbox_newmail_notify,
1161 prefs_common.newmail_notify_auto ||
1162 prefs_common.newmail_notify_manu);
1164 receive.checkbtn_incext = checkbtn_incext;
1165 receive.entry_incext = entry_incext;
1166 /* receive.button_incext = button_incext; */
1168 receive.checkbtn_autochk = checkbtn_autochk;
1169 receive.spinbtn_autochk = spinbtn_autochk;
1170 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1172 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1173 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1176 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1177 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1178 receive.hbox_newmail_notify = hbox_newmail_notify;
1179 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1180 receive.optmenu_recvdialog = optmenu_recvdialog;
1181 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1182 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1185 static void prefs_send_create(void)
1190 GtkWidget *checkbtn_savemsg;
1191 GtkWidget *label_outcharset;
1192 GtkWidget *optmenu_charset;
1193 GtkWidget *optmenu_menu;
1194 GtkWidget *menuitem;
1195 GtkTooltips *charset_tooltip;
1196 GtkWidget *optmenu_encoding;
1197 GtkWidget *label_encoding;
1198 GtkTooltips *encoding_tooltip;
1199 GtkWidget *label_senddialog;
1201 GtkWidget *optmenu_senddialog;
1202 GtkWidget *hbox_senddialog;
1204 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1205 gtk_widget_show (vbox1);
1206 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1207 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1209 vbox2 = gtk_vbox_new (FALSE, 0);
1210 gtk_widget_show (vbox2);
1211 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1213 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1214 _("Save sent messages to Sent folder"));
1216 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1217 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1219 label_senddialog = gtk_label_new (_("Show send dialog"));
1220 gtk_widget_show (label_senddialog);
1221 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1223 optmenu_senddialog = gtk_option_menu_new ();
1224 gtk_widget_show (optmenu_senddialog);
1225 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1227 menu = gtk_menu_new ();
1228 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1229 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1231 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1233 hbox1 = gtk_hbox_new (FALSE, 8);
1234 gtk_widget_show (hbox1);
1235 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1237 label_outcharset = gtk_label_new (_("Outgoing encoding"));
1238 gtk_widget_show (label_outcharset);
1239 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1241 charset_tooltip = gtk_tooltips_new();
1243 optmenu_charset = gtk_option_menu_new ();
1244 gtk_widget_show (optmenu_charset);
1245 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1246 _("If `Automatic' is selected, the optimal encoding"
1247 " for the current locale will be used"),
1249 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1251 optmenu_menu = gtk_menu_new ();
1253 #define SET_MENUITEM(str, data) \
1255 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1258 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1259 SET_MENUITEM(NULL, NULL);
1260 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1261 SET_MENUITEM(NULL, NULL);
1262 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1263 SET_MENUITEM(NULL, NULL);
1264 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1265 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1266 SET_MENUITEM(NULL, NULL);
1267 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1268 SET_MENUITEM(NULL, NULL);
1269 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1270 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1271 SET_MENUITEM(NULL, NULL);
1272 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1273 SET_MENUITEM(NULL, NULL);
1274 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1275 SET_MENUITEM(NULL, NULL);
1276 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1277 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1278 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1279 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1280 SET_MENUITEM(NULL, NULL);
1281 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1283 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1284 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1286 SET_MENUITEM(NULL, NULL);
1287 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1288 SET_MENUITEM(_("Simplified Chinese (GBK)"), CS_GBK);
1289 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1291 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1292 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1294 SET_MENUITEM(NULL, NULL);
1295 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1296 SET_MENUITEM(NULL, NULL);
1297 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1298 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1300 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1303 hbox1 = gtk_hbox_new (FALSE, 8);
1304 gtk_widget_show (hbox1);
1305 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1307 hbox1 = gtk_hbox_new (FALSE, 8);
1308 gtk_widget_show (hbox1);
1309 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1311 label_encoding = gtk_label_new (_("Transfer encoding"));
1312 gtk_widget_show (label_encoding);
1313 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1315 encoding_tooltip = gtk_tooltips_new();
1317 optmenu_encoding = gtk_option_menu_new ();
1318 gtk_widget_show (optmenu_encoding);
1319 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1320 _("Specify Content-Transfer-Encoding used when"
1321 " message body contains non-ASCII characters"),
1323 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1325 optmenu_menu = gtk_menu_new ();
1327 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1328 SET_MENUITEM("base64", CTE_BASE64);
1329 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1330 SET_MENUITEM("8bit", CTE_8BIT);
1332 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1335 hbox1 = gtk_hbox_new (FALSE, 8);
1336 gtk_widget_show (hbox1);
1337 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1339 p_send.checkbtn_savemsg = checkbtn_savemsg;
1340 p_send.optmenu_senddialog = optmenu_senddialog;
1342 p_send.optmenu_charset = optmenu_charset;
1343 p_send.optmenu_encoding_method = optmenu_encoding;
1346 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1350 toggled = gtk_toggle_button_get_active
1351 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1352 gtk_toggle_button_get_active
1353 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1354 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1357 static void prefs_compose_create(void)
1362 GtkWidget *checkbtn_autoextedit;
1364 GtkWidget *frame_autosel;
1365 GtkWidget *hbox_autosel;
1366 GtkWidget *checkbtn_reply_account_autosel;
1367 GtkWidget *checkbtn_forward_account_autosel;
1368 GtkWidget *checkbtn_reedit_account_autosel;
1370 GtkWidget *hbox_undolevel;
1371 GtkWidget *label_undolevel;
1372 GtkObject *spinbtn_undolevel_adj;
1373 GtkWidget *spinbtn_undolevel;
1377 GtkWidget *checkbtn_default_reply_list;
1379 GtkWidget *checkbtn_forward_as_attachment;
1380 GtkWidget *checkbtn_redirect_keep_from;
1382 GtkWidget *hbox_autosave;
1383 GtkWidget *checkbtn_autosave;
1384 GtkWidget *entry_autosave_length;
1385 GtkWidget *label_autosave_length;
1387 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1388 gtk_widget_show (vbox1);
1389 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1390 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1392 /* Account autoselection */
1393 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1395 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1396 gtk_widget_show (hbox_autosel);
1397 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1398 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1400 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1401 _("when replying"));
1402 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1403 _("when forwarding"));
1404 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1405 _("when re-editing"));
1407 vbox2 = gtk_vbox_new (FALSE, 0);
1408 gtk_widget_show (vbox2);
1409 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1411 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1412 _("Reply button invokes mailing list reply"));
1414 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1415 _("Automatically launch the external editor"));
1417 hbox5 = gtk_hbox_new (FALSE, 8);
1418 gtk_widget_show (hbox5);
1419 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1421 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1422 _("Forward as attachment"));
1424 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1425 _("Keep the original 'From' header when redirecting"));
1428 hbox_autosave = gtk_hbox_new (FALSE, 8);
1429 gtk_widget_show (hbox_autosave);
1430 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1432 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1433 _("Autosave to Drafts folder every "));
1435 entry_autosave_length = gtk_entry_new();
1436 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1437 gtk_widget_show (entry_autosave_length);
1438 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1440 label_autosave_length = gtk_label_new(_("characters"));
1441 gtk_widget_show (label_autosave_length);
1442 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1444 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1445 gtk_widget_show (hbox_undolevel);
1446 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1448 label_undolevel = gtk_label_new (_("Undo level"));
1449 gtk_widget_show (label_undolevel);
1450 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1452 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1453 spinbtn_undolevel = gtk_spin_button_new
1454 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1455 gtk_widget_show (spinbtn_undolevel);
1456 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1457 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1458 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1461 compose.checkbtn_quote = checkbtn_quote;
1462 compose.entry_quotemark = entry_quotemark;
1463 compose.text_quotefmt = text_quotefmt;
1466 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1468 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1469 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1470 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1472 compose.spinbtn_undolevel = spinbtn_undolevel;
1473 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1475 compose.checkbtn_autosave = checkbtn_autosave;
1476 compose.entry_autosave_length = entry_autosave_length;
1478 compose.checkbtn_forward_as_attachment =
1479 checkbtn_forward_as_attachment;
1480 compose.checkbtn_redirect_keep_from =
1481 checkbtn_redirect_keep_from;
1482 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1485 static void prefs_quote_create(void)
1488 GtkWidget *frame_quote;
1489 GtkWidget *vbox_quote;
1492 GtkWidget *label_quotemark;
1493 GtkWidget *entry_quotemark;
1494 GtkWidget *scrolledwin_quotefmt;
1495 GtkWidget *text_quotefmt;
1497 GtkWidget *entry_fw_quotemark;
1498 GtkWidget *text_fw_quotefmt;
1500 GtkWidget *entry_quote_chars;
1501 GtkWidget *label_quote_chars;
1503 GtkWidget *btn_quotedesc;
1505 GtkWidget *checkbtn_reply_with_quote;
1507 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1508 gtk_widget_show (vbox1);
1509 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1510 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1514 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1516 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1518 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1519 gtk_widget_show (vbox_quote);
1520 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1521 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1523 hbox1 = gtk_hbox_new (FALSE, 32);
1524 gtk_widget_show (hbox1);
1525 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1527 hbox2 = gtk_hbox_new (FALSE, 8);
1528 gtk_widget_show (hbox2);
1529 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1531 label_quotemark = gtk_label_new (_("Quotation mark"));
1532 gtk_widget_show (label_quotemark);
1533 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1535 entry_quotemark = gtk_entry_new ();
1536 gtk_widget_show (entry_quotemark);
1537 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1538 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1540 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1541 gtk_widget_show (scrolledwin_quotefmt);
1542 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1544 gtk_scrolled_window_set_policy
1545 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1546 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1547 gtk_scrolled_window_set_shadow_type
1548 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1550 text_quotefmt = gtk_text_view_new ();
1551 gtk_widget_show (text_quotefmt);
1552 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1553 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
1554 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1558 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1560 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1561 gtk_widget_show (vbox_quote);
1562 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1563 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1565 hbox1 = gtk_hbox_new (FALSE, 32);
1566 gtk_widget_show (hbox1);
1567 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1569 hbox2 = gtk_hbox_new (FALSE, 8);
1570 gtk_widget_show (hbox2);
1571 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1573 label_quotemark = gtk_label_new (_("Quotation mark"));
1574 gtk_widget_show (label_quotemark);
1575 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1577 entry_fw_quotemark = gtk_entry_new ();
1578 gtk_widget_show (entry_fw_quotemark);
1579 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1581 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1583 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1584 gtk_widget_show (scrolledwin_quotefmt);
1585 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1587 gtk_scrolled_window_set_policy
1588 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1589 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1590 gtk_scrolled_window_set_shadow_type
1591 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1593 text_fw_quotefmt = gtk_text_view_new ();
1594 gtk_widget_show (text_fw_quotefmt);
1595 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1597 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1598 gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
1600 hbox1 = gtk_hbox_new (FALSE, 32);
1601 gtk_widget_show (hbox1);
1602 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1605 gtk_button_new_with_label (_(" Description of symbols "));
1606 gtk_widget_show (btn_quotedesc);
1607 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1608 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1609 G_CALLBACK(quote_fmt_quote_description), NULL);
1613 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1615 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1616 gtk_widget_show (vbox_quote);
1617 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1618 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1620 hbox1 = gtk_hbox_new (FALSE, 32);
1621 gtk_widget_show (hbox1);
1622 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1624 hbox2 = gtk_hbox_new (FALSE, 8);
1625 gtk_widget_show (hbox2);
1626 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1628 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1629 gtk_widget_show (label_quote_chars);
1630 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1632 entry_quote_chars = gtk_entry_new ();
1633 gtk_widget_show (entry_quote_chars);
1634 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1636 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1639 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1640 quote.entry_quotemark = entry_quotemark;
1641 quote.text_quotefmt = text_quotefmt;
1642 quote.entry_fw_quotemark = entry_fw_quotemark;
1643 quote.text_fw_quotefmt = text_fw_quotefmt;
1644 quote.entry_quote_chars = entry_quote_chars;
1647 static void prefs_display_create(void)
1650 GtkWidget *chkbtn_transhdr;
1651 GtkWidget *chkbtn_folder_unread;
1653 GtkWidget *label_ng_abbrev;
1654 GtkWidget *spinbtn_ng_abbrev_len;
1655 GtkObject *spinbtn_ng_abbrev_len_adj;
1656 GtkWidget *frame_summary;
1658 GtkWidget *chkbtn_swapfrom;
1659 GtkWidget *chkbtn_useaddrbook;
1660 GtkWidget *chkbtn_threadsubj;
1662 GtkWidget *label_datefmt;
1663 GtkWidget *button_datefmt;
1664 GtkWidget *entry_datefmt;
1665 GtkWidget *button_dispitem;
1667 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1668 gtk_widget_show (vbox1);
1669 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1670 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1672 vbox2 = gtk_vbox_new (FALSE, 0);
1673 gtk_widget_show (vbox2);
1674 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1677 (vbox2, chkbtn_transhdr,
1678 _("Translate header name (such as `From:', `Subject:')"));
1680 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1681 _("Display unread number next to folder name"));
1683 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1685 hbox1 = gtk_hbox_new (FALSE, 8);
1686 gtk_widget_show (hbox1);
1687 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1689 label_ng_abbrev = gtk_label_new
1690 (_("Abbreviate newsgroup names longer than"));
1691 gtk_widget_show (label_ng_abbrev);
1692 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1694 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1695 spinbtn_ng_abbrev_len = gtk_spin_button_new
1696 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1697 gtk_widget_show (spinbtn_ng_abbrev_len);
1698 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1700 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1701 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1704 label_ng_abbrev = gtk_label_new
1706 gtk_widget_show (label_ng_abbrev);
1707 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1709 /* ---- Summary ---- */
1711 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1713 vbox2 = gtk_vbox_new (FALSE, 0);
1714 gtk_widget_show (vbox2);
1715 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1716 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1719 (vbox2, chkbtn_swapfrom,
1720 _("Display recipient in `From' column if sender is yourself"));
1722 (vbox2, chkbtn_useaddrbook,
1723 _("Display sender using address book"));
1725 (vbox2, chkbtn_threadsubj,
1726 _("Thread using subject in addition to standard headers"));
1728 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1730 hbox1 = gtk_hbox_new (FALSE, 8);
1731 gtk_widget_show (hbox1);
1732 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1734 label_datefmt = gtk_label_new (_("Date format"));
1735 gtk_widget_show (label_datefmt);
1736 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1738 entry_datefmt = gtk_entry_new ();
1739 gtk_widget_show (entry_datefmt);
1740 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1742 button_datefmt = gtk_button_new_with_label (" ... ");
1744 gtk_widget_show (button_datefmt);
1745 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1746 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1747 G_CALLBACK (date_format_create), NULL);
1749 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1751 hbox1 = gtk_hbox_new (FALSE, 8);
1752 gtk_widget_show (hbox1);
1753 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1755 button_dispitem = gtk_button_new_with_label
1756 (_(" Set displayed items in summary... "));
1757 gtk_widget_show (button_dispitem);
1758 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1759 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1760 G_CALLBACK (prefs_summary_column_open),
1763 display.chkbtn_transhdr = chkbtn_transhdr;
1764 display.chkbtn_folder_unread = chkbtn_folder_unread;
1765 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1766 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1768 display.chkbtn_swapfrom = chkbtn_swapfrom;
1769 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1770 display.chkbtn_threadsubj = chkbtn_threadsubj;
1771 display.entry_datefmt = entry_datefmt;
1774 static void prefs_message_create(void)
1780 GtkWidget *chkbtn_mbalnum;
1781 GtkWidget *chkbtn_disphdrpane;
1782 GtkWidget *chkbtn_disphdr;
1783 GtkWidget *button_edit_disphdr;
1784 GtkWidget *chkbtn_html;
1785 GtkWidget *chkbtn_cursor;
1786 GtkWidget *hbox_linespc;
1787 GtkWidget *label_linespc;
1788 GtkObject *spinbtn_linespc_adj;
1789 GtkWidget *spinbtn_linespc;
1791 GtkWidget *frame_scr;
1792 GtkWidget *vbox_scr;
1793 GtkWidget *chkbtn_smoothscroll;
1794 GtkWidget *hbox_scr;
1795 GtkWidget *label_scr;
1796 GtkObject *spinbtn_scrollstep_adj;
1797 GtkWidget *spinbtn_scrollstep;
1798 GtkWidget *chkbtn_halfpage;
1800 GtkWidget *chkbtn_attach_desc;
1802 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1803 gtk_widget_show (vbox1);
1804 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1805 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1807 vbox2 = gtk_vbox_new (FALSE, 0);
1808 gtk_widget_show (vbox2);
1809 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1812 (vbox2, chkbtn_mbalnum,
1813 _("Display multi-byte alphanumeric as\n"
1814 "ASCII character (Japanese only)"));
1815 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1818 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1819 _("Display header pane above message view"));
1821 hbox1 = gtk_hbox_new (FALSE, 8);
1822 gtk_widget_show (hbox1);
1823 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1825 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1826 _("Display short headers on message view"));
1828 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1829 gtk_widget_show (button_edit_disphdr);
1830 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1832 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1833 G_CALLBACK (prefs_display_header_open),
1836 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1838 PACK_CHECK_BUTTON(vbox2, chkbtn_html,
1839 _("Render HTML messages as text"));
1841 PACK_CHECK_BUTTON(vbox2, chkbtn_cursor,
1842 _("Display cursor in message view"));
1844 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1846 hbox1 = gtk_hbox_new (FALSE, 32);
1847 gtk_widget_show (hbox1);
1848 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1850 hbox_linespc = gtk_hbox_new (FALSE, 8);
1851 gtk_widget_show (hbox1);
1852 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1854 label_linespc = gtk_label_new (_("Line space"));
1855 gtk_widget_show (label_linespc);
1856 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1859 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1860 spinbtn_linespc = gtk_spin_button_new
1861 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1862 gtk_widget_show (spinbtn_linespc);
1863 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1865 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1866 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1868 label_linespc = gtk_label_new (_("pixel(s)"));
1869 gtk_widget_show (label_linespc);
1870 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1873 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1875 vbox_scr = gtk_vbox_new (FALSE, 0);
1876 gtk_widget_show (vbox_scr);
1877 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1878 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1880 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1882 hbox1 = gtk_hbox_new (FALSE, 32);
1883 gtk_widget_show (hbox1);
1884 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1886 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1888 hbox_scr = gtk_hbox_new (FALSE, 8);
1889 gtk_widget_show (hbox_scr);
1890 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1892 label_scr = gtk_label_new (_("Step"));
1893 gtk_widget_show (label_scr);
1894 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1896 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1897 spinbtn_scrollstep = gtk_spin_button_new
1898 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1899 gtk_widget_show (spinbtn_scrollstep);
1900 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1902 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1903 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1906 label_scr = gtk_label_new (_("pixel(s)"));
1907 gtk_widget_show (label_scr);
1908 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1910 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1912 vbox3 = gtk_vbox_new (FALSE, 0);
1913 gtk_widget_show (vbox3);
1914 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1916 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1917 _("Show attachment descriptions (rather than names)"));
1919 message.chkbtn_mbalnum = chkbtn_mbalnum;
1920 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1921 message.chkbtn_disphdr = chkbtn_disphdr;
1922 message.chkbtn_html = chkbtn_html;
1923 message.chkbtn_cursor = chkbtn_cursor;
1924 message.spinbtn_linespc = spinbtn_linespc;
1926 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1927 message.spinbtn_scrollstep = spinbtn_scrollstep;
1928 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1929 message.chkbtn_halfpage = chkbtn_halfpage;
1931 message.chkbtn_attach_desc = chkbtn_attach_desc;
1934 static void prefs_interface_create(void)
1939 /* GtkWidget *checkbtn_emacs; */
1940 GtkWidget *checkbtn_always_show_msg;
1941 GtkWidget *checkbtn_openunread;
1942 GtkWidget *checkbtn_mark_as_read_on_newwin;
1943 GtkWidget *checkbtn_openinbox;
1944 GtkWidget *checkbtn_immedexec;
1945 GtkTooltips *immedexec_tooltip;
1949 GtkWidget *menuitem;
1951 GtkWidget *button_keybind;
1953 GtkWidget *hbox_nextunreadmsgdialog;
1954 GtkWidget *optmenu_nextunreadmsgdialog;
1956 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1957 gtk_widget_show (vbox1);
1958 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1959 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1961 vbox2 = gtk_vbox_new (FALSE, 0);
1962 gtk_widget_show (vbox2);
1963 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1965 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1966 _("Emulate the behavior of mouse operation of\n"
1967 "Emacs-based mailer"));
1968 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1969 GTK_JUSTIFY_LEFT); */
1972 (vbox2, checkbtn_always_show_msg,
1973 _("Always open messages in summary when selected"));
1976 (vbox2, checkbtn_openunread,
1977 _("Open first unread message when entering a folder"));
1980 (vbox2, checkbtn_mark_as_read_on_newwin,
1981 _("Only mark message as read when opened in new window"));
1984 (vbox2, checkbtn_openinbox,
1985 _("Go to inbox after receiving new mail"));
1987 vbox3 = gtk_vbox_new (FALSE, 0);
1988 gtk_widget_show (vbox3);
1989 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1991 immedexec_tooltip = gtk_tooltips_new();
1994 (vbox3, checkbtn_immedexec,
1995 _("Execute immediately when moving or deleting messages"));
1996 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1997 _("Messages will be marked until execution"
1998 " if this is turned off"),
2001 hbox1 = gtk_hbox_new (FALSE, 0);
2002 gtk_widget_show (hbox1);
2003 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
2005 /* Next Unread Message Dialog */
2006 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
2007 gtk_widget_show (hbox1);
2008 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
2010 label = gtk_label_new (_("Show no-unread-message dialog"));
2011 gtk_widget_show (label);
2012 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
2014 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
2015 gtk_widget_show (optmenu_nextunreadmsgdialog);
2016 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2018 menu = gtk_menu_new ();
2019 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2020 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2021 NEXTUNREADMSGDIALOG_ASSUME_YES);
2022 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2023 NEXTUNREADMSGDIALOG_ASSUME_NO);
2025 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2027 hbox1 = gtk_hbox_new (FALSE, 8);
2028 gtk_widget_show (hbox1);
2029 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2031 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2032 gtk_widget_show (button_keybind);
2033 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2034 g_signal_connect (G_OBJECT (button_keybind), "clicked",
2035 G_CALLBACK (prefs_keybind_select), NULL);
2037 /* interface.checkbtn_emacs = checkbtn_emacs; */
2038 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2039 interface.checkbtn_openunread = checkbtn_openunread;
2040 interface.checkbtn_mark_as_read_on_newwin
2041 = checkbtn_mark_as_read_on_newwin;
2042 interface.checkbtn_openinbox = checkbtn_openinbox;
2043 interface.checkbtn_immedexec = checkbtn_immedexec;
2044 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2047 static void prefs_other_create(void)
2052 GtkWidget *frame_addr;
2053 GtkWidget *vbox_addr;
2054 GtkWidget *checkbtn_addaddrbyclick;
2056 GtkWidget *frame_cliplog;
2057 GtkWidget *vbox_cliplog;
2058 GtkWidget *hbox_cliplog;
2059 GtkWidget *checkbtn_cliplog;
2060 GtkWidget *loglength_label;
2061 GtkWidget *loglength_entry;
2062 GtkTooltips *loglength_tooltip;
2064 GtkWidget *frame_exit;
2065 GtkWidget *vbox_exit;
2066 GtkWidget *checkbtn_confonexit;
2067 GtkWidget *checkbtn_cleanonexit;
2068 GtkWidget *checkbtn_askonclean;
2069 GtkWidget *checkbtn_warnqueued;
2071 GtkWidget *label_iotimeout;
2072 GtkWidget *spinbtn_iotimeout;
2073 GtkObject *spinbtn_iotimeout_adj;
2077 GtkWidget *frame_ssl;
2078 GtkWidget *vbox_ssl;
2079 GtkWidget *hbox_ssl;
2080 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2083 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2084 gtk_widget_show (vbox1);
2085 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2086 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2088 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2090 vbox_addr = gtk_vbox_new (FALSE, 0);
2091 gtk_widget_show (vbox_addr);
2092 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2093 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2096 (vbox_addr, checkbtn_addaddrbyclick,
2097 _("Add address to destination when double-clicked"));
2100 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2102 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2103 gtk_widget_show (vbox_cliplog);
2104 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2105 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2106 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2107 _("Clip the log size"));
2108 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2109 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2110 gtk_widget_show (hbox_cliplog);
2112 loglength_label = gtk_label_new (_("Log window length"));
2113 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2115 gtk_widget_show (GTK_WIDGET (loglength_label));
2117 loglength_tooltip = gtk_tooltips_new();
2119 loglength_entry = gtk_entry_new ();
2120 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2121 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2123 gtk_widget_show (GTK_WIDGET (loglength_entry));
2124 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2125 _("0 to stop logging in the log window"),
2127 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2132 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2134 vbox_ssl = gtk_vbox_new (FALSE, 0);
2135 gtk_widget_show (vbox_ssl);
2136 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2137 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2138 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2139 _("Ask before accepting SSL certificates"));
2140 hbox_ssl = gtk_hbox_new (FALSE, 3);
2141 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2142 gtk_widget_show (hbox_ssl);
2147 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2149 vbox_exit = gtk_vbox_new (FALSE, 0);
2150 gtk_widget_show (vbox_exit);
2151 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2152 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2154 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2155 _("Confirm on exit"));
2157 hbox1 = gtk_hbox_new (FALSE, 32);
2158 gtk_widget_show (hbox1);
2159 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2161 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2162 _("Empty trash on exit"));
2163 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2164 _("Ask before emptying"));
2165 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2167 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2168 _("Warn if there are queued messages"));
2170 hbox1 = gtk_hbox_new (FALSE, 8);
2171 gtk_widget_show (hbox1);
2172 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2174 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2175 gtk_widget_show (label_iotimeout);
2176 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2178 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2179 spinbtn_iotimeout = gtk_spin_button_new
2180 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2181 gtk_widget_show (spinbtn_iotimeout);
2182 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2184 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2185 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2187 label_iotimeout = gtk_label_new (_("seconds"));
2188 gtk_widget_show (label_iotimeout);
2189 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2191 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2193 other.checkbtn_cliplog = checkbtn_cliplog;
2194 other.loglength_entry = loglength_entry;
2196 other.checkbtn_confonexit = checkbtn_confonexit;
2197 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2198 other.checkbtn_askonclean = checkbtn_askonclean;
2199 other.checkbtn_warnqueued = checkbtn_warnqueued;
2201 other.spinbtn_iotimeout = spinbtn_iotimeout;
2202 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2206 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2211 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2213 GtkWidget *datefmt_sample = NULL;
2216 g_return_if_fail(widget != NULL);
2217 g_return_if_fail(*widget != NULL);
2218 g_return_if_fail(display.entry_datefmt != NULL);
2220 datefmt_sample = GTK_WIDGET(g_object_get_data
2221 (G_OBJECT(*widget), "datefmt_sample"));
2222 g_return_if_fail(datefmt_sample != NULL);
2224 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2225 g_free(prefs_common.date_format);
2226 prefs_common.date_format = text;
2227 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2229 gtk_widget_destroy(*widget);
2233 static void date_format_cancel_btn_clicked(GtkButton *button,
2236 g_return_if_fail(widget != NULL);
2237 g_return_if_fail(*widget != NULL);
2239 gtk_widget_destroy(*widget);
2243 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2246 if (event && event->keyval == GDK_Escape)
2247 date_format_cancel_btn_clicked(NULL, widget);
2251 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2252 GdkEventAny *event, GtkWidget **widget)
2254 g_return_val_if_fail(widget != NULL, FALSE);
2255 g_return_val_if_fail(*widget != NULL, FALSE);
2261 static void date_format_entry_on_change(GtkEditable *editable,
2265 struct tm *cal_time;
2269 cur_time = time(NULL);
2270 cal_time = localtime(&cur_time);
2272 text = gtk_editable_get_chars(editable, 0, -1);
2274 strftime(buffer, sizeof buffer, text, cal_time);
2277 text = conv_codeset_strdup(buffer,
2278 conv_get_locale_charset_str(),
2281 text = g_strdup(buffer);
2283 gtk_label_set_text(example, text);
2288 static void date_format_select_row(GtkTreeView *list_view,
2290 GtkTreeViewColumn *column,
2291 GtkWidget *date_format)
2295 const gchar *old_format;
2297 GtkWidget *datefmt_sample;
2299 GtkTreeModel *model;
2301 g_return_if_fail(date_format != NULL);
2303 /* only on double click */
2304 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2307 g_return_if_fail(datefmt_sample != NULL);
2309 model = gtk_tree_view_get_model(list_view);
2311 /* get format from list */
2312 if (!gtk_tree_model_get_iter(model, &iter, path))
2315 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
2317 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2318 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2320 /* insert the format into the text entry */
2321 new_format = g_malloc(strlen(old_format) + 3);
2323 strncpy(new_format, old_format, cur_pos);
2324 new_format[cur_pos] = '\0';
2325 strcat(new_format, format);
2326 strcat(new_format, &old_format[cur_pos]);
2328 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2329 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2334 static GtkWidget *date_format_create(GtkButton *button, void *data)
2336 static GtkWidget *datefmt_win = NULL;
2339 GtkWidget *scrolledwindow1;
2340 GtkWidget *datefmt_list_view;
2345 GtkWidget *confirm_area;
2347 GtkWidget *cancel_btn;
2348 GtkWidget *datefmt_entry;
2349 GtkListStore *store;
2378 const gint TIME_FORMAT_ELEMS =
2379 sizeof time_format / sizeof time_format[0];
2381 GtkCellRenderer *renderer;
2382 GtkTreeViewColumn *column;
2383 GtkTreeSelection *selection;
2385 time_format[0].txt = _("the full abbreviated weekday name");
2386 time_format[1].txt = _("the full weekday name");
2387 time_format[2].txt = _("the abbreviated month name");
2388 time_format[3].txt = _("the full month name");
2389 time_format[4].txt = _("the preferred date and time for the current locale");
2390 time_format[5].txt = _("the century number (year/100)");
2391 time_format[6].txt = _("the day of the month as a decimal number");
2392 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2393 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2394 time_format[9].txt = _("the day of the year as a decimal number");
2395 time_format[10].txt = _("the month as a decimal number");
2396 time_format[11].txt = _("the minute as a decimal number");
2397 time_format[12].txt = _("either AM or PM");
2398 time_format[13].txt = _("the second as a decimal number");
2399 time_format[14].txt = _("the day of the week as a decimal number");
2400 time_format[15].txt = _("the preferred date for the current locale");
2401 time_format[16].txt = _("the last two digits of a year");
2402 time_format[17].txt = _("the year as a decimal number");
2403 time_format[18].txt = _("the time zone or name or abbreviation");
2405 if (datefmt_win) return datefmt_win;
2407 store = gtk_list_store_new(N_DATEFMT_COLUMNS,
2412 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2415 gtk_list_store_append(store, &iter);
2416 gtk_list_store_set(store, &iter,
2417 DATEFMT_FMT, time_format[i].fmt,
2418 DATEFMT_TXT, time_format[i].txt,
2422 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2423 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2424 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2425 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2426 gtk_widget_set_size_request(datefmt_win, 440, 280);
2428 vbox1 = gtk_vbox_new(FALSE, 10);
2429 gtk_widget_show(vbox1);
2430 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2432 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2433 gtk_scrolled_window_set_policy
2434 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2435 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2436 gtk_widget_show(scrolledwindow1);
2437 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2439 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2440 g_object_unref(G_OBJECT(store));
2441 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(datefmt_list_view), TRUE);
2442 gtk_widget_show(datefmt_list_view);
2443 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view);
2445 renderer = gtk_cell_renderer_text_new();
2446 column = gtk_tree_view_column_new_with_attributes
2447 (_("Specifier"), renderer, "text", DATEFMT_FMT,
2449 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2451 renderer = gtk_cell_renderer_text_new();
2452 column = gtk_tree_view_column_new_with_attributes
2453 (_("Description"), renderer, "text", DATEFMT_TXT,
2455 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2457 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2458 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view));
2459 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
2461 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated",
2462 G_CALLBACK(date_format_select_row),
2465 table = gtk_table_new(2, 2, FALSE);
2466 gtk_widget_show(table);
2467 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2468 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2469 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2471 label1 = gtk_label_new(_("Date format"));
2472 gtk_widget_show(label1);
2473 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2475 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2476 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2478 datefmt_entry = gtk_entry_new();
2479 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2480 gtk_widget_show(datefmt_entry);
2481 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2482 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2484 /* we need the "sample" entry box; add it as data so callbacks can
2485 * get the entry box */
2486 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2489 label2 = gtk_label_new(_("Example"));
2490 gtk_widget_show(label2);
2491 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2493 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2494 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2496 label3 = gtk_label_new("");
2497 gtk_widget_show(label3);
2498 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2499 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2500 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2501 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2503 gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
2504 &cancel_btn, GTK_STOCK_CANCEL, NULL, NULL);
2506 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2507 gtk_widget_show(confirm_area);
2508 gtk_widget_grab_default(ok_btn);
2510 /* set the current format */
2511 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2512 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2515 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2516 G_CALLBACK(date_format_ok_btn_clicked),
2518 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2519 G_CALLBACK(date_format_cancel_btn_clicked),
2521 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2522 G_CALLBACK(date_format_key_pressed),
2524 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2525 G_CALLBACK(date_format_on_delete),
2527 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2528 G_CALLBACK(date_format_entry_on_change),
2531 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2532 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2534 gtk_widget_show(datefmt_win);
2535 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2537 gtk_widget_grab_focus(ok_btn);
2542 static void prefs_keybind_select(void)
2549 GtkWidget *confirm_area;
2551 GtkWidget *cancel_btn;
2553 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2554 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2555 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2556 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2557 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2558 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2559 manage_window_set_transient (GTK_WINDOW (window));
2561 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2562 gtk_container_add (GTK_CONTAINER (window), vbox1);
2563 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2565 hbox1 = gtk_hbox_new (FALSE, 8);
2566 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2568 label = gtk_label_new
2569 (_("Select preset:"));
2570 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2571 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2573 hbox1 = gtk_hbox_new (FALSE, 8);
2574 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2576 combo = gtk_combo_new ();
2577 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2578 gtkut_combo_set_items (GTK_COMBO (combo),
2584 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2586 hbox1 = gtk_hbox_new (FALSE, 8);
2587 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2589 label = gtk_label_new
2590 (_("You can also modify each menu shortcut by pressing\n"
2591 "any key(s) when placing the mouse pointer on the item."));
2592 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2593 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2595 hbox1 = gtk_hbox_new (FALSE, 8);
2596 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2598 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
2599 &cancel_btn, GTK_STOCK_CANCEL,
2601 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2602 gtk_widget_grab_default (ok_btn);
2604 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2605 g_signal_connect (G_OBJECT (window), "delete_event",
2606 G_CALLBACK (prefs_keybind_deleted), NULL);
2607 g_signal_connect (G_OBJECT (window), "key_press_event",
2608 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2609 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2610 G_CALLBACK (prefs_keybind_apply_clicked),
2612 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2613 G_CALLBACK (prefs_keybind_cancel),
2616 gtk_widget_show_all(window);
2618 keybind.window = window;
2619 keybind.combo = combo;
2622 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2625 if (event && event->keyval == GDK_Escape)
2626 prefs_keybind_cancel();
2630 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2633 prefs_keybind_cancel();
2637 static void prefs_keybind_cancel(void)
2639 gtk_widget_destroy(keybind.window);
2640 keybind.window = NULL;
2641 keybind.combo = NULL;
2645 const gchar *accel_path;
2646 const gchar *accel_key;
2649 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2653 GdkModifierType mods;
2655 for (i = 0; i < num; i++) {
2656 const gchar *accel_key
2657 = keybind[i].accel_key ? keybind[i].accel_key : "";
2658 gtk_accelerator_parse(accel_key, &key, &mods);
2659 gtk_accel_map_change_entry(keybind[i].accel_path,
2664 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2666 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2668 struct KeyBind *menurc;
2671 static struct KeyBind default_menurc[] = {
2672 {"<Main>/File/Empty all Trash folders", ""},
2673 {"<Main>/File/Save as...", "<control>S"},
2674 {"<Main>/File/Print...", ""},
2675 {"<Main>/File/Exit", "<control>Q"},
2677 {"<Main>/Edit/Copy", "<control>C"},
2678 {"<Main>/Edit/Select all", "<control>A"},
2679 {"<Main>/Edit/Find in current message...", "<control>F"},
2680 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2682 {"<Main>/View/Show or hide/Message View", "V"},
2683 {"<Main>/View/Thread view", "<control>T"},
2684 {"<Main>/View/Go to/Prev message", "P"},
2685 {"<Main>/View/Go to/Next message", "N"},
2686 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2687 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2688 {"<Main>/View/Go to/Other folder...", "G"},
2689 {"<Main>/View/Open in new window", "<control><alt>N"},
2690 {"<Main>/View/Message source", "<control>U"},
2691 {"<Main>/View/Show all headers", "<control>H"},
2692 {"<Main>/View/Update summary", "<control><alt>U"},
2694 {"<Main>/Message/Receive/Get from current account",
2696 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2697 {"<Main>/Message/Compose an email message", "<control>M"},
2698 {"<Main>/Message/Reply", "<control>R"},
2699 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2700 {"<Main>/Message/Reply to/sender", ""},
2701 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2702 {"<Main>/Message/Forward", "<control><alt>F"},
2703 /* {"<Main>/Message/Forward as attachment", ""}, */
2704 {"<Main>/Message/Move...", "<control>O"},
2705 {"<Main>/Message/Copy...", "<shift><control>O"},
2706 {"<Main>/Message/Delete", "<control>D"},
2707 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2708 {"<Main>/Message/Mark/Unmark", "U"},
2709 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2710 {"<Main>/Message/Mark/Mark as read", ""},
2712 {"<Main>/Tools/Address book", "<shift><control>A"},
2713 {"<Main>/Tools/Execute", "X"},
2714 {"<Main>/Tools/Log window", "<shift><control>L"},
2716 {"<Compose>/Message/Close", "<control>W"},
2717 {"<Compose>/Edit/Select all", "<control>A"},
2718 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2719 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2720 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2721 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2722 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2725 static struct KeyBind mew_wl_menurc[] = {
2726 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2727 {"<Main>/File/Save as...", "Y"},
2728 {"<Main>/File/Print...", "<shift>numbersign"},
2729 {"<Main>/File/Exit", "<shift>Q"},
2731 {"<Main>/Edit/Copy", "<control>C"},
2732 {"<Main>/Edit/Select all", "<control>A"},
2733 {"<Main>/Edit/Find in current message...", "<control>F"},
2734 {"<Main>/Edit/Search folder...", "<control>S"},
2736 {"<Main>/View/Show or hide/Message View", ""},
2737 {"<Main>/View/Thread view", "<shift>T"},
2738 {"<Main>/View/Go to/Prev message", "P"},
2739 {"<Main>/View/Go to/Next message", "N"},
2740 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2741 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2742 {"<Main>/View/Go to/Other folder...", "G"},
2743 {"<Main>/View/Open in new window", "<control><alt>N"},
2744 {"<Main>/View/Message source", "<control>U"},
2745 {"<Main>/View/Show all headers", "<shift>H"},
2746 {"<Main>/View/Update summary", "<shift>S"},
2748 {"<Main>/Message/Receive/Get from current account",
2750 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2751 {"<Main>/Message/Compose an email message", "W"},
2752 {"<Main>/Message/Reply", "<control>R"},
2753 {"<Main>/Message/Reply to/all", "<shift>A"},
2754 {"<Main>/Message/Reply to/sender", ""},
2755 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2756 {"<Main>/Message/Forward", "F"},
2757 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2758 {"<Main>/Message/Move...", "O"},
2759 {"<Main>/Message/Copy...", "<shift>O"},
2760 {"<Main>/Message/Delete", "D"},
2761 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2762 {"<Main>/Message/Mark/Unmark", "U"},
2763 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2764 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2766 {"<Main>/Tools/Address book", "<shift><control>A"},
2767 {"<Main>/Tools/Execute", "X"},
2768 {"<Main>/Tools/Log window", "<shift><control>L"},
2770 {"<Compose>/Message/Close", "<alt>W"},
2771 {"<Compose>/Edit/Select all", ""},
2772 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2773 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2774 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2775 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2776 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2779 static struct KeyBind mutt_menurc[] = {
2780 {"<Main>/File/Empty all Trash folders", ""},
2781 {"<Main>/File/Save as...", "S"},
2782 {"<Main>/File/Print...", "P"},
2783 {"<Main>/File/Exit", "Q"},
2785 {"<Main>/Edit/Copy", "<control>C"},
2786 {"<Main>/Edit/Select all", "<control>A"},
2787 {"<Main>/Edit/Find in current message...", "<control>F"},
2788 {"<Main>/Edit/Search messages...", "slash"},
2790 {"<Main>/View/Show or hide/Message view", "V"},
2791 {"<Main>/View/Thread view", "<control>T"},
2792 {"<Main>/View/Go to/Prev message", ""},
2793 {"<Main>/View/Go to/Next message", ""},
2794 {"<Main>/View/Go to/Prev unread message", ""},
2795 {"<Main>/View/Go to/Next unread message", ""},
2796 {"<Main>/View/Go to/Other folder...", "C"},
2797 {"<Main>/View/Open in new window", "<control><alt>N"},
2798 {"<Main>/View/Message source", "<control>U"},
2799 {"<Main>/View/Show all headers", "<control>H"},
2800 {"<Main>/View/Update summary", "<control><alt>U"},
2802 {"<Main>/Message/Receive/Get from current account",
2804 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2805 {"<Main>/Message/Compose an email message", "M"},
2806 {"<Main>/Message/Reply", "R"},
2807 {"<Main>/Message/Reply to/all", "G"},
2808 {"<Main>/Message/Reply to/sender", ""},
2809 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2810 {"<Main>/Message/Forward", "F"},
2811 {"<Main>/Message/Forward as attachment", ""},
2812 {"<Main>/Message/Move...", "<control>O"},
2813 {"<Main>/Message/Copy...", "<shift>C"},
2814 {"<Main>/Message/Delete", "D"},
2815 {"<Main>/Message/Mark/Mark", "<shift>F"},
2816 {"<Main>/Message/Mark/Unmark", "U"},
2817 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2818 {"<Main>/Message/Mark/Mark as read", ""},
2820 {"<Main>/Tools/Address book", "<shift><control>A"},
2821 {"<Main>/Tools/Execute", "X"},
2822 {"<Main>/Tools/Log window", "<shift><control>L"},
2824 {"<Compose>/Message/Close", "<alt>W"},
2825 {"<Compose>/Edit/Select all", ""},
2826 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2827 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2828 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2829 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2830 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2833 static struct KeyBind old_sylpheed_menurc[] = {
2834 {"<Main>/File/Empty all Trash folders", ""},
2835 {"<Main>/File/Save as...", ""},
2836 {"<Main>/File/Print...", "<alt>P"},
2837 {"<Main>/File/Exit", "<alt>Q"},
2839 {"<Main>/Edit/Copy", "<control>C"},
2840 {"<Main>/Edit/Select all", "<control>A"},
2841 {"<Main>/Edit/Find in current message...", "<control>F"},
2842 {"<Main>/Edit/Search folder...", "<control>S"},
2844 {"<Main>/View/Show or hide/Message View", ""},
2845 {"<Main>/View/Thread view", "<control>T"},
2846 {"<Main>/View/Go to/Prev message", "P"},
2847 {"<Main>/View/Go to/Next message", "N"},
2848 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2849 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2850 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2851 {"<Main>/View/Open in new window", "<shift><control>N"},
2852 {"<Main>/View/Message source", "<control>U"},
2853 {"<Main>/View/Show all headers", "<control>H"},
2854 {"<Main>/View/Update summary", "<alt>U"},
2856 {"<Main>/Message/Receive/Get from current account",
2858 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2859 {"<Main>/Message/Compose an email message", "<alt>N"},
2860 {"<Main>/Message/Reply", "<alt>R"},
2861 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2862 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2863 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2864 {"<Main>/Message/Forward", "<shift><alt>F"},
2865 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2866 {"<Main>/Message/Move...", "<alt>O"},
2867 {"<Main>/Message/Copy...", ""},
2868 {"<Main>/Message/Delete", "<alt>D"},
2869 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2870 {"<Main>/Message/Mark/Unmark", "U"},
2871 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2872 {"<Main>/Message/Mark/Mark as read", ""},
2874 {"<Main>/Tools/Address book", "<alt>A"},
2875 {"<Main>/Tools/Execute", "<alt>X"},
2876 {"<Main>/Tools/Log window", "<alt>L"},
2878 {"<Compose>/Message/Close", "<alt>W"},
2879 {"<Compose>/Edit/Select all", ""},
2880 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2881 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2882 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2883 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2884 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2887 text = gtk_entry_get_text(entry);
2889 if (!strcmp(text, _("Default"))) {
2890 menurc = default_menurc;
2891 n_menurc = G_N_ELEMENTS(default_menurc);
2892 } else if (!strcmp(text, "Mew / Wanderlust")) {
2893 menurc = mew_wl_menurc;
2894 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2895 } else if (!strcmp(text, "Mutt")) {
2896 menurc = mutt_menurc;
2897 n_menurc = G_N_ELEMENTS(mutt_menurc);
2898 } else if (!strcmp(text, _("Old Sylpheed"))) {
2899 menurc = old_sylpheed_menurc;
2900 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2905 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2906 prefs_keybind_apply(menurc, n_menurc);
2908 gtk_widget_destroy(keybind.window);
2909 keybind.window = NULL;
2910 keybind.combo = NULL;
2913 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2916 GtkWidget *menuitem;
2919 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2920 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2921 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2922 g_free(*((gchar **)pparam->data));
2923 *((gchar **)pparam->data) = g_strdup(charset);
2926 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2928 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2931 g_return_if_fail(optmenu != NULL);
2932 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2934 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2935 (GCompareFunc)strcmp2);
2937 gtk_option_menu_set_history(optmenu, index);
2939 gtk_option_menu_set_history(optmenu, 0);
2940 prefs_common_charset_set_data_from_optmenu(pparam);
2944 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2947 GtkWidget *menuitem;
2949 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2950 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2951 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2952 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2955 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2957 TransferEncodingMethod method =
2958 *((TransferEncodingMethod *)pparam->data);
2959 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2962 g_return_if_fail(optmenu != NULL);
2964 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2967 gtk_option_menu_set_history(optmenu, index);
2969 gtk_option_menu_set_history(optmenu, 0);
2970 prefs_common_encoding_set_data_from_optmenu(pparam);
2974 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2977 GtkWidget *menuitem;
2979 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2980 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2981 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2982 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2985 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2987 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2988 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2990 GtkWidget *menuitem;
2993 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2996 gtk_option_menu_set_history(optmenu, index);
2998 gtk_option_menu_set_history(optmenu, 0);
2999 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
3002 menu = gtk_option_menu_get_menu(optmenu);
3003 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3004 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3007 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
3010 GtkWidget *menuitem;
3012 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3013 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3014 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
3015 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3018 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
3020 SendDialogMode mode = *((SendDialogMode *)pparam->data);
3021 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3023 GtkWidget *menuitem;
3026 case SEND_DIALOG_ALWAYS:
3027 gtk_option_menu_set_history(optmenu, 0);
3029 case SEND_DIALOG_NEVER:
3030 gtk_option_menu_set_history(optmenu, 1);
3036 menu = gtk_option_menu_get_menu(optmenu);
3037 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3038 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3041 static void prefs_common_apply(void)
3043 MainWindow *mainwindow;
3045 prefs_set_data_from_dialog(param);
3046 sock_set_io_timeout(prefs_common.io_timeout_secs);
3047 main_window_reflect_prefs_all_real(FALSE);
3048 prefs_common_write_config();
3050 mainwindow = mainwindow_get_mainwindow();
3051 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3052 prefs_common.loglength);
3054 inc_autocheck_timer_remove();
3055 inc_autocheck_timer_set();
3058 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3061 GtkWidget *menuitem;
3063 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3064 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3065 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3066 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3069 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3071 NextUnreadMsgDialogShow dialog_show;
3072 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3074 GtkWidget *menuitem;
3076 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3078 switch (dialog_show) {
3079 case NEXTUNREADMSGDIALOG_ALWAYS:
3080 gtk_option_menu_set_history(optmenu, 0);
3082 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3083 gtk_option_menu_set_history(optmenu, 1);
3085 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3086 gtk_option_menu_set_history(optmenu, 2);
3090 menu = gtk_option_menu_get_menu(optmenu);
3091 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3092 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3096 static void prefs_common_cancel(void)
3098 gtk_widget_hide(dialog.window);
3103 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3106 GtkWidget *menuitem;
3108 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3109 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3110 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3111 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3114 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3116 RecvDialogShow dialog_show;
3117 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3119 GtkWidget *menuitem;
3121 dialog_show = *((RecvDialogShow *)pparam->data);
3123 switch (dialog_show) {
3124 case RECVDIALOG_ALWAYS:
3125 gtk_option_menu_set_history(optmenu, 0);
3127 case RECVDIALOG_WINDOW_ACTIVE:
3128 gtk_option_menu_set_history(optmenu, 1);
3130 case RECVDIALOG_NEVER:
3131 gtk_option_menu_set_history(optmenu, 2);
3136 menu = gtk_option_menu_get_menu(optmenu);
3137 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3138 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));