2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2005 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.h>
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "mainwindow.h"
44 #include "summaryview.h"
45 #include "messageview.h"
46 #include "manage_window.h"
52 #include "alertpanel.h"
56 #include "folderview.h"
57 #include "stock_pixmap.h"
58 #include "quote_fmt.h"
59 #include "prefswindow.h"
67 PrefsCommon prefs_common;
71 static struct Receive {
72 GtkWidget *checkbtn_incext;
73 GtkWidget *entry_incext;
74 GtkWidget *button_incext;
76 GtkWidget *checkbtn_autochk;
77 GtkWidget *spinbtn_autochk;
78 GtkObject *spinbtn_autochk_adj;
80 GtkWidget *checkbtn_chkonstartup;
81 GtkWidget *checkbtn_scan_after_inc;
84 GtkWidget *checkbtn_newmail_auto;
85 GtkWidget *checkbtn_newmail_manu;
86 GtkWidget *entry_newmail_notify_cmd;
87 GtkWidget *hbox_newmail_notify;
88 GtkWidget *optmenu_recvdialog;
89 GtkWidget *checkbtn_no_recv_err_panel;
90 GtkWidget *checkbtn_close_recv_dialog;
94 GtkWidget *checkbtn_savemsg;
95 GtkWidget *optmenu_senddialog;
97 GtkWidget *optmenu_charset;
98 GtkWidget *optmenu_encoding_method;
101 static struct Compose {
102 GtkWidget *entry_fw_quotemark;
103 GtkWidget *text_fw_quotefmt;
105 GtkWidget *checkbtn_autoextedit;
106 GtkWidget *spinbtn_undolevel;
107 GtkObject *spinbtn_undolevel_adj;
109 GtkWidget *checkbtn_reply_account_autosel;
110 GtkWidget *checkbtn_forward_account_autosel;
111 GtkWidget *checkbtn_reedit_account_autosel;
112 GtkWidget *checkbtn_quote;
113 GtkWidget *checkbtn_default_reply_list;
114 GtkWidget *checkbtn_forward_as_attachment;
115 GtkWidget *checkbtn_redirect_keep_from;
116 GtkWidget *checkbtn_reply_with_quote;
118 GtkWidget *checkbtn_autosave;
119 GtkWidget *entry_autosave_length;
122 static struct Quote {
123 GtkWidget *entry_quotemark;
124 GtkWidget *text_quotefmt;
126 GtkWidget *entry_fw_quotemark;
127 GtkWidget *text_fw_quotefmt;
129 GtkWidget *entry_quote_chars;
132 static struct Display {
133 GtkWidget *chkbtn_folder_unread;
134 GtkWidget *entry_ng_abbrev_len;
135 GtkWidget *spinbtn_ng_abbrev_len;
136 GtkObject *spinbtn_ng_abbrev_len_adj;
138 GtkWidget *chkbtn_transhdr;
140 GtkWidget *chkbtn_swapfrom;
141 GtkWidget *chkbtn_useaddrbook;
142 GtkWidget *chkbtn_threadsubj;
143 GtkWidget *entry_datefmt;
146 static struct Message {
147 GtkWidget *chkbtn_mbalnum;
148 GtkWidget *chkbtn_disphdrpane;
149 GtkWidget *chkbtn_disphdr;
150 GtkWidget *chkbtn_html;
151 GtkWidget *spinbtn_linespc;
152 GtkObject *spinbtn_linespc_adj;
154 GtkWidget *chkbtn_smoothscroll;
155 GtkWidget *spinbtn_scrollstep;
156 GtkObject *spinbtn_scrollstep_adj;
157 GtkWidget *chkbtn_halfpage;
159 GtkWidget *chkbtn_attach_desc;
162 static struct Interface {
163 /* GtkWidget *checkbtn_emacs; */
164 GtkWidget *checkbtn_always_show_msg;
165 GtkWidget *checkbtn_openunread;
166 GtkWidget *checkbtn_mark_as_read_on_newwin;
167 GtkWidget *checkbtn_openinbox;
168 GtkWidget *checkbtn_immedexec;
169 GtkWidget *optmenu_nextunreadmsgdialog;
172 static struct Other {
173 GtkWidget *checkbtn_addaddrbyclick;
174 GtkWidget *checkbtn_confonexit;
175 GtkWidget *checkbtn_cleanonexit;
176 GtkWidget *checkbtn_askonclean;
177 GtkWidget *checkbtn_warnqueued;
178 GtkWidget *checkbtn_cliplog;
179 GtkWidget *loglength_entry;
182 GtkWidget *checkbtn_ssl_ask_unknown_valid;
186 GtkWidget *spinbtn_iotimeout;
187 GtkObject *spinbtn_iotimeout_adj;
190 static struct KeybindDialog {
195 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
196 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
197 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
198 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
199 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
200 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
201 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
203 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
204 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
205 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
206 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
207 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
208 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
211 parameter name, default value, pointer to the prefs variable, data type,
212 pointer to the widget pointer,
213 pointer to the function for data setting,
214 pointer to the function for widget setting
217 static PrefParam param[] = {
219 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
220 &receive.checkbtn_incext,
221 prefs_set_data_from_toggle, prefs_set_toggle},
222 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
223 &receive.entry_incext,
224 prefs_set_data_from_entry, prefs_set_entry},
226 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
227 &receive.checkbtn_autochk,
228 prefs_set_data_from_toggle, prefs_set_toggle},
229 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
230 &receive.spinbtn_autochk,
231 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
232 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
233 &receive.checkbtn_chkonstartup,
234 prefs_set_data_from_toggle, prefs_set_toggle},
235 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
236 P_BOOL, &receive.checkbtn_scan_after_inc,
237 prefs_set_data_from_toggle, prefs_set_toggle},
238 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
239 P_BOOL, &receive.checkbtn_newmail_manu,
240 prefs_set_data_from_toggle, prefs_set_toggle},
241 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
242 P_BOOL, &receive.checkbtn_newmail_auto,
243 prefs_set_data_from_toggle, prefs_set_toggle},
244 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
245 &receive.entry_newmail_notify_cmd,
246 prefs_set_data_from_entry, prefs_set_entry},
247 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
248 &receive.optmenu_recvdialog,
249 prefs_common_recv_dialog_set_data_from_optmenu,
250 prefs_common_recv_dialog_set_optmenu},
251 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
252 P_BOOL, &receive.checkbtn_no_recv_err_panel,
253 prefs_set_data_from_toggle, prefs_set_toggle},
254 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
255 P_BOOL, &receive.checkbtn_close_recv_dialog,
256 prefs_set_data_from_toggle, prefs_set_toggle},
259 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
260 &p_send.checkbtn_savemsg,
261 prefs_set_data_from_toggle, prefs_set_toggle},
262 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
263 &p_send.optmenu_senddialog,
264 prefs_common_send_dialog_set_data_from_optmenu,
265 prefs_common_send_dialog_set_optmenu},
267 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
268 &p_send.optmenu_charset,
269 prefs_common_charset_set_data_from_optmenu,
270 prefs_common_charset_set_optmenu},
271 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
272 &p_send.optmenu_encoding_method,
273 prefs_common_encoding_set_data_from_optmenu,
274 prefs_common_encoding_set_optmenu},
276 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
277 P_BOOL, NULL, NULL, NULL},
280 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
281 &compose.checkbtn_autoextedit,
282 prefs_set_data_from_toggle, prefs_set_toggle},
283 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
284 P_BOOL, &compose.checkbtn_forward_as_attachment,
285 prefs_set_data_from_toggle, prefs_set_toggle},
286 {"redirect_keep_from", "FALSE",
287 &prefs_common.redirect_keep_from, P_BOOL,
288 &compose.checkbtn_redirect_keep_from,
289 prefs_set_data_from_toggle, prefs_set_toggle},
290 {"undo_level", "50", &prefs_common.undolevels, P_INT,
291 &compose.spinbtn_undolevel,
292 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
294 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
296 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
298 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
300 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
302 {"autosave", "FALSE", &prefs_common.autosave,
303 P_BOOL, &compose.checkbtn_autosave,
304 prefs_set_data_from_toggle, prefs_set_toggle},
305 {"autosave_length", "50", &prefs_common.autosave_length,
306 P_INT, &compose.entry_autosave_length,
307 prefs_set_data_from_entry, prefs_set_entry},
309 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
311 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
313 {"dictionary", "", &prefs_common.dictionary, P_STRING,
315 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
317 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
319 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
321 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
324 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
325 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
327 /* Account autoselection */
328 {"reply_account_autoselect", "TRUE",
329 &prefs_common.reply_account_autosel, P_BOOL,
330 &compose.checkbtn_reply_account_autosel,
331 prefs_set_data_from_toggle, prefs_set_toggle},
332 {"forward_account_autoselect", "TRUE",
333 &prefs_common.forward_account_autosel, P_BOOL,
334 &compose.checkbtn_forward_account_autosel,
335 prefs_set_data_from_toggle, prefs_set_toggle},
336 {"reedit_account_autoselect", "TRUE",
337 &prefs_common.reedit_account_autosel, P_BOOL,
338 &compose.checkbtn_reedit_account_autosel,
339 prefs_set_data_from_toggle, prefs_set_toggle},
341 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
342 &compose.checkbtn_default_reply_list,
343 prefs_set_data_from_toggle, prefs_set_toggle},
345 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
349 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
350 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
351 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
352 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
353 prefs_set_data_from_text, prefs_set_text},
355 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
356 "e.entry_fw_quotemark,
357 prefs_set_data_from_entry, prefs_set_entry},
358 {"forward_quote_format",
359 "\\n\\nBegin forwarded message:\\n\\n"
360 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
361 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
362 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
363 prefs_set_data_from_text, prefs_set_text},
364 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
365 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
368 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
369 {"widget_font", NULL,
370 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
371 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
372 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
373 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
374 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
375 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
376 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
377 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
378 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
381 {"widget_font_gtk2", NULL,
382 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
383 {"message_font_gtk2", "Monospace 9",
384 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
385 {"small_font_gtk2", "Sans 9",
386 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
387 {"bold_font_gtk2", "Sans Bold 9",
388 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
389 {"normal_font_gtk2", "Sans 9",
390 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
393 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
395 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
397 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
400 {"display_folder_unread_num", "TRUE",
401 &prefs_common.display_folder_unread, P_BOOL,
402 &display.chkbtn_folder_unread,
403 prefs_set_data_from_toggle, prefs_set_toggle},
404 {"newsgroup_abbrev_len", "16",
405 &prefs_common.ng_abbrev_len, P_INT,
406 &display.spinbtn_ng_abbrev_len,
407 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
409 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
410 &display.chkbtn_transhdr,
411 prefs_set_data_from_toggle, prefs_set_toggle},
413 /* Display: Summary View */
414 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
415 &display.chkbtn_swapfrom,
416 prefs_set_data_from_toggle, prefs_set_toggle},
417 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
418 &display.chkbtn_useaddrbook,
419 prefs_set_data_from_toggle, prefs_set_toggle},
420 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
421 &display.chkbtn_threadsubj,
422 prefs_set_data_from_toggle, prefs_set_toggle},
423 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
424 P_STRING, &display.entry_datefmt,
425 prefs_set_data_from_entry, prefs_set_entry},
427 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
429 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
431 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
432 P_INT, NULL, NULL, NULL },
434 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
436 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
438 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
440 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
443 {"folderview_vscrollbar_policy", "0",
444 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
447 {"summary_col_show_mark", "TRUE",
448 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
449 {"summary_col_show_unread", "TRUE",
450 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_show_mime", "TRUE",
452 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_show_subject", "TRUE",
454 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
455 {"summary_col_show_from", "TRUE",
456 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
457 {"summary_col_show_date", "TRUE",
458 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_show_size", "TRUE",
460 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_show_number", "FALSE",
462 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_show_score", "FALSE",
464 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_show_locked", "FALSE",
466 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_pos_mark", "0",
469 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
470 {"summary_col_pos_unread", "1",
471 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
472 {"summary_col_pos_mime", "2",
473 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
474 {"summary_col_pos_subject", "3",
475 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_from", "4",
477 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
478 {"summary_col_pos_date", "5",
479 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
480 {"summary_col_pos_size", "6",
481 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
482 {"summary_col_pos_number", "7",
483 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
484 {"summary_col_pos_score", "8",
485 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
486 {"summary_col_pos_locked", "9",
487 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
489 {"summary_col_size_mark", "10",
490 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_unread", "13",
492 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_mime", "10",
494 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_subject", "200",
496 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_from", "120",
498 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_date", "118",
500 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_size", "45",
502 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_number", "40",
504 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_score", "40",
506 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_locked", "13",
508 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
511 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
513 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
515 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
517 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
519 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
522 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
524 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
526 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
528 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
531 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
533 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
536 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
538 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
540 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
542 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
544 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
547 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
549 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
551 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
553 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
555 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
557 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
559 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
561 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
563 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
565 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
567 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
569 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
571 {"compose_width", "600", &prefs_common.compose_width, P_INT,
573 {"compose_height", "560", &prefs_common.compose_height, P_INT,
575 {"compose_x", "0", &prefs_common.compose_x, P_INT,
577 {"compose_y", "0", &prefs_common.compose_y, P_INT,
580 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
583 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
585 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
587 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
589 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
591 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
593 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
595 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
596 P_BOOL, NULL, NULL, NULL},
598 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
599 &message.chkbtn_mbalnum,
600 prefs_set_data_from_toggle, prefs_set_toggle},
601 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
602 P_BOOL, &message.chkbtn_disphdrpane,
603 prefs_set_data_from_toggle, prefs_set_toggle},
604 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
605 &message.chkbtn_disphdr,
606 prefs_set_data_from_toggle, prefs_set_toggle},
607 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
608 &message.chkbtn_html,
609 prefs_set_data_from_toggle, prefs_set_toggle},
610 {"line_space", "2", &prefs_common.line_space, P_INT,
611 &message.spinbtn_linespc,
612 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
614 {"enable_smooth_scroll", "FALSE",
615 &prefs_common.enable_smooth_scroll, P_BOOL,
616 &message.chkbtn_smoothscroll,
617 prefs_set_data_from_toggle, prefs_set_toggle},
618 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
619 &message.spinbtn_scrollstep,
620 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
621 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
622 &message.chkbtn_halfpage,
623 prefs_set_data_from_toggle, prefs_set_toggle},
625 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
628 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
629 &message.chkbtn_attach_desc,
630 prefs_set_data_from_toggle, prefs_set_toggle},
631 {"attach_save_directory", NULL,
632 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
635 {"mime_image_viewer", "display '%s'",
636 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
637 {"mime_audio_player", "play '%s'",
638 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
639 {"mime_open_command", "gedit '%s'",
640 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
643 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
645 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
648 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
649 NULL, NULL, NULL}, */
650 {"always_show_message_when_selected", "FALSE",
651 &prefs_common.always_show_msg,
652 P_BOOL, &interface.checkbtn_always_show_msg,
653 prefs_set_data_from_toggle, prefs_set_toggle},
654 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
655 P_BOOL, &interface.checkbtn_openunread,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 {"mark_as_read_on_new_window", "FALSE",
658 &prefs_common.mark_as_read_on_new_window,
659 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
660 prefs_set_data_from_toggle, prefs_set_toggle},
661 {"mark_as_read_delay", "0",
662 &prefs_common.mark_as_read_delay, P_INT,
664 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
665 P_BOOL, &interface.checkbtn_openinbox,
666 prefs_set_data_from_toggle, prefs_set_toggle},
667 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
668 &interface.checkbtn_immedexec,
669 prefs_set_data_from_toggle, prefs_set_toggle},
670 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
671 &interface.optmenu_nextunreadmsgdialog,
672 prefs_nextunreadmsgdialog_set_data_from_optmenu,
673 prefs_nextunreadmsgdialog_set_optmenu},
675 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
676 &prefs_common.pixmap_theme_path, P_STRING,
679 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
683 {"uri_open_command", DEFAULT_BROWSER_CMD,
684 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
685 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
687 {"ext_editor_command", "gedit %s",
688 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
690 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
691 P_BOOL, &other.checkbtn_addaddrbyclick,
692 prefs_set_data_from_toggle, prefs_set_toggle},
694 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
695 &other.checkbtn_confonexit,
696 prefs_set_data_from_toggle, prefs_set_toggle},
697 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
698 &other.checkbtn_cleanonexit,
699 prefs_set_data_from_toggle, prefs_set_toggle},
700 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
701 &other.checkbtn_askonclean,
702 prefs_set_data_from_toggle, prefs_set_toggle},
703 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
704 P_BOOL, &other.checkbtn_warnqueued,
705 prefs_set_data_from_toggle, prefs_set_toggle},
708 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
709 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
710 prefs_set_data_from_toggle, prefs_set_toggle},
713 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
715 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
717 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
719 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
722 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
723 P_INT, &other.spinbtn_iotimeout,
724 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
725 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
727 {"important_score", "1", &prefs_common.important_score, P_INT,
729 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
730 &other.checkbtn_cliplog,
731 prefs_set_data_from_toggle, prefs_set_toggle},
732 {"log_length", "500", &prefs_common.loglength, P_INT,
733 &other.loglength_entry,
734 prefs_set_data_from_entry, prefs_set_entry},
736 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
738 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
741 {"color_new", "179", &prefs_common.color_new, P_COLOR,
744 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
747 /* widget creating functions */
748 static void prefs_common_create (void);
749 static void prefs_receive_create (void);
750 static void prefs_send_create (void);
751 static void prefs_compose_create (void);
752 static void prefs_quote_create (void);
753 static void prefs_display_create (void);
754 static void prefs_message_create (void);
755 static void prefs_interface_create (void);
756 static void prefs_other_create (void);
758 static void date_format_ok_btn_clicked (GtkButton *button,
760 static void date_format_cancel_btn_clicked (GtkButton *button,
762 static gboolean date_format_key_pressed (GtkWidget *keywidget,
765 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
768 static void date_format_entry_on_change (GtkEditable *editable,
770 static void date_format_select_row (GtkTreeView *list_view,
772 GtkTreeViewColumn *column,
773 GtkWidget *date_format);
774 static GtkWidget *date_format_create (GtkButton *button,
777 static void prefs_keybind_select (void);
778 static gint prefs_keybind_deleted (GtkWidget *widget,
781 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
784 static void prefs_keybind_cancel (void);
785 static void prefs_keybind_apply_clicked (GtkWidget *widget);
787 static void prefs_common_apply (void);
789 typedef struct CommonPage
796 static CommonPage common_page;
798 static void create_widget_func(PrefsPage * _page,
802 CommonPage *page = (CommonPage *) _page;
805 vbox = gtk_vbox_new(FALSE, 6);
806 gtk_widget_show(vbox);
808 if (notebook == NULL)
809 prefs_common_create();
810 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
811 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
813 prefs_set_dialog(param);
817 page->page.widget = vbox;
820 static void destroy_widget_func(PrefsPage *_page)
822 CommonPage *page = (CommonPage *) _page;
824 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
827 static void save_func(PrefsPage * _page)
829 prefs_common_apply();
832 void prefs_common_init(void)
834 static gchar *path[2];
836 prefs_common.disphdr_list = NULL;
838 path[0] = _("Common");
841 common_page.page.path = path;
842 common_page.page.weight = 1000.0;
843 common_page.page.create_widget = create_widget_func;
844 common_page.page.destroy_widget = destroy_widget_func;
845 common_page.page.save_page = save_func;
847 prefs_gtk_register_page((PrefsPage *) &common_page);
850 PrefsCommon *prefs_common_get(void)
852 return &prefs_common;
856 * Read history list from the specified history file
858 GList *prefs_common_read_history(const gchar *history)
862 gchar buf[PREFSBUFSIZE];
865 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
867 if ((fp = fopen(path, "rb")) == NULL) {
868 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
873 while (fgets(buf, sizeof(buf), fp) != NULL) {
875 if (buf[0] == '\0') continue;
876 tmp = add_history(tmp, buf);
880 tmp = g_list_reverse(tmp);
885 void prefs_common_read_config(void)
889 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
890 prefs_read_config(param, "Common", rcpath, NULL);
893 prefs_common.mime_open_cmd_history =
894 prefs_common_read_history(COMMAND_HISTORY);
895 prefs_common.summary_quicksearch_history =
896 prefs_common_read_history(QUICKSEARCH_HISTORY);
900 * Save history list to the specified history file
902 void prefs_common_save_history(const gchar *history, GList *list)
908 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
910 if ((fp = fopen(path, "wb")) == NULL) {
911 FILE_OP_ERROR(path, "fopen");
916 for (cur = list; cur != NULL; cur = cur->next) {
917 fputs((gchar *)cur->data, fp);
925 void prefs_common_write_config(void)
927 prefs_write_config(param, "Common", COMMON_RC);
929 prefs_common_save_history(COMMAND_HISTORY,
930 prefs_common.mime_open_cmd_history);
931 prefs_common_save_history(QUICKSEARCH_HISTORY,
932 prefs_common.summary_quicksearch_history);
935 static void prefs_common_create(void)
939 debug_print("Creating common preferences window...\n");
941 notebook = gtk_notebook_new ();
942 gtk_widget_show(notebook);
943 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
944 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
945 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
947 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
949 gtk_widget_ref(notebook);
951 /* create all widgets on notebook */
952 prefs_receive_create();
953 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
955 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
956 prefs_compose_create();
957 SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
958 prefs_quote_create();
959 SET_NOTEBOOK_LABEL(notebook, _("Quote"), page++);
960 prefs_display_create();
961 SET_NOTEBOOK_LABEL(notebook, _("Display"), page++);
962 prefs_message_create();
963 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
964 prefs_interface_create();
965 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
966 prefs_other_create();
967 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
969 gtk_widget_show_all(notebook);
972 static void prefs_receive_create(void)
976 GtkWidget *frame_incext;
977 GtkWidget *checkbtn_incext;
979 GtkWidget *label_incext;
980 GtkWidget *entry_incext;
981 /* GtkWidget *button_incext; */
983 GtkWidget *hbox_autochk;
984 GtkWidget *checkbtn_autochk;
985 GtkWidget *label_autochk1;
986 GtkObject *spinbtn_autochk_adj;
987 GtkWidget *spinbtn_autochk;
988 GtkWidget *label_autochk2;
989 GtkWidget *checkbtn_chkonstartup;
990 GtkWidget *checkbtn_scan_after_inc;
993 GtkWidget *frame_newmail;
994 GtkWidget *hbox_newmail_notify;
995 GtkWidget *checkbtn_newmail_auto;
996 GtkWidget *checkbtn_newmail_manu;
997 GtkWidget *entry_newmail_notify_cmd;
998 GtkWidget *label_newmail_notify_cmd;
1000 GtkWidget *hbox_recvdialog;
1001 GtkWidget *label_recvdialog;
1003 GtkWidget *menuitem;
1004 GtkWidget *optmenu_recvdialog;
1005 GtkWidget *checkbtn_no_recv_err_panel;
1006 GtkWidget *checkbtn_close_recv_dialog;
1008 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1009 gtk_widget_show (vbox1);
1010 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1011 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1013 PACK_FRAME(vbox1, frame_incext, _("External program"));
1015 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1016 gtk_widget_show (vbox2);
1017 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1018 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1020 /* Use of external incorporation program */
1021 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1022 _("Use external program for incorporation"));
1024 hbox = gtk_hbox_new (FALSE, 8);
1025 gtk_widget_show (hbox);
1026 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1027 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1029 label_incext = gtk_label_new (_("Command"));
1030 gtk_widget_show (label_incext);
1031 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1033 entry_incext = gtk_entry_new ();
1034 gtk_widget_show (entry_incext);
1035 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1038 button_incext = gtk_button_new_with_label ("... ");
1039 gtk_widget_show (button_incext);
1040 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1043 vbox2 = gtk_vbox_new (FALSE, 0);
1044 gtk_widget_show (vbox2);
1045 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1048 hbox_autochk = gtk_hbox_new (FALSE, 8);
1049 gtk_widget_show (hbox_autochk);
1050 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1052 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1053 _("Auto-check new mail"));
1055 label_autochk1 = gtk_label_new (_("every"));
1056 gtk_widget_show (label_autochk1);
1057 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1059 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1060 spinbtn_autochk = gtk_spin_button_new
1061 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1062 gtk_widget_show (spinbtn_autochk);
1063 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1064 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1065 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1067 label_autochk2 = gtk_label_new (_("minute(s)"));
1068 gtk_widget_show (label_autochk2);
1069 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1071 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1072 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1073 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1075 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1076 _("Check new mail on startup"));
1077 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1078 _("Update all local folders after incorporation"));
1081 /* receive dialog */
1082 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1083 gtk_widget_show (hbox_recvdialog);
1084 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1086 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1087 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1088 gtk_widget_show (label_recvdialog);
1089 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1091 optmenu_recvdialog = gtk_option_menu_new ();
1092 gtk_widget_show (optmenu_recvdialog);
1093 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1095 menu = gtk_menu_new ();
1096 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1097 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1098 RECV_DIALOG_MANUAL);
1099 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1101 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1103 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1104 _("Don't popup error dialog on receive error"));
1106 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1107 _("Close receive dialog when finished"));
1109 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1111 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1112 gtk_widget_show (vbox2);
1113 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1114 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1116 hbox = gtk_hbox_new (TRUE, 8);
1117 gtk_widget_show (hbox);
1118 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1119 _("after autochecking"));
1120 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1121 _("after manual checking"));
1122 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1123 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1124 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1126 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1127 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1130 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1131 gtk_widget_show (hbox);
1132 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1135 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1136 "(use %d as number of new "
1138 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1140 gtk_widget_show (label_newmail_notify_cmd);
1141 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1142 label_newmail_notify_cmd, FALSE, FALSE, 0);
1144 entry_newmail_notify_cmd = gtk_entry_new ();
1145 gtk_widget_show (entry_newmail_notify_cmd);
1146 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1147 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1149 gtk_widget_set_sensitive(hbox_newmail_notify,
1150 prefs_common.newmail_notify_auto ||
1151 prefs_common.newmail_notify_manu);
1153 receive.checkbtn_incext = checkbtn_incext;
1154 receive.entry_incext = entry_incext;
1155 /* receive.button_incext = button_incext; */
1157 receive.checkbtn_autochk = checkbtn_autochk;
1158 receive.spinbtn_autochk = spinbtn_autochk;
1159 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1161 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1162 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1165 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1166 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1167 receive.hbox_newmail_notify = hbox_newmail_notify;
1168 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1169 receive.optmenu_recvdialog = optmenu_recvdialog;
1170 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1171 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1174 static void prefs_send_create(void)
1179 GtkWidget *checkbtn_savemsg;
1180 GtkWidget *label_outcharset;
1181 GtkWidget *optmenu_charset;
1182 GtkWidget *optmenu_menu;
1183 GtkWidget *menuitem;
1184 GtkTooltips *charset_tooltip;
1185 GtkWidget *optmenu_encoding;
1186 GtkWidget *label_encoding;
1187 GtkTooltips *encoding_tooltip;
1188 GtkWidget *label_senddialog;
1190 GtkWidget *optmenu_senddialog;
1191 GtkWidget *hbox_senddialog;
1193 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1194 gtk_widget_show (vbox1);
1195 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1196 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1198 vbox2 = gtk_vbox_new (FALSE, 0);
1199 gtk_widget_show (vbox2);
1200 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1202 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1203 _("Save sent messages to Sent folder"));
1205 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1206 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1208 label_senddialog = gtk_label_new (_("Show send dialog"));
1209 gtk_widget_show (label_senddialog);
1210 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1212 optmenu_senddialog = gtk_option_menu_new ();
1213 gtk_widget_show (optmenu_senddialog);
1214 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1216 menu = gtk_menu_new ();
1217 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1218 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1220 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1222 hbox1 = gtk_hbox_new (FALSE, 8);
1223 gtk_widget_show (hbox1);
1224 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1226 label_outcharset = gtk_label_new (_("Outgoing encoding"));
1227 gtk_widget_show (label_outcharset);
1228 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1230 charset_tooltip = gtk_tooltips_new();
1232 optmenu_charset = gtk_option_menu_new ();
1233 gtk_widget_show (optmenu_charset);
1234 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1235 _("If `Automatic' is selected, the optimal encoding"
1236 " for the current locale will be used"),
1238 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1240 optmenu_menu = gtk_menu_new ();
1242 #define SET_MENUITEM(str, data) \
1244 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1247 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1248 SET_MENUITEM(NULL, NULL);
1249 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1250 SET_MENUITEM(NULL, NULL);
1251 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1252 SET_MENUITEM(NULL, NULL);
1253 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1254 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1255 SET_MENUITEM(NULL, NULL);
1256 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1257 SET_MENUITEM(NULL, NULL);
1258 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1259 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1260 SET_MENUITEM(NULL, NULL);
1261 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1262 SET_MENUITEM(NULL, NULL);
1263 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1264 SET_MENUITEM(NULL, NULL);
1265 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1266 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1267 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1268 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1269 SET_MENUITEM(NULL, NULL);
1270 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1272 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1273 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1275 SET_MENUITEM(NULL, NULL);
1276 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1277 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1279 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1280 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1282 SET_MENUITEM(NULL, NULL);
1283 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1284 SET_MENUITEM(NULL, NULL);
1285 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1286 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1288 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1291 hbox1 = gtk_hbox_new (FALSE, 8);
1292 gtk_widget_show (hbox1);
1293 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1295 hbox1 = gtk_hbox_new (FALSE, 8);
1296 gtk_widget_show (hbox1);
1297 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1299 label_encoding = gtk_label_new (_("Transfer encoding"));
1300 gtk_widget_show (label_encoding);
1301 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1303 encoding_tooltip = gtk_tooltips_new();
1305 optmenu_encoding = gtk_option_menu_new ();
1306 gtk_widget_show (optmenu_encoding);
1307 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1308 _("Specify Content-Transfer-Encoding used when"
1309 " message body contains non-ASCII characters"),
1311 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1313 optmenu_menu = gtk_menu_new ();
1315 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1316 SET_MENUITEM("base64", CTE_BASE64);
1317 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1318 SET_MENUITEM("8bit", CTE_8BIT);
1320 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1323 hbox1 = gtk_hbox_new (FALSE, 8);
1324 gtk_widget_show (hbox1);
1325 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1327 p_send.checkbtn_savemsg = checkbtn_savemsg;
1328 p_send.optmenu_senddialog = optmenu_senddialog;
1330 p_send.optmenu_charset = optmenu_charset;
1331 p_send.optmenu_encoding_method = optmenu_encoding;
1334 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1338 toggled = gtk_toggle_button_get_active
1339 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1340 gtk_toggle_button_get_active
1341 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1342 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1345 static void prefs_compose_create(void)
1350 GtkWidget *checkbtn_autoextedit;
1352 GtkWidget *frame_autosel;
1353 GtkWidget *hbox_autosel;
1354 GtkWidget *checkbtn_reply_account_autosel;
1355 GtkWidget *checkbtn_forward_account_autosel;
1356 GtkWidget *checkbtn_reedit_account_autosel;
1358 GtkWidget *hbox_undolevel;
1359 GtkWidget *label_undolevel;
1360 GtkObject *spinbtn_undolevel_adj;
1361 GtkWidget *spinbtn_undolevel;
1365 GtkWidget *checkbtn_default_reply_list;
1367 GtkWidget *checkbtn_forward_as_attachment;
1368 GtkWidget *checkbtn_redirect_keep_from;
1370 GtkWidget *hbox_autosave;
1371 GtkWidget *checkbtn_autosave;
1372 GtkWidget *entry_autosave_length;
1373 GtkWidget *label_autosave_length;
1375 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1376 gtk_widget_show (vbox1);
1377 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1378 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1380 /* Account autoselection */
1381 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1383 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1384 gtk_widget_show (hbox_autosel);
1385 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1386 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1388 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1389 _("when replying"));
1390 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1391 _("when forwarding"));
1392 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1393 _("when re-editing"));
1395 vbox2 = gtk_vbox_new (FALSE, 0);
1396 gtk_widget_show (vbox2);
1397 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1399 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1400 _("Reply button invokes mailing list reply"));
1402 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1403 _("Automatically launch the external editor"));
1405 hbox5 = gtk_hbox_new (FALSE, 8);
1406 gtk_widget_show (hbox5);
1407 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1409 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1410 _("Forward as attachment"));
1412 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1413 _("Keep the original 'From' header when redirecting"));
1416 hbox_autosave = gtk_hbox_new (FALSE, 8);
1417 gtk_widget_show (hbox_autosave);
1418 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1420 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1421 _("Autosave to Drafts folder every "));
1423 entry_autosave_length = gtk_entry_new();
1424 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1425 gtk_widget_show (entry_autosave_length);
1426 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1428 label_autosave_length = gtk_label_new(_("characters"));
1429 gtk_widget_show (label_autosave_length);
1430 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1432 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1433 gtk_widget_show (hbox_undolevel);
1434 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1436 label_undolevel = gtk_label_new (_("Undo level"));
1437 gtk_widget_show (label_undolevel);
1438 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1440 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1441 spinbtn_undolevel = gtk_spin_button_new
1442 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1443 gtk_widget_show (spinbtn_undolevel);
1444 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1445 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1446 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1449 compose.checkbtn_quote = checkbtn_quote;
1450 compose.entry_quotemark = entry_quotemark;
1451 compose.text_quotefmt = text_quotefmt;
1454 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1456 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1457 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1458 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1460 compose.spinbtn_undolevel = spinbtn_undolevel;
1461 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1463 compose.checkbtn_autosave = checkbtn_autosave;
1464 compose.entry_autosave_length = entry_autosave_length;
1466 compose.checkbtn_forward_as_attachment =
1467 checkbtn_forward_as_attachment;
1468 compose.checkbtn_redirect_keep_from =
1469 checkbtn_redirect_keep_from;
1470 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1473 static void prefs_quote_create(void)
1476 GtkWidget *frame_quote;
1477 GtkWidget *vbox_quote;
1480 GtkWidget *label_quotemark;
1481 GtkWidget *entry_quotemark;
1482 GtkWidget *scrolledwin_quotefmt;
1483 GtkWidget *text_quotefmt;
1485 GtkWidget *entry_fw_quotemark;
1486 GtkWidget *text_fw_quotefmt;
1488 GtkWidget *entry_quote_chars;
1489 GtkWidget *label_quote_chars;
1491 GtkWidget *btn_quotedesc;
1493 GtkWidget *checkbtn_reply_with_quote;
1495 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1496 gtk_widget_show (vbox1);
1497 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1498 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1502 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1504 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1506 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1507 gtk_widget_show (vbox_quote);
1508 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1509 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1511 hbox1 = gtk_hbox_new (FALSE, 32);
1512 gtk_widget_show (hbox1);
1513 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1515 hbox2 = gtk_hbox_new (FALSE, 8);
1516 gtk_widget_show (hbox2);
1517 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1519 label_quotemark = gtk_label_new (_("Quotation mark"));
1520 gtk_widget_show (label_quotemark);
1521 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1523 entry_quotemark = gtk_entry_new ();
1524 gtk_widget_show (entry_quotemark);
1525 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1526 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1528 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1529 gtk_widget_show (scrolledwin_quotefmt);
1530 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1532 gtk_scrolled_window_set_policy
1533 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1534 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1535 gtk_scrolled_window_set_shadow_type
1536 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1538 text_quotefmt = gtk_text_view_new ();
1539 gtk_widget_show (text_quotefmt);
1540 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1541 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
1542 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1546 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1548 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1549 gtk_widget_show (vbox_quote);
1550 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1551 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1553 hbox1 = gtk_hbox_new (FALSE, 32);
1554 gtk_widget_show (hbox1);
1555 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1557 hbox2 = gtk_hbox_new (FALSE, 8);
1558 gtk_widget_show (hbox2);
1559 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1561 label_quotemark = gtk_label_new (_("Quotation mark"));
1562 gtk_widget_show (label_quotemark);
1563 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1565 entry_fw_quotemark = gtk_entry_new ();
1566 gtk_widget_show (entry_fw_quotemark);
1567 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1569 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1571 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1572 gtk_widget_show (scrolledwin_quotefmt);
1573 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1575 gtk_scrolled_window_set_policy
1576 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1577 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1578 gtk_scrolled_window_set_shadow_type
1579 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1581 text_fw_quotefmt = gtk_text_view_new ();
1582 gtk_widget_show (text_fw_quotefmt);
1583 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1585 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1586 gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
1588 hbox1 = gtk_hbox_new (FALSE, 32);
1589 gtk_widget_show (hbox1);
1590 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1593 gtk_button_new_with_label (_(" Description of symbols "));
1594 gtk_widget_show (btn_quotedesc);
1595 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1596 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1597 G_CALLBACK(quote_fmt_quote_description), NULL);
1601 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1603 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1604 gtk_widget_show (vbox_quote);
1605 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1606 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1608 hbox1 = gtk_hbox_new (FALSE, 32);
1609 gtk_widget_show (hbox1);
1610 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1612 hbox2 = gtk_hbox_new (FALSE, 8);
1613 gtk_widget_show (hbox2);
1614 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1616 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1617 gtk_widget_show (label_quote_chars);
1618 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1620 entry_quote_chars = gtk_entry_new ();
1621 gtk_widget_show (entry_quote_chars);
1622 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1624 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1627 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1628 quote.entry_quotemark = entry_quotemark;
1629 quote.text_quotefmt = text_quotefmt;
1630 quote.entry_fw_quotemark = entry_fw_quotemark;
1631 quote.text_fw_quotefmt = text_fw_quotefmt;
1632 quote.entry_quote_chars = entry_quote_chars;
1635 static void prefs_display_create(void)
1638 GtkWidget *chkbtn_transhdr;
1639 GtkWidget *chkbtn_folder_unread;
1641 GtkWidget *label_ng_abbrev;
1642 GtkWidget *spinbtn_ng_abbrev_len;
1643 GtkObject *spinbtn_ng_abbrev_len_adj;
1644 GtkWidget *frame_summary;
1646 GtkWidget *chkbtn_swapfrom;
1647 GtkWidget *chkbtn_useaddrbook;
1648 GtkWidget *chkbtn_threadsubj;
1650 GtkWidget *label_datefmt;
1651 GtkWidget *button_datefmt;
1652 GtkWidget *entry_datefmt;
1653 GtkWidget *button_dispitem;
1655 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1656 gtk_widget_show (vbox1);
1657 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1658 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1660 vbox2 = gtk_vbox_new (FALSE, 0);
1661 gtk_widget_show (vbox2);
1662 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1665 (vbox2, chkbtn_transhdr,
1666 _("Translate header name (such as `From:', `Subject:')"));
1668 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1669 _("Display unread number next to folder name"));
1671 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1673 hbox1 = gtk_hbox_new (FALSE, 8);
1674 gtk_widget_show (hbox1);
1675 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1677 label_ng_abbrev = gtk_label_new
1678 (_("Abbreviate newsgroup names longer than"));
1679 gtk_widget_show (label_ng_abbrev);
1680 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1682 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1683 spinbtn_ng_abbrev_len = gtk_spin_button_new
1684 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1685 gtk_widget_show (spinbtn_ng_abbrev_len);
1686 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1688 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1689 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1692 label_ng_abbrev = gtk_label_new
1694 gtk_widget_show (label_ng_abbrev);
1695 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1697 /* ---- Summary ---- */
1699 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1701 vbox2 = gtk_vbox_new (FALSE, 0);
1702 gtk_widget_show (vbox2);
1703 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1704 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1707 (vbox2, chkbtn_swapfrom,
1708 _("Display recipient in `From' column if sender is yourself"));
1710 (vbox2, chkbtn_useaddrbook,
1711 _("Display sender using address book"));
1713 (vbox2, chkbtn_threadsubj,
1714 _("Thread using subject in addition to standard headers"));
1716 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1718 hbox1 = gtk_hbox_new (FALSE, 8);
1719 gtk_widget_show (hbox1);
1720 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1722 label_datefmt = gtk_label_new (_("Date format"));
1723 gtk_widget_show (label_datefmt);
1724 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1726 entry_datefmt = gtk_entry_new ();
1727 gtk_widget_show (entry_datefmt);
1728 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1730 button_datefmt = gtk_button_new_with_label (" ... ");
1732 gtk_widget_show (button_datefmt);
1733 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1734 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1735 G_CALLBACK (date_format_create), NULL);
1737 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1739 hbox1 = gtk_hbox_new (FALSE, 8);
1740 gtk_widget_show (hbox1);
1741 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1743 button_dispitem = gtk_button_new_with_label
1744 (_(" Set displayed items in summary... "));
1745 gtk_widget_show (button_dispitem);
1746 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1747 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1748 G_CALLBACK (prefs_summary_column_open),
1751 display.chkbtn_transhdr = chkbtn_transhdr;
1752 display.chkbtn_folder_unread = chkbtn_folder_unread;
1753 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1754 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1756 display.chkbtn_swapfrom = chkbtn_swapfrom;
1757 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1758 display.chkbtn_threadsubj = chkbtn_threadsubj;
1759 display.entry_datefmt = entry_datefmt;
1762 static void prefs_message_create(void)
1768 GtkWidget *chkbtn_mbalnum;
1769 GtkWidget *chkbtn_disphdrpane;
1770 GtkWidget *chkbtn_disphdr;
1771 GtkWidget *button_edit_disphdr;
1772 GtkWidget *chkbtn_html;
1773 GtkWidget *hbox_linespc;
1774 GtkWidget *label_linespc;
1775 GtkObject *spinbtn_linespc_adj;
1776 GtkWidget *spinbtn_linespc;
1778 GtkWidget *frame_scr;
1779 GtkWidget *vbox_scr;
1780 GtkWidget *chkbtn_smoothscroll;
1781 GtkWidget *hbox_scr;
1782 GtkWidget *label_scr;
1783 GtkObject *spinbtn_scrollstep_adj;
1784 GtkWidget *spinbtn_scrollstep;
1785 GtkWidget *chkbtn_halfpage;
1787 GtkWidget *chkbtn_attach_desc;
1789 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1790 gtk_widget_show (vbox1);
1791 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1792 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1794 vbox2 = gtk_vbox_new (FALSE, 0);
1795 gtk_widget_show (vbox2);
1796 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1799 (vbox2, chkbtn_mbalnum,
1800 _("Display multi-byte alphanumeric as\n"
1801 "ASCII character (Japanese only)"));
1802 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1805 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1806 _("Display header pane above message view"));
1808 hbox1 = gtk_hbox_new (FALSE, 8);
1809 gtk_widget_show (hbox1);
1810 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1812 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1813 _("Display short headers on message view"));
1815 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1816 gtk_widget_show (button_edit_disphdr);
1817 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1819 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1820 G_CALLBACK (prefs_display_header_open),
1823 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1825 PACK_CHECK_BUTTON(vbox2, chkbtn_html,
1826 _("Render HTML messages as text"));
1828 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1830 hbox1 = gtk_hbox_new (FALSE, 32);
1831 gtk_widget_show (hbox1);
1832 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1834 hbox_linespc = gtk_hbox_new (FALSE, 8);
1835 gtk_widget_show (hbox1);
1836 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1838 label_linespc = gtk_label_new (_("Line space"));
1839 gtk_widget_show (label_linespc);
1840 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1843 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1844 spinbtn_linespc = gtk_spin_button_new
1845 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1846 gtk_widget_show (spinbtn_linespc);
1847 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1849 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1850 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1852 label_linespc = gtk_label_new (_("pixel(s)"));
1853 gtk_widget_show (label_linespc);
1854 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1857 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1859 vbox_scr = gtk_vbox_new (FALSE, 0);
1860 gtk_widget_show (vbox_scr);
1861 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1862 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1864 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1866 hbox1 = gtk_hbox_new (FALSE, 32);
1867 gtk_widget_show (hbox1);
1868 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1870 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1872 hbox_scr = gtk_hbox_new (FALSE, 8);
1873 gtk_widget_show (hbox_scr);
1874 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1876 label_scr = gtk_label_new (_("Step"));
1877 gtk_widget_show (label_scr);
1878 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1880 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1881 spinbtn_scrollstep = gtk_spin_button_new
1882 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1883 gtk_widget_show (spinbtn_scrollstep);
1884 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1886 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1887 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1890 label_scr = gtk_label_new (_("pixel(s)"));
1891 gtk_widget_show (label_scr);
1892 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1894 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1896 vbox3 = gtk_vbox_new (FALSE, 0);
1897 gtk_widget_show (vbox3);
1898 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1900 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1901 _("Show attachment descriptions (rather than names)"));
1903 message.chkbtn_mbalnum = chkbtn_mbalnum;
1904 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1905 message.chkbtn_disphdr = chkbtn_disphdr;
1906 message.chkbtn_html = chkbtn_html;
1907 message.spinbtn_linespc = spinbtn_linespc;
1909 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1910 message.spinbtn_scrollstep = spinbtn_scrollstep;
1911 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1912 message.chkbtn_halfpage = chkbtn_halfpage;
1914 message.chkbtn_attach_desc = chkbtn_attach_desc;
1917 static void prefs_interface_create(void)
1922 /* GtkWidget *checkbtn_emacs; */
1923 GtkWidget *checkbtn_always_show_msg;
1924 GtkWidget *checkbtn_openunread;
1925 GtkWidget *checkbtn_mark_as_read_on_newwin;
1926 GtkWidget *checkbtn_openinbox;
1927 GtkWidget *checkbtn_immedexec;
1928 GtkTooltips *immedexec_tooltip;
1932 GtkWidget *menuitem;
1934 GtkWidget *button_keybind;
1936 GtkWidget *hbox_nextunreadmsgdialog;
1937 GtkWidget *optmenu_nextunreadmsgdialog;
1939 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1940 gtk_widget_show (vbox1);
1941 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1942 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1944 vbox2 = gtk_vbox_new (FALSE, 0);
1945 gtk_widget_show (vbox2);
1946 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1948 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1949 _("Emulate the behavior of mouse operation of\n"
1950 "Emacs-based mailer"));
1951 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1952 GTK_JUSTIFY_LEFT); */
1955 (vbox2, checkbtn_always_show_msg,
1956 _("Always open messages in summary when selected"));
1959 (vbox2, checkbtn_openunread,
1960 _("Open first unread message when entering a folder"));
1963 (vbox2, checkbtn_mark_as_read_on_newwin,
1964 _("Only mark message as read when opened in new window"));
1967 (vbox2, checkbtn_openinbox,
1968 _("Go to inbox after receiving new mail"));
1970 vbox3 = gtk_vbox_new (FALSE, 0);
1971 gtk_widget_show (vbox3);
1972 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1974 immedexec_tooltip = gtk_tooltips_new();
1977 (vbox3, checkbtn_immedexec,
1978 _("Execute immediately when moving or deleting messages"));
1979 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1980 _("Messages will be marked until execution"
1981 " if this is turned off"),
1984 hbox1 = gtk_hbox_new (FALSE, 0);
1985 gtk_widget_show (hbox1);
1986 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1988 /* Next Unread Message Dialog */
1989 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1990 gtk_widget_show (hbox1);
1991 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1993 label = gtk_label_new (_("Show no-unread-message dialog"));
1994 gtk_widget_show (label);
1995 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1997 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1998 gtk_widget_show (optmenu_nextunreadmsgdialog);
1999 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
2001 menu = gtk_menu_new ();
2002 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
2003 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
2004 NEXTUNREADMSGDIALOG_ASSUME_YES);
2005 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
2006 NEXTUNREADMSGDIALOG_ASSUME_NO);
2008 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
2010 hbox1 = gtk_hbox_new (FALSE, 8);
2011 gtk_widget_show (hbox1);
2012 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2014 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
2015 gtk_widget_show (button_keybind);
2016 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
2017 g_signal_connect (G_OBJECT (button_keybind), "clicked",
2018 G_CALLBACK (prefs_keybind_select), NULL);
2020 /* interface.checkbtn_emacs = checkbtn_emacs; */
2021 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2022 interface.checkbtn_openunread = checkbtn_openunread;
2023 interface.checkbtn_mark_as_read_on_newwin
2024 = checkbtn_mark_as_read_on_newwin;
2025 interface.checkbtn_openinbox = checkbtn_openinbox;
2026 interface.checkbtn_immedexec = checkbtn_immedexec;
2027 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2030 static void prefs_other_create(void)
2035 GtkWidget *frame_addr;
2036 GtkWidget *vbox_addr;
2037 GtkWidget *checkbtn_addaddrbyclick;
2039 GtkWidget *frame_cliplog;
2040 GtkWidget *vbox_cliplog;
2041 GtkWidget *hbox_cliplog;
2042 GtkWidget *checkbtn_cliplog;
2043 GtkWidget *loglength_label;
2044 GtkWidget *loglength_entry;
2045 GtkTooltips *loglength_tooltip;
2047 GtkWidget *frame_exit;
2048 GtkWidget *vbox_exit;
2049 GtkWidget *checkbtn_confonexit;
2050 GtkWidget *checkbtn_cleanonexit;
2051 GtkWidget *checkbtn_askonclean;
2052 GtkWidget *checkbtn_warnqueued;
2054 GtkWidget *label_iotimeout;
2055 GtkWidget *spinbtn_iotimeout;
2056 GtkObject *spinbtn_iotimeout_adj;
2060 GtkWidget *frame_ssl;
2061 GtkWidget *vbox_ssl;
2062 GtkWidget *hbox_ssl;
2063 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2066 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2067 gtk_widget_show (vbox1);
2068 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2069 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2071 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2073 vbox_addr = gtk_vbox_new (FALSE, 0);
2074 gtk_widget_show (vbox_addr);
2075 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2076 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2079 (vbox_addr, checkbtn_addaddrbyclick,
2080 _("Add address to destination when double-clicked"));
2083 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2085 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2086 gtk_widget_show (vbox_cliplog);
2087 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2088 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2089 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2090 _("Clip the log size"));
2091 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2092 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2093 gtk_widget_show (hbox_cliplog);
2095 loglength_label = gtk_label_new (_("Log window length"));
2096 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2098 gtk_widget_show (GTK_WIDGET (loglength_label));
2100 loglength_tooltip = gtk_tooltips_new();
2102 loglength_entry = gtk_entry_new ();
2103 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2104 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2106 gtk_widget_show (GTK_WIDGET (loglength_entry));
2107 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2108 _("0 to stop logging in the log window"),
2110 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2115 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2117 vbox_ssl = gtk_vbox_new (FALSE, 0);
2118 gtk_widget_show (vbox_ssl);
2119 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2120 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2121 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2122 _("Ask before accepting SSL certificates"));
2123 hbox_ssl = gtk_hbox_new (FALSE, 3);
2124 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2125 gtk_widget_show (hbox_ssl);
2130 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2132 vbox_exit = gtk_vbox_new (FALSE, 0);
2133 gtk_widget_show (vbox_exit);
2134 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2135 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2137 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2138 _("Confirm on exit"));
2140 hbox1 = gtk_hbox_new (FALSE, 32);
2141 gtk_widget_show (hbox1);
2142 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2144 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2145 _("Empty trash on exit"));
2146 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2147 _("Ask before emptying"));
2148 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2150 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2151 _("Warn if there are queued messages"));
2153 hbox1 = gtk_hbox_new (FALSE, 8);
2154 gtk_widget_show (hbox1);
2155 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2157 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2158 gtk_widget_show (label_iotimeout);
2159 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2161 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2162 spinbtn_iotimeout = gtk_spin_button_new
2163 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2164 gtk_widget_show (spinbtn_iotimeout);
2165 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2167 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2168 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2170 label_iotimeout = gtk_label_new (_("seconds"));
2171 gtk_widget_show (label_iotimeout);
2172 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2174 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2176 other.checkbtn_cliplog = checkbtn_cliplog;
2177 other.loglength_entry = loglength_entry;
2179 other.checkbtn_confonexit = checkbtn_confonexit;
2180 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2181 other.checkbtn_askonclean = checkbtn_askonclean;
2182 other.checkbtn_warnqueued = checkbtn_warnqueued;
2184 other.spinbtn_iotimeout = spinbtn_iotimeout;
2185 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2189 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2194 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2196 GtkWidget *datefmt_sample = NULL;
2199 g_return_if_fail(widget != NULL);
2200 g_return_if_fail(*widget != NULL);
2201 g_return_if_fail(display.entry_datefmt != NULL);
2203 datefmt_sample = GTK_WIDGET(g_object_get_data
2204 (G_OBJECT(*widget), "datefmt_sample"));
2205 g_return_if_fail(datefmt_sample != NULL);
2207 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2208 g_free(prefs_common.date_format);
2209 prefs_common.date_format = text;
2210 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2212 gtk_widget_destroy(*widget);
2216 static void date_format_cancel_btn_clicked(GtkButton *button,
2219 g_return_if_fail(widget != NULL);
2220 g_return_if_fail(*widget != NULL);
2222 gtk_widget_destroy(*widget);
2226 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2229 if (event && event->keyval == GDK_Escape)
2230 date_format_cancel_btn_clicked(NULL, widget);
2234 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2235 GdkEventAny *event, GtkWidget **widget)
2237 g_return_val_if_fail(widget != NULL, FALSE);
2238 g_return_val_if_fail(*widget != NULL, FALSE);
2244 static void date_format_entry_on_change(GtkEditable *editable,
2248 struct tm *cal_time;
2252 cur_time = time(NULL);
2253 cal_time = localtime(&cur_time);
2255 text = gtk_editable_get_chars(editable, 0, -1);
2257 strftime(buffer, sizeof buffer, text, cal_time);
2260 text = conv_codeset_strdup(buffer,
2261 conv_get_locale_charset_str(),
2264 text = g_strdup(buffer);
2266 gtk_label_set_text(example, text);
2271 static void date_format_select_row(GtkTreeView *list_view,
2273 GtkTreeViewColumn *column,
2274 GtkWidget *date_format)
2278 const gchar *old_format;
2280 GtkWidget *datefmt_sample;
2282 GtkTreeModel *model;
2284 g_return_if_fail(date_format != NULL);
2286 /* only on double click */
2287 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2290 g_return_if_fail(datefmt_sample != NULL);
2292 model = gtk_tree_view_get_model(list_view);
2294 /* get format from list */
2295 if (!gtk_tree_model_get_iter(model, &iter, path))
2298 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
2300 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2301 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2303 /* insert the format into the text entry */
2304 new_format = g_malloc(strlen(old_format) + 3);
2306 strncpy(new_format, old_format, cur_pos);
2307 new_format[cur_pos] = '\0';
2308 strcat(new_format, format);
2309 strcat(new_format, &old_format[cur_pos]);
2311 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2312 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2317 static GtkWidget *date_format_create(GtkButton *button, void *data)
2319 static GtkWidget *datefmt_win = NULL;
2322 GtkWidget *scrolledwindow1;
2323 GtkWidget *datefmt_list_view;
2328 GtkWidget *confirm_area;
2330 GtkWidget *cancel_btn;
2331 GtkWidget *datefmt_entry;
2332 GtkListStore *store;
2361 const gint TIME_FORMAT_ELEMS =
2362 sizeof time_format / sizeof time_format[0];
2364 GtkCellRenderer *renderer;
2365 GtkTreeViewColumn *column;
2366 GtkTreeSelection *selection;
2368 time_format[0].txt = _("the full abbreviated weekday name");
2369 time_format[1].txt = _("the full weekday name");
2370 time_format[2].txt = _("the abbreviated month name");
2371 time_format[3].txt = _("the full month name");
2372 time_format[4].txt = _("the preferred date and time for the current locale");
2373 time_format[5].txt = _("the century number (year/100)");
2374 time_format[6].txt = _("the day of the month as a decimal number");
2375 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2376 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2377 time_format[9].txt = _("the day of the year as a decimal number");
2378 time_format[10].txt = _("the month as a decimal number");
2379 time_format[11].txt = _("the minute as a decimal number");
2380 time_format[12].txt = _("either AM or PM");
2381 time_format[13].txt = _("the second as a decimal number");
2382 time_format[14].txt = _("the day of the week as a decimal number");
2383 time_format[15].txt = _("the preferred date for the current locale");
2384 time_format[16].txt = _("the last two digits of a year");
2385 time_format[17].txt = _("the year as a decimal number");
2386 time_format[18].txt = _("the time zone or name or abbreviation");
2388 if (datefmt_win) return datefmt_win;
2390 store = gtk_list_store_new(N_DATEFMT_COLUMNS,
2395 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2398 gtk_list_store_append(store, &iter);
2399 gtk_list_store_set(store, &iter,
2400 DATEFMT_FMT, time_format[i].fmt,
2401 DATEFMT_TXT, time_format[i].txt,
2405 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2406 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2407 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2408 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2409 gtk_widget_set_size_request(datefmt_win, 440, 280);
2411 vbox1 = gtk_vbox_new(FALSE, 10);
2412 gtk_widget_show(vbox1);
2413 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2415 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2416 gtk_scrolled_window_set_policy
2417 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2418 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2419 gtk_widget_show(scrolledwindow1);
2420 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2422 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2423 g_object_unref(G_OBJECT(store));
2424 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(datefmt_list_view), TRUE);
2425 gtk_widget_show(datefmt_list_view);
2426 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view);
2428 renderer = gtk_cell_renderer_text_new();
2429 column = gtk_tree_view_column_new_with_attributes
2430 (_("Specifier"), renderer, "text", DATEFMT_FMT,
2432 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2434 renderer = gtk_cell_renderer_text_new();
2435 column = gtk_tree_view_column_new_with_attributes
2436 (_("Description"), renderer, "text", DATEFMT_TXT,
2438 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2440 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2441 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view));
2442 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
2444 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated",
2445 G_CALLBACK(date_format_select_row),
2448 table = gtk_table_new(2, 2, FALSE);
2449 gtk_widget_show(table);
2450 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2451 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2452 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2454 label1 = gtk_label_new(_("Date format"));
2455 gtk_widget_show(label1);
2456 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2458 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2459 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2461 datefmt_entry = gtk_entry_new();
2462 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2463 gtk_widget_show(datefmt_entry);
2464 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2465 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2467 /* we need the "sample" entry box; add it as data so callbacks can
2468 * get the entry box */
2469 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2472 label2 = gtk_label_new(_("Example"));
2473 gtk_widget_show(label2);
2474 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2476 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2477 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2479 label3 = gtk_label_new("");
2480 gtk_widget_show(label3);
2481 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2482 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2483 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2484 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2486 gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
2487 &cancel_btn, GTK_STOCK_CANCEL, NULL, NULL);
2489 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2490 gtk_widget_show(confirm_area);
2491 gtk_widget_grab_default(ok_btn);
2493 /* set the current format */
2494 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2495 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2498 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2499 G_CALLBACK(date_format_ok_btn_clicked),
2501 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2502 G_CALLBACK(date_format_cancel_btn_clicked),
2504 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2505 G_CALLBACK(date_format_key_pressed),
2507 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2508 G_CALLBACK(date_format_on_delete),
2510 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2511 G_CALLBACK(date_format_entry_on_change),
2514 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2515 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2517 gtk_widget_show(datefmt_win);
2518 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2520 gtk_widget_grab_focus(ok_btn);
2525 static void prefs_keybind_select(void)
2532 GtkWidget *confirm_area;
2534 GtkWidget *cancel_btn;
2536 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2537 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2538 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2539 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2540 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2541 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2542 manage_window_set_transient (GTK_WINDOW (window));
2544 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2545 gtk_container_add (GTK_CONTAINER (window), vbox1);
2546 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2548 hbox1 = gtk_hbox_new (FALSE, 8);
2549 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2551 label = gtk_label_new
2552 (_("Select preset:"));
2553 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2554 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2556 hbox1 = gtk_hbox_new (FALSE, 8);
2557 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2559 combo = gtk_combo_new ();
2560 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2561 gtkut_combo_set_items (GTK_COMBO (combo),
2567 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2569 hbox1 = gtk_hbox_new (FALSE, 8);
2570 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2572 label = gtk_label_new
2573 (_("You can also modify each menu shortcut by pressing\n"
2574 "any key(s) when placing the mouse pointer on the item."));
2575 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2576 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2578 hbox1 = gtk_hbox_new (FALSE, 8);
2579 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2581 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
2582 &cancel_btn, GTK_STOCK_CANCEL,
2584 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2585 gtk_widget_grab_default (ok_btn);
2587 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2588 g_signal_connect (G_OBJECT (window), "delete_event",
2589 G_CALLBACK (prefs_keybind_deleted), NULL);
2590 g_signal_connect (G_OBJECT (window), "key_press_event",
2591 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2592 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2593 G_CALLBACK (prefs_keybind_apply_clicked),
2595 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2596 G_CALLBACK (prefs_keybind_cancel),
2599 gtk_widget_show_all(window);
2601 keybind.window = window;
2602 keybind.combo = combo;
2605 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2608 if (event && event->keyval == GDK_Escape)
2609 prefs_keybind_cancel();
2613 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2616 prefs_keybind_cancel();
2620 static void prefs_keybind_cancel(void)
2622 gtk_widget_destroy(keybind.window);
2623 keybind.window = NULL;
2624 keybind.combo = NULL;
2628 const gchar *accel_path;
2629 const gchar *accel_key;
2632 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2636 GdkModifierType mods;
2638 for (i = 0; i < num; i++) {
2639 const gchar *accel_key
2640 = keybind[i].accel_key ? keybind[i].accel_key : "";
2641 gtk_accelerator_parse(accel_key, &key, &mods);
2642 gtk_accel_map_change_entry(keybind[i].accel_path,
2647 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2649 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2651 struct KeyBind *menurc;
2654 static struct KeyBind default_menurc[] = {
2655 {"<Main>/File/Empty all Trash folders", ""},
2656 {"<Main>/File/Save as...", "<control>S"},
2657 {"<Main>/File/Print...", ""},
2658 {"<Main>/File/Exit", "<control>Q"},
2660 {"<Main>/Edit/Copy", "<control>C"},
2661 {"<Main>/Edit/Select all", "<control>A"},
2662 {"<Main>/Edit/Find in current message...", "<control>F"},
2663 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2665 {"<Main>/View/Show or hide/Message View", "V"},
2666 {"<Main>/View/Thread view", "<control>T"},
2667 {"<Main>/View/Go to/Prev message", "P"},
2668 {"<Main>/View/Go to/Next message", "N"},
2669 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2670 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2671 {"<Main>/View/Go to/Other folder...", "G"},
2672 {"<Main>/View/Open in new window", "<control><alt>N"},
2673 {"<Main>/View/Message source", "<control>U"},
2674 {"<Main>/View/Show all headers", "<control>H"},
2675 {"<Main>/View/Update summary", "<control><alt>U"},
2677 {"<Main>/Message/Receive/Get from current account",
2679 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2680 {"<Main>/Message/Compose an email message", "<control>M"},
2681 {"<Main>/Message/Reply", "<control>R"},
2682 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2683 {"<Main>/Message/Reply to/sender", ""},
2684 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2685 {"<Main>/Message/Forward", "<control><alt>F"},
2686 /* {"<Main>/Message/Forward as attachment", ""}, */
2687 {"<Main>/Message/Move...", "<control>O"},
2688 {"<Main>/Message/Copy...", "<shift><control>O"},
2689 {"<Main>/Message/Delete", "<control>D"},
2690 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2691 {"<Main>/Message/Mark/Unmark", "U"},
2692 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2693 {"<Main>/Message/Mark/Mark as read", ""},
2695 {"<Main>/Tools/Address book", "<shift><control>A"},
2696 {"<Main>/Tools/Execute", "X"},
2697 {"<Main>/Tools/Log window", "<shift><control>L"},
2699 {"<Compose>/Message/Close", "<control>W"},
2700 {"<Compose>/Edit/Select all", "<control>A"},
2701 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2702 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2703 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2704 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2705 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2708 static struct KeyBind mew_wl_menurc[] = {
2709 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2710 {"<Main>/File/Save as...", "Y"},
2711 {"<Main>/File/Print...", "<shift>numbersign"},
2712 {"<Main>/File/Exit", "<shift>Q"},
2714 {"<Main>/Edit/Copy", "<control>C"},
2715 {"<Main>/Edit/Select all", "<control>A"},
2716 {"<Main>/Edit/Find in current message...", "<control>F"},
2717 {"<Main>/Edit/Search folder...", "<control>S"},
2719 {"<Main>/View/Show or hide/Message View", ""},
2720 {"<Main>/View/Thread view", "<shift>T"},
2721 {"<Main>/View/Go to/Prev message", "P"},
2722 {"<Main>/View/Go to/Next message", "N"},
2723 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2724 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2725 {"<Main>/View/Go to/Other folder...", "G"},
2726 {"<Main>/View/Open in new window", "<control><alt>N"},
2727 {"<Main>/View/Message source", "<control>U"},
2728 {"<Main>/View/Show all headers", "<shift>H"},
2729 {"<Main>/View/Update summary", "<shift>S"},
2731 {"<Main>/Message/Receive/Get from current account",
2733 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2734 {"<Main>/Message/Compose an email message", "W"},
2735 {"<Main>/Message/Reply", "<control>R"},
2736 {"<Main>/Message/Reply to/all", "<shift>A"},
2737 {"<Main>/Message/Reply to/sender", ""},
2738 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2739 {"<Main>/Message/Forward", "F"},
2740 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2741 {"<Main>/Message/Move...", "O"},
2742 {"<Main>/Message/Copy...", "<shift>O"},
2743 {"<Main>/Message/Delete", "D"},
2744 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2745 {"<Main>/Message/Mark/Unmark", "U"},
2746 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2747 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2749 {"<Main>/Tools/Address book", "<shift><control>A"},
2750 {"<Main>/Tools/Execute", "X"},
2751 {"<Main>/Tools/Log window", "<shift><control>L"},
2753 {"<Compose>/Message/Close", "<alt>W"},
2754 {"<Compose>/Edit/Select all", ""},
2755 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2756 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2757 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2758 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2759 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2762 static struct KeyBind mutt_menurc[] = {
2763 {"<Main>/File/Empty all Trash folders", ""},
2764 {"<Main>/File/Save as...", "S"},
2765 {"<Main>/File/Print...", "P"},
2766 {"<Main>/File/Exit", "Q"},
2768 {"<Main>/Edit/Copy", "<control>C"},
2769 {"<Main>/Edit/Select all", "<control>A"},
2770 {"<Main>/Edit/Find in current message...", "<control>F"},
2771 {"<Main>/Edit/Search messages...", "slash"},
2773 {"<Main>/View/Show or hide/Message view", "V"},
2774 {"<Main>/View/Thread view", "<control>T"},
2775 {"<Main>/View/Go to/Prev message", ""},
2776 {"<Main>/View/Go to/Next message", ""},
2777 {"<Main>/View/Go to/Prev unread message", ""},
2778 {"<Main>/View/Go to/Next unread message", ""},
2779 {"<Main>/View/Go to/Other folder...", "C"},
2780 {"<Main>/View/Open in new window", "<control><alt>N"},
2781 {"<Main>/View/Message source", "<control>U"},
2782 {"<Main>/View/Show all headers", "<control>H"},
2783 {"<Main>/View/Update summary", "<control><alt>U"},
2785 {"<Main>/Message/Receive/Get from current account",
2787 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2788 {"<Main>/Message/Compose an email message", "M"},
2789 {"<Main>/Message/Reply", "R"},
2790 {"<Main>/Message/Reply to/all", "G"},
2791 {"<Main>/Message/Reply to/sender", ""},
2792 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2793 {"<Main>/Message/Forward", "F"},
2794 {"<Main>/Message/Forward as attachment", ""},
2795 {"<Main>/Message/Move...", "<control>O"},
2796 {"<Main>/Message/Copy...", "<shift>C"},
2797 {"<Main>/Message/Delete", "D"},
2798 {"<Main>/Message/Mark/Mark", "<shift>F"},
2799 {"<Main>/Message/Mark/Unmark", "U"},
2800 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2801 {"<Main>/Message/Mark/Mark as read", ""},
2803 {"<Main>/Tools/Address book", "<shift><control>A"},
2804 {"<Main>/Tools/Execute", "X"},
2805 {"<Main>/Tools/Log window", "<shift><control>L"},
2807 {"<Compose>/Message/Close", "<alt>W"},
2808 {"<Compose>/Edit/Select all", ""},
2809 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2810 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2811 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2812 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2813 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2816 static struct KeyBind old_sylpheed_menurc[] = {
2817 {"<Main>/File/Empty all Trash folders", ""},
2818 {"<Main>/File/Save as...", ""},
2819 {"<Main>/File/Print...", "<alt>P"},
2820 {"<Main>/File/Exit", "<alt>Q"},
2822 {"<Main>/Edit/Copy", "<control>C"},
2823 {"<Main>/Edit/Select all", "<control>A"},
2824 {"<Main>/Edit/Find in current message...", "<control>F"},
2825 {"<Main>/Edit/Search folder...", "<control>S"},
2827 {"<Main>/View/Show or hide/Message View", ""},
2828 {"<Main>/View/Thread view", "<control>T"},
2829 {"<Main>/View/Go to/Prev message", "P"},
2830 {"<Main>/View/Go to/Next message", "N"},
2831 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2832 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2833 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2834 {"<Main>/View/Open in new window", "<shift><control>N"},
2835 {"<Main>/View/Message source", "<control>U"},
2836 {"<Main>/View/Show all headers", "<control>H"},
2837 {"<Main>/View/Update summary", "<alt>U"},
2839 {"<Main>/Message/Receive/Get from current account",
2841 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2842 {"<Main>/Message/Compose an email message", "<alt>N"},
2843 {"<Main>/Message/Reply", "<alt>R"},
2844 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2845 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2846 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2847 {"<Main>/Message/Forward", "<shift><alt>F"},
2848 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2849 {"<Main>/Message/Move...", "<alt>O"},
2850 {"<Main>/Message/Copy...", ""},
2851 {"<Main>/Message/Delete", "<alt>D"},
2852 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2853 {"<Main>/Message/Mark/Unmark", "U"},
2854 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2855 {"<Main>/Message/Mark/Mark as read", ""},
2857 {"<Main>/Tools/Address book", "<alt>A"},
2858 {"<Main>/Tools/Execute", "<alt>X"},
2859 {"<Main>/Tools/Log window", "<alt>L"},
2861 {"<Compose>/Message/Close", "<alt>W"},
2862 {"<Compose>/Edit/Select all", ""},
2863 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2864 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2865 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2866 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2867 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2870 text = gtk_entry_get_text(entry);
2872 if (!strcmp(text, _("Default"))) {
2873 menurc = default_menurc;
2874 n_menurc = G_N_ELEMENTS(default_menurc);
2875 } else if (!strcmp(text, "Mew / Wanderlust")) {
2876 menurc = mew_wl_menurc;
2877 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2878 } else if (!strcmp(text, "Mutt")) {
2879 menurc = mutt_menurc;
2880 n_menurc = G_N_ELEMENTS(mutt_menurc);
2881 } else if (!strcmp(text, _("Old Sylpheed"))) {
2882 menurc = old_sylpheed_menurc;
2883 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2888 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2889 prefs_keybind_apply(menurc, n_menurc);
2891 gtk_widget_destroy(keybind.window);
2892 keybind.window = NULL;
2893 keybind.combo = NULL;
2896 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2899 GtkWidget *menuitem;
2902 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2903 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2904 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2905 g_free(*((gchar **)pparam->data));
2906 *((gchar **)pparam->data) = g_strdup(charset);
2909 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2911 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2914 g_return_if_fail(optmenu != NULL);
2915 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2917 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2918 (GCompareFunc)strcmp2);
2920 gtk_option_menu_set_history(optmenu, index);
2922 gtk_option_menu_set_history(optmenu, 0);
2923 prefs_common_charset_set_data_from_optmenu(pparam);
2927 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2930 GtkWidget *menuitem;
2932 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2933 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2934 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2935 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2938 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2940 TransferEncodingMethod method =
2941 *((TransferEncodingMethod *)pparam->data);
2942 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2945 g_return_if_fail(optmenu != NULL);
2947 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2950 gtk_option_menu_set_history(optmenu, index);
2952 gtk_option_menu_set_history(optmenu, 0);
2953 prefs_common_encoding_set_data_from_optmenu(pparam);
2957 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2960 GtkWidget *menuitem;
2962 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2963 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2964 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2965 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2968 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2970 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2971 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2973 GtkWidget *menuitem;
2976 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2979 gtk_option_menu_set_history(optmenu, index);
2981 gtk_option_menu_set_history(optmenu, 0);
2982 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2985 menu = gtk_option_menu_get_menu(optmenu);
2986 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2987 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2990 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2993 GtkWidget *menuitem;
2995 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2996 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2997 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2998 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3001 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
3003 SendDialogMode mode = *((SendDialogMode *)pparam->data);
3004 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3006 GtkWidget *menuitem;
3009 case SEND_DIALOG_ALWAYS:
3010 gtk_option_menu_set_history(optmenu, 0);
3012 case SEND_DIALOG_NEVER:
3013 gtk_option_menu_set_history(optmenu, 1);
3019 menu = gtk_option_menu_get_menu(optmenu);
3020 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3021 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3024 static void prefs_common_apply(void)
3026 MainWindow *mainwindow;
3028 prefs_set_data_from_dialog(param);
3029 sock_set_io_timeout(prefs_common.io_timeout_secs);
3030 main_window_reflect_prefs_all_real(FALSE);
3031 prefs_common_write_config();
3033 mainwindow = mainwindow_get_mainwindow();
3034 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3035 prefs_common.loglength);
3037 inc_autocheck_timer_remove();
3038 inc_autocheck_timer_set();
3041 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3044 GtkWidget *menuitem;
3046 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3047 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3048 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3049 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3052 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3054 NextUnreadMsgDialogShow dialog_show;
3055 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3057 GtkWidget *menuitem;
3059 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3061 switch (dialog_show) {
3062 case NEXTUNREADMSGDIALOG_ALWAYS:
3063 gtk_option_menu_set_history(optmenu, 0);
3065 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3066 gtk_option_menu_set_history(optmenu, 1);
3068 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3069 gtk_option_menu_set_history(optmenu, 2);
3073 menu = gtk_option_menu_get_menu(optmenu);
3074 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3075 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3079 static void prefs_common_cancel(void)
3081 gtk_widget_hide(dialog.window);
3086 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3089 GtkWidget *menuitem;
3091 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3092 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3093 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3094 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3097 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3099 RecvDialogShow dialog_show;
3100 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3102 GtkWidget *menuitem;
3104 dialog_show = *((RecvDialogShow *)pparam->data);
3106 switch (dialog_show) {
3107 case RECVDIALOG_ALWAYS:
3108 gtk_option_menu_set_history(optmenu, 0);
3110 case RECVDIALOG_WINDOW_ACTIVE:
3111 gtk_option_menu_set_history(optmenu, 1);
3113 case RECVDIALOG_NEVER:
3114 gtk_option_menu_set_history(optmenu, 2);
3119 menu = gtk_option_menu_get_menu(optmenu);
3120 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3121 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));