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 *spinbtn_linespc;
151 GtkObject *spinbtn_linespc_adj;
153 GtkWidget *chkbtn_smoothscroll;
154 GtkWidget *spinbtn_scrollstep;
155 GtkObject *spinbtn_scrollstep_adj;
156 GtkWidget *chkbtn_halfpage;
158 GtkWidget *chkbtn_attach_desc;
161 static struct Interface {
162 /* GtkWidget *checkbtn_emacs; */
163 GtkWidget *checkbtn_always_show_msg;
164 GtkWidget *checkbtn_openunread;
165 GtkWidget *checkbtn_mark_as_read_on_newwin;
166 GtkWidget *checkbtn_openinbox;
167 GtkWidget *checkbtn_immedexec;
168 GtkWidget *optmenu_nextunreadmsgdialog;
171 static struct Other {
172 GtkWidget *checkbtn_addaddrbyclick;
173 GtkWidget *checkbtn_confonexit;
174 GtkWidget *checkbtn_cleanonexit;
175 GtkWidget *checkbtn_askonclean;
176 GtkWidget *checkbtn_warnqueued;
177 GtkWidget *checkbtn_cliplog;
178 GtkWidget *loglength_entry;
181 GtkWidget *checkbtn_ssl_ask_unknown_valid;
185 GtkWidget *spinbtn_iotimeout;
186 GtkObject *spinbtn_iotimeout_adj;
189 static struct KeybindDialog {
194 static void prefs_common_charset_set_data_from_optmenu (PrefParam *pparam);
195 static void prefs_common_charset_set_optmenu (PrefParam *pparam);
196 static void prefs_common_encoding_set_data_from_optmenu (PrefParam *pparam);
197 static void prefs_common_encoding_set_optmenu (PrefParam *pparam);
198 static void prefs_common_recv_dialog_set_data_from_optmenu (PrefParam *pparam);
199 static void prefs_common_recv_dialog_set_optmenu (PrefParam *pparam);
200 static void prefs_common_recv_dialog_newmail_notify_toggle_cb (GtkWidget *w,
202 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam);
203 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam);
204 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam);
205 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam);
206 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam);
207 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam);
210 parameter name, default value, pointer to the prefs variable, data type,
211 pointer to the widget pointer,
212 pointer to the function for data setting,
213 pointer to the function for widget setting
216 static PrefParam param[] = {
218 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
219 &receive.checkbtn_incext,
220 prefs_set_data_from_toggle, prefs_set_toggle},
221 {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_cmd, P_STRING,
222 &receive.entry_incext,
223 prefs_set_data_from_entry, prefs_set_entry},
225 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
226 &receive.checkbtn_autochk,
227 prefs_set_data_from_toggle, prefs_set_toggle},
228 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
229 &receive.spinbtn_autochk,
230 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
231 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
232 &receive.checkbtn_chkonstartup,
233 prefs_set_data_from_toggle, prefs_set_toggle},
234 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
235 P_BOOL, &receive.checkbtn_scan_after_inc,
236 prefs_set_data_from_toggle, prefs_set_toggle},
237 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
238 P_BOOL, &receive.checkbtn_newmail_manu,
239 prefs_set_data_from_toggle, prefs_set_toggle},
240 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
241 P_BOOL, &receive.checkbtn_newmail_auto,
242 prefs_set_data_from_toggle, prefs_set_toggle},
243 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING,
244 &receive.entry_newmail_notify_cmd,
245 prefs_set_data_from_entry, prefs_set_entry},
246 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
247 &receive.optmenu_recvdialog,
248 prefs_common_recv_dialog_set_data_from_optmenu,
249 prefs_common_recv_dialog_set_optmenu},
250 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
251 P_BOOL, &receive.checkbtn_no_recv_err_panel,
252 prefs_set_data_from_toggle, prefs_set_toggle},
253 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
254 P_BOOL, &receive.checkbtn_close_recv_dialog,
255 prefs_set_data_from_toggle, prefs_set_toggle},
258 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
259 &p_send.checkbtn_savemsg,
260 prefs_set_data_from_toggle, prefs_set_toggle},
261 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
262 &p_send.optmenu_senddialog,
263 prefs_common_send_dialog_set_data_from_optmenu,
264 prefs_common_send_dialog_set_optmenu},
266 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
267 &p_send.optmenu_charset,
268 prefs_common_charset_set_data_from_optmenu,
269 prefs_common_charset_set_optmenu},
270 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
271 &p_send.optmenu_encoding_method,
272 prefs_common_encoding_set_data_from_optmenu,
273 prefs_common_encoding_set_optmenu},
275 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
276 P_BOOL, NULL, NULL, NULL},
279 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
280 &compose.checkbtn_autoextedit,
281 prefs_set_data_from_toggle, prefs_set_toggle},
282 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
283 P_BOOL, &compose.checkbtn_forward_as_attachment,
284 prefs_set_data_from_toggle, prefs_set_toggle},
285 {"redirect_keep_from", "FALSE",
286 &prefs_common.redirect_keep_from, P_BOOL,
287 &compose.checkbtn_redirect_keep_from,
288 prefs_set_data_from_toggle, prefs_set_toggle},
289 {"undo_level", "50", &prefs_common.undolevels, P_INT,
290 &compose.spinbtn_undolevel,
291 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
293 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
295 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
297 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
299 {"linewrap_before_sending", "FALSE", &prefs_common.linewrap_at_send, P_BOOL,
301 {"autosave", "FALSE", &prefs_common.autosave,
302 P_BOOL, &compose.checkbtn_autosave,
303 prefs_set_data_from_toggle, prefs_set_toggle},
304 {"autosave_length", "50", &prefs_common.autosave_length,
305 P_INT, &compose.entry_autosave_length,
306 prefs_set_data_from_entry, prefs_set_entry},
308 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
310 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
312 {"dictionary", "", &prefs_common.dictionary, P_STRING,
314 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
316 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
318 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
320 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
323 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
324 &compose.checkbtn_reply_with_quote, prefs_set_data_from_toggle, prefs_set_toggle},
326 /* Account autoselection */
327 {"reply_account_autoselect", "TRUE",
328 &prefs_common.reply_account_autosel, P_BOOL,
329 &compose.checkbtn_reply_account_autosel,
330 prefs_set_data_from_toggle, prefs_set_toggle},
331 {"forward_account_autoselect", "TRUE",
332 &prefs_common.forward_account_autosel, P_BOOL,
333 &compose.checkbtn_forward_account_autosel,
334 prefs_set_data_from_toggle, prefs_set_toggle},
335 {"reedit_account_autoselect", "TRUE",
336 &prefs_common.reedit_account_autosel, P_BOOL,
337 &compose.checkbtn_reedit_account_autosel,
338 prefs_set_data_from_toggle, prefs_set_toggle},
340 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
341 &compose.checkbtn_default_reply_list,
342 prefs_set_data_from_toggle, prefs_set_toggle},
344 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
348 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
349 "e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
350 {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
351 &prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
352 prefs_set_data_from_text, prefs_set_text},
354 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
355 "e.entry_fw_quotemark,
356 prefs_set_data_from_entry, prefs_set_entry},
357 {"forward_quote_format",
358 "\\n\\nBegin forwarded message:\\n\\n"
359 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
360 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M",
361 &prefs_common.fw_quotefmt, P_STRING, "e.text_fw_quotefmt,
362 prefs_set_data_from_text, prefs_set_text},
363 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
364 "e.entry_quote_chars, prefs_set_data_from_entry, prefs_set_entry},
367 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
368 {"widget_font", NULL,
369 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
370 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
371 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
372 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
373 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
374 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
375 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
376 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
377 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
380 {"widget_font_gtk2", NULL,
381 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
382 {"message_font_gtk2", "Monospace 9",
383 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
384 {"small_font_gtk2", "Sans 9",
385 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
386 {"bold_font_gtk2", "Sans Bold 9",
387 &prefs_common.boldfont, P_STRING, NULL, NULL, NULL},
388 {"normal_font_gtk2", "Sans 9",
389 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
392 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
394 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
396 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
399 {"display_folder_unread_num", "TRUE",
400 &prefs_common.display_folder_unread, P_BOOL,
401 &display.chkbtn_folder_unread,
402 prefs_set_data_from_toggle, prefs_set_toggle},
403 {"newsgroup_abbrev_len", "16",
404 &prefs_common.ng_abbrev_len, P_INT,
405 &display.spinbtn_ng_abbrev_len,
406 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
408 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
409 &display.chkbtn_transhdr,
410 prefs_set_data_from_toggle, prefs_set_toggle},
412 /* Display: Summary View */
413 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
414 &display.chkbtn_swapfrom,
415 prefs_set_data_from_toggle, prefs_set_toggle},
416 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
417 &display.chkbtn_useaddrbook,
418 prefs_set_data_from_toggle, prefs_set_toggle},
419 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
420 &display.chkbtn_threadsubj,
421 prefs_set_data_from_toggle, prefs_set_toggle},
422 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
423 P_STRING, &display.entry_datefmt,
424 prefs_set_data_from_entry, prefs_set_entry},
426 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
428 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
430 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
431 P_INT, NULL, NULL, NULL },
433 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
435 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
437 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
439 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
442 {"folderview_vscrollbar_policy", "0",
443 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
446 {"summary_col_show_mark", "TRUE",
447 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_unread", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_mime", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_subject", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_from", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_date", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_size", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_number", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_score", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_locked", "FALSE",
465 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
467 {"summary_col_pos_mark", "0",
468 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_unread", "1",
470 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_mime", "2",
472 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_subject", "3",
474 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_from", "4",
476 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_date", "5",
478 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_size", "6",
480 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_number", "7",
482 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_score", "8",
484 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_locked", "9",
486 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_mark", "10",
489 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_unread", "13",
491 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_mime", "10",
493 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_subject", "200",
495 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_from", "120",
497 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_date", "118",
499 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_size", "45",
501 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_number", "40",
503 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_score", "40",
505 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_locked", "13",
507 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
510 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
512 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
514 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
516 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
518 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
521 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
523 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
525 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
527 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
530 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
532 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
535 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
537 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
539 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
541 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
543 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
546 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
548 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
550 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
552 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
554 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
556 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
558 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
560 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
562 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
564 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
566 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
568 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
570 {"compose_width", "600", &prefs_common.compose_width, P_INT,
572 {"compose_height", "560", &prefs_common.compose_height, P_INT,
574 {"compose_x", "0", &prefs_common.compose_x, P_INT,
576 {"compose_y", "0", &prefs_common.compose_y, P_INT,
579 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
582 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
584 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
586 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
588 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
590 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
592 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
594 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
595 P_BOOL, NULL, NULL, NULL},
597 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
598 &message.chkbtn_mbalnum,
599 prefs_set_data_from_toggle, prefs_set_toggle},
600 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
601 P_BOOL, &message.chkbtn_disphdrpane,
602 prefs_set_data_from_toggle, prefs_set_toggle},
603 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
604 &message.chkbtn_disphdr,
605 prefs_set_data_from_toggle, prefs_set_toggle},
606 {"line_space", "2", &prefs_common.line_space, P_INT,
607 &message.spinbtn_linespc,
608 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
610 {"enable_smooth_scroll", "FALSE",
611 &prefs_common.enable_smooth_scroll, P_BOOL,
612 &message.chkbtn_smoothscroll,
613 prefs_set_data_from_toggle, prefs_set_toggle},
614 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
615 &message.spinbtn_scrollstep,
616 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
617 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
618 &message.chkbtn_halfpage,
619 prefs_set_data_from_toggle, prefs_set_toggle},
621 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
624 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
625 &message.chkbtn_attach_desc,
626 prefs_set_data_from_toggle, prefs_set_toggle},
627 {"attach_save_directory", NULL,
628 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
631 {"mime_image_viewer", "display '%s'",
632 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
633 {"mime_audio_player", "play '%s'",
634 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
635 {"mime_open_command", "gedit '%s'",
636 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
639 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
641 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
644 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
645 NULL, NULL, NULL}, */
646 {"always_show_message_when_selected", "FALSE",
647 &prefs_common.always_show_msg,
648 P_BOOL, &interface.checkbtn_always_show_msg,
649 prefs_set_data_from_toggle, prefs_set_toggle},
650 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
651 P_BOOL, &interface.checkbtn_openunread,
652 prefs_set_data_from_toggle, prefs_set_toggle},
653 {"mark_as_read_on_new_window", "FALSE",
654 &prefs_common.mark_as_read_on_new_window,
655 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
656 prefs_set_data_from_toggle, prefs_set_toggle},
657 {"mark_as_read_delay", "0",
658 &prefs_common.mark_as_read_delay, P_INT,
660 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
661 P_BOOL, &interface.checkbtn_openinbox,
662 prefs_set_data_from_toggle, prefs_set_toggle},
663 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
664 &interface.checkbtn_immedexec,
665 prefs_set_data_from_toggle, prefs_set_toggle},
666 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
667 &interface.optmenu_nextunreadmsgdialog,
668 prefs_nextunreadmsgdialog_set_data_from_optmenu,
669 prefs_nextunreadmsgdialog_set_optmenu},
671 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
672 &prefs_common.pixmap_theme_path, P_STRING,
675 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
679 {"uri_open_command", DEFAULT_BROWSER_CMD,
680 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
681 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
683 {"ext_editor_command", "gedit %s",
684 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
686 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
687 P_BOOL, &other.checkbtn_addaddrbyclick,
688 prefs_set_data_from_toggle, prefs_set_toggle},
690 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
691 &other.checkbtn_confonexit,
692 prefs_set_data_from_toggle, prefs_set_toggle},
693 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
694 &other.checkbtn_cleanonexit,
695 prefs_set_data_from_toggle, prefs_set_toggle},
696 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
697 &other.checkbtn_askonclean,
698 prefs_set_data_from_toggle, prefs_set_toggle},
699 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
700 P_BOOL, &other.checkbtn_warnqueued,
701 prefs_set_data_from_toggle, prefs_set_toggle},
704 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
705 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
706 prefs_set_data_from_toggle, prefs_set_toggle},
709 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
711 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
713 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
715 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
718 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
719 P_INT, &other.spinbtn_iotimeout,
720 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
721 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
723 {"important_score", "1", &prefs_common.important_score, P_INT,
725 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
726 &other.checkbtn_cliplog,
727 prefs_set_data_from_toggle, prefs_set_toggle},
728 {"log_length", "500", &prefs_common.loglength, P_INT,
729 &other.loglength_entry,
730 prefs_set_data_from_entry, prefs_set_entry},
732 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
734 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
737 {"color_new", "179", &prefs_common.color_new, P_COLOR,
740 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
743 /* widget creating functions */
744 static void prefs_common_create (void);
745 static void prefs_receive_create (void);
746 static void prefs_send_create (void);
747 static void prefs_compose_create (void);
748 static void prefs_quote_create (void);
749 static void prefs_display_create (void);
750 static void prefs_message_create (void);
751 static void prefs_interface_create (void);
752 static void prefs_other_create (void);
754 static void date_format_ok_btn_clicked (GtkButton *button,
756 static void date_format_cancel_btn_clicked (GtkButton *button,
758 static gboolean date_format_key_pressed (GtkWidget *keywidget,
761 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
764 static void date_format_entry_on_change (GtkEditable *editable,
766 static void date_format_select_row (GtkTreeView *list_view,
768 GtkTreeViewColumn *column,
769 GtkWidget *date_format);
770 static GtkWidget *date_format_create (GtkButton *button,
773 static void prefs_keybind_select (void);
774 static gint prefs_keybind_deleted (GtkWidget *widget,
777 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
780 static void prefs_keybind_cancel (void);
781 static void prefs_keybind_apply_clicked (GtkWidget *widget);
783 static void prefs_common_apply (void);
785 typedef struct CommonPage
792 static CommonPage common_page;
794 static void create_widget_func(PrefsPage * _page,
798 CommonPage *page = (CommonPage *) _page;
801 vbox = gtk_vbox_new(FALSE, 6);
802 gtk_widget_show(vbox);
804 if (notebook == NULL)
805 prefs_common_create();
806 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
807 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
809 prefs_set_dialog(param);
813 page->page.widget = vbox;
816 static void destroy_widget_func(PrefsPage *_page)
818 CommonPage *page = (CommonPage *) _page;
820 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
823 static void save_func(PrefsPage * _page)
825 prefs_common_apply();
828 void prefs_common_init(void)
830 static gchar *path[2];
832 prefs_common.disphdr_list = NULL;
834 path[0] = _("Common");
837 common_page.page.path = path;
838 common_page.page.weight = 1000.0;
839 common_page.page.create_widget = create_widget_func;
840 common_page.page.destroy_widget = destroy_widget_func;
841 common_page.page.save_page = save_func;
843 prefs_gtk_register_page((PrefsPage *) &common_page);
846 PrefsCommon *prefs_common_get(void)
848 return &prefs_common;
852 * Read history list from the specified history file
854 GList *prefs_common_read_history(const gchar *history)
858 gchar buf[PREFSBUFSIZE];
861 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
863 if ((fp = fopen(path, "rb")) == NULL) {
864 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
869 while (fgets(buf, sizeof(buf), fp) != NULL) {
871 if (buf[0] == '\0') continue;
872 tmp = add_history(tmp, buf);
876 tmp = g_list_reverse(tmp);
881 void prefs_common_read_config(void)
885 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
886 prefs_read_config(param, "Common", rcpath, NULL);
889 prefs_common.mime_open_cmd_history =
890 prefs_common_read_history(COMMAND_HISTORY);
891 prefs_common.summary_quicksearch_history =
892 prefs_common_read_history(QUICKSEARCH_HISTORY);
896 * Save history list to the specified history file
898 void prefs_common_save_history(const gchar *history, GList *list)
904 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
906 if ((fp = fopen(path, "wb")) == NULL) {
907 FILE_OP_ERROR(path, "fopen");
912 for (cur = list; cur != NULL; cur = cur->next) {
913 fputs((gchar *)cur->data, fp);
921 void prefs_common_write_config(void)
923 prefs_write_config(param, "Common", COMMON_RC);
925 prefs_common_save_history(COMMAND_HISTORY,
926 prefs_common.mime_open_cmd_history);
927 prefs_common_save_history(QUICKSEARCH_HISTORY,
928 prefs_common.summary_quicksearch_history);
931 static void prefs_common_create(void)
935 debug_print("Creating common preferences window...\n");
937 notebook = gtk_notebook_new ();
938 gtk_widget_show(notebook);
939 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
940 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
941 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
943 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
945 gtk_widget_ref(notebook);
947 /* create all widgets on notebook */
948 prefs_receive_create();
949 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
951 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
952 prefs_compose_create();
953 SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
954 prefs_quote_create();
955 SET_NOTEBOOK_LABEL(notebook, _("Quote"), page++);
956 prefs_display_create();
957 SET_NOTEBOOK_LABEL(notebook, _("Display"), page++);
958 prefs_message_create();
959 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
960 prefs_interface_create();
961 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
962 prefs_other_create();
963 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
965 gtk_widget_show_all(notebook);
968 static void prefs_receive_create(void)
972 GtkWidget *frame_incext;
973 GtkWidget *checkbtn_incext;
975 GtkWidget *label_incext;
976 GtkWidget *entry_incext;
977 /* GtkWidget *button_incext; */
979 GtkWidget *hbox_autochk;
980 GtkWidget *checkbtn_autochk;
981 GtkWidget *label_autochk1;
982 GtkObject *spinbtn_autochk_adj;
983 GtkWidget *spinbtn_autochk;
984 GtkWidget *label_autochk2;
985 GtkWidget *checkbtn_chkonstartup;
986 GtkWidget *checkbtn_scan_after_inc;
989 GtkWidget *frame_newmail;
990 GtkWidget *hbox_newmail_notify;
991 GtkWidget *checkbtn_newmail_auto;
992 GtkWidget *checkbtn_newmail_manu;
993 GtkWidget *entry_newmail_notify_cmd;
994 GtkWidget *label_newmail_notify_cmd;
996 GtkWidget *hbox_recvdialog;
997 GtkWidget *label_recvdialog;
1000 GtkWidget *optmenu_recvdialog;
1001 GtkWidget *checkbtn_no_recv_err_panel;
1002 GtkWidget *checkbtn_close_recv_dialog;
1004 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1005 gtk_widget_show (vbox1);
1006 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1007 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1009 PACK_FRAME(vbox1, frame_incext, _("External program"));
1011 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1012 gtk_widget_show (vbox2);
1013 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1014 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1016 /* Use of external incorporation program */
1017 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1018 _("Use external program for incorporation"));
1020 hbox = gtk_hbox_new (FALSE, 8);
1021 gtk_widget_show (hbox);
1022 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1023 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1025 label_incext = gtk_label_new (_("Command"));
1026 gtk_widget_show (label_incext);
1027 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1029 entry_incext = gtk_entry_new ();
1030 gtk_widget_show (entry_incext);
1031 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1034 button_incext = gtk_button_new_with_label ("... ");
1035 gtk_widget_show (button_incext);
1036 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1039 vbox2 = gtk_vbox_new (FALSE, 0);
1040 gtk_widget_show (vbox2);
1041 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1044 hbox_autochk = gtk_hbox_new (FALSE, 8);
1045 gtk_widget_show (hbox_autochk);
1046 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1048 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1049 _("Auto-check new mail"));
1051 label_autochk1 = gtk_label_new (_("every"));
1052 gtk_widget_show (label_autochk1);
1053 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1055 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1056 spinbtn_autochk = gtk_spin_button_new
1057 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1058 gtk_widget_show (spinbtn_autochk);
1059 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1060 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1061 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1063 label_autochk2 = gtk_label_new (_("minute(s)"));
1064 gtk_widget_show (label_autochk2);
1065 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1067 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1068 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1069 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1071 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1072 _("Check new mail on startup"));
1073 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1074 _("Update all local folders after incorporation"));
1077 /* receive dialog */
1078 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1079 gtk_widget_show (hbox_recvdialog);
1080 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1082 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1083 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1084 gtk_widget_show (label_recvdialog);
1085 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1087 optmenu_recvdialog = gtk_option_menu_new ();
1088 gtk_widget_show (optmenu_recvdialog);
1089 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1091 menu = gtk_menu_new ();
1092 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1093 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1094 RECV_DIALOG_MANUAL);
1095 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1097 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1099 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1100 _("Don't popup error dialog on receive error"));
1102 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1103 _("Close receive dialog when finished"));
1105 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1107 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1108 gtk_widget_show (vbox2);
1109 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1110 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1112 hbox = gtk_hbox_new (TRUE, 8);
1113 gtk_widget_show (hbox);
1114 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1115 _("after autochecking"));
1116 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1117 _("after manual checking"));
1118 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1119 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1120 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1122 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1123 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1126 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1127 gtk_widget_show (hbox);
1128 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1131 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1132 "(use %d as number of new "
1134 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1136 gtk_widget_show (label_newmail_notify_cmd);
1137 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1138 label_newmail_notify_cmd, FALSE, FALSE, 0);
1140 entry_newmail_notify_cmd = gtk_entry_new ();
1141 gtk_widget_show (entry_newmail_notify_cmd);
1142 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1143 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1145 gtk_widget_set_sensitive(hbox_newmail_notify,
1146 prefs_common.newmail_notify_auto ||
1147 prefs_common.newmail_notify_manu);
1149 receive.checkbtn_incext = checkbtn_incext;
1150 receive.entry_incext = entry_incext;
1151 /* receive.button_incext = button_incext; */
1153 receive.checkbtn_autochk = checkbtn_autochk;
1154 receive.spinbtn_autochk = spinbtn_autochk;
1155 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1157 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1158 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1161 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1162 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1163 receive.hbox_newmail_notify = hbox_newmail_notify;
1164 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1165 receive.optmenu_recvdialog = optmenu_recvdialog;
1166 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1167 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1170 static void prefs_send_create(void)
1175 GtkWidget *checkbtn_savemsg;
1176 GtkWidget *label_outcharset;
1177 GtkWidget *optmenu_charset;
1178 GtkWidget *optmenu_menu;
1179 GtkWidget *menuitem;
1180 GtkTooltips *charset_tooltip;
1181 GtkWidget *optmenu_encoding;
1182 GtkWidget *label_encoding;
1183 GtkTooltips *encoding_tooltip;
1184 GtkWidget *label_senddialog;
1186 GtkWidget *optmenu_senddialog;
1187 GtkWidget *hbox_senddialog;
1189 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1190 gtk_widget_show (vbox1);
1191 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1192 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1194 vbox2 = gtk_vbox_new (FALSE, 0);
1195 gtk_widget_show (vbox2);
1196 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1198 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1199 _("Save sent messages to Sent folder"));
1201 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1202 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1204 label_senddialog = gtk_label_new (_("Show send dialog"));
1205 gtk_widget_show (label_senddialog);
1206 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1208 optmenu_senddialog = gtk_option_menu_new ();
1209 gtk_widget_show (optmenu_senddialog);
1210 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1212 menu = gtk_menu_new ();
1213 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1214 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1216 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1218 hbox1 = gtk_hbox_new (FALSE, 8);
1219 gtk_widget_show (hbox1);
1220 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1222 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1223 gtk_widget_show (label_outcharset);
1224 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1226 charset_tooltip = gtk_tooltips_new();
1228 optmenu_charset = gtk_option_menu_new ();
1229 gtk_widget_show (optmenu_charset);
1230 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1231 _("If `Automatic' is selected, the optimal encoding"
1232 " for the current locale will be used"),
1234 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1236 optmenu_menu = gtk_menu_new ();
1238 #define SET_MENUITEM(str, data) \
1240 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1243 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1244 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1245 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1246 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1247 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1248 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1249 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1250 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1251 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1252 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1253 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1254 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1255 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1256 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1257 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1259 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1260 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1262 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1263 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1265 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1266 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1268 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1269 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1270 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1272 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1275 hbox1 = gtk_hbox_new (FALSE, 8);
1276 gtk_widget_show (hbox1);
1277 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1279 hbox1 = gtk_hbox_new (FALSE, 8);
1280 gtk_widget_show (hbox1);
1281 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1283 label_encoding = gtk_label_new (_("Transfer encoding"));
1284 gtk_widget_show (label_encoding);
1285 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1287 encoding_tooltip = gtk_tooltips_new();
1289 optmenu_encoding = gtk_option_menu_new ();
1290 gtk_widget_show (optmenu_encoding);
1291 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1292 _("Specify Content-Transfer-Encoding used when"
1293 " message body contains non-ASCII characters"),
1295 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1297 optmenu_menu = gtk_menu_new ();
1299 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1300 SET_MENUITEM("base64", CTE_BASE64);
1301 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1302 SET_MENUITEM("8bit", CTE_8BIT);
1304 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1307 hbox1 = gtk_hbox_new (FALSE, 8);
1308 gtk_widget_show (hbox1);
1309 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1311 p_send.checkbtn_savemsg = checkbtn_savemsg;
1312 p_send.optmenu_senddialog = optmenu_senddialog;
1314 p_send.optmenu_charset = optmenu_charset;
1315 p_send.optmenu_encoding_method = optmenu_encoding;
1318 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1322 toggled = gtk_toggle_button_get_active
1323 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1324 gtk_toggle_button_get_active
1325 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1326 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1329 static void prefs_compose_create(void)
1334 GtkWidget *checkbtn_autoextedit;
1336 GtkWidget *frame_autosel;
1337 GtkWidget *hbox_autosel;
1338 GtkWidget *checkbtn_reply_account_autosel;
1339 GtkWidget *checkbtn_forward_account_autosel;
1340 GtkWidget *checkbtn_reedit_account_autosel;
1342 GtkWidget *hbox_undolevel;
1343 GtkWidget *label_undolevel;
1344 GtkObject *spinbtn_undolevel_adj;
1345 GtkWidget *spinbtn_undolevel;
1349 GtkWidget *checkbtn_default_reply_list;
1351 GtkWidget *checkbtn_forward_as_attachment;
1352 GtkWidget *checkbtn_redirect_keep_from;
1354 GtkWidget *hbox_autosave;
1355 GtkWidget *checkbtn_autosave;
1356 GtkWidget *entry_autosave_length;
1357 GtkWidget *label_autosave_length;
1359 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1360 gtk_widget_show (vbox1);
1361 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1362 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1364 /* Account autoselection */
1365 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1367 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1368 gtk_widget_show (hbox_autosel);
1369 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1370 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1372 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1373 _("when replying"));
1374 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1375 _("when forwarding"));
1376 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1377 _("when re-editing"));
1379 vbox2 = gtk_vbox_new (FALSE, 0);
1380 gtk_widget_show (vbox2);
1381 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1383 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1384 _("Reply button invokes mailing list reply"));
1386 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1387 _("Automatically launch the external editor"));
1389 hbox5 = gtk_hbox_new (FALSE, 8);
1390 gtk_widget_show (hbox5);
1391 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1393 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1394 _("Forward as attachment"));
1396 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1397 _("Keep the original 'From' header when redirecting"));
1400 hbox_autosave = gtk_hbox_new (FALSE, 8);
1401 gtk_widget_show (hbox_autosave);
1402 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1404 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1405 _("Autosave to Drafts folder every "));
1407 entry_autosave_length = gtk_entry_new();
1408 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1409 gtk_widget_show (entry_autosave_length);
1410 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1412 label_autosave_length = gtk_label_new(_("characters"));
1413 gtk_widget_show (label_autosave_length);
1414 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1416 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1417 gtk_widget_show (hbox_undolevel);
1418 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1420 label_undolevel = gtk_label_new (_("Undo level"));
1421 gtk_widget_show (label_undolevel);
1422 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1424 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1425 spinbtn_undolevel = gtk_spin_button_new
1426 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1427 gtk_widget_show (spinbtn_undolevel);
1428 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1429 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1430 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1433 compose.checkbtn_quote = checkbtn_quote;
1434 compose.entry_quotemark = entry_quotemark;
1435 compose.text_quotefmt = text_quotefmt;
1438 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1440 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1441 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1442 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1444 compose.spinbtn_undolevel = spinbtn_undolevel;
1445 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1447 compose.checkbtn_autosave = checkbtn_autosave;
1448 compose.entry_autosave_length = entry_autosave_length;
1450 compose.checkbtn_forward_as_attachment =
1451 checkbtn_forward_as_attachment;
1452 compose.checkbtn_redirect_keep_from =
1453 checkbtn_redirect_keep_from;
1454 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1457 static void prefs_quote_create(void)
1460 GtkWidget *frame_quote;
1461 GtkWidget *vbox_quote;
1464 GtkWidget *label_quotemark;
1465 GtkWidget *entry_quotemark;
1466 GtkWidget *scrolledwin_quotefmt;
1467 GtkWidget *text_quotefmt;
1469 GtkWidget *entry_fw_quotemark;
1470 GtkWidget *text_fw_quotefmt;
1472 GtkWidget *entry_quote_chars;
1473 GtkWidget *label_quote_chars;
1475 GtkWidget *btn_quotedesc;
1477 GtkWidget *checkbtn_reply_with_quote;
1479 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1480 gtk_widget_show (vbox1);
1481 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1482 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1486 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1488 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1490 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1491 gtk_widget_show (vbox_quote);
1492 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1493 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1495 hbox1 = gtk_hbox_new (FALSE, 32);
1496 gtk_widget_show (hbox1);
1497 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1499 hbox2 = gtk_hbox_new (FALSE, 8);
1500 gtk_widget_show (hbox2);
1501 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1503 label_quotemark = gtk_label_new (_("Quotation mark"));
1504 gtk_widget_show (label_quotemark);
1505 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1507 entry_quotemark = gtk_entry_new ();
1508 gtk_widget_show (entry_quotemark);
1509 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1510 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1512 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1513 gtk_widget_show (scrolledwin_quotefmt);
1514 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1516 gtk_scrolled_window_set_policy
1517 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1518 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1519 gtk_scrolled_window_set_shadow_type
1520 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1522 text_quotefmt = gtk_text_view_new ();
1523 gtk_widget_show (text_quotefmt);
1524 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1525 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
1526 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1530 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1532 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1533 gtk_widget_show (vbox_quote);
1534 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1535 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1537 hbox1 = gtk_hbox_new (FALSE, 32);
1538 gtk_widget_show (hbox1);
1539 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1541 hbox2 = gtk_hbox_new (FALSE, 8);
1542 gtk_widget_show (hbox2);
1543 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1545 label_quotemark = gtk_label_new (_("Quotation mark"));
1546 gtk_widget_show (label_quotemark);
1547 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1549 entry_fw_quotemark = gtk_entry_new ();
1550 gtk_widget_show (entry_fw_quotemark);
1551 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1553 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1555 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1556 gtk_widget_show (scrolledwin_quotefmt);
1557 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
1559 gtk_scrolled_window_set_policy
1560 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1561 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1562 gtk_scrolled_window_set_shadow_type
1563 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
1565 text_fw_quotefmt = gtk_text_view_new ();
1566 gtk_widget_show (text_fw_quotefmt);
1567 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1569 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1570 gtk_widget_set_size_request (text_fw_quotefmt, -1, 60);
1572 hbox1 = gtk_hbox_new (FALSE, 32);
1573 gtk_widget_show (hbox1);
1574 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1577 gtk_button_new_with_label (_(" Description of symbols "));
1578 gtk_widget_show (btn_quotedesc);
1579 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1580 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1581 G_CALLBACK(quote_fmt_quote_description), NULL);
1585 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1587 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1588 gtk_widget_show (vbox_quote);
1589 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1590 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1592 hbox1 = gtk_hbox_new (FALSE, 32);
1593 gtk_widget_show (hbox1);
1594 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1596 hbox2 = gtk_hbox_new (FALSE, 8);
1597 gtk_widget_show (hbox2);
1598 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1600 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1601 gtk_widget_show (label_quote_chars);
1602 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1604 entry_quote_chars = gtk_entry_new ();
1605 gtk_widget_show (entry_quote_chars);
1606 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1608 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1611 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1612 quote.entry_quotemark = entry_quotemark;
1613 quote.text_quotefmt = text_quotefmt;
1614 quote.entry_fw_quotemark = entry_fw_quotemark;
1615 quote.text_fw_quotefmt = text_fw_quotefmt;
1616 quote.entry_quote_chars = entry_quote_chars;
1619 static void prefs_display_create(void)
1622 GtkWidget *chkbtn_transhdr;
1623 GtkWidget *chkbtn_folder_unread;
1625 GtkWidget *label_ng_abbrev;
1626 GtkWidget *spinbtn_ng_abbrev_len;
1627 GtkObject *spinbtn_ng_abbrev_len_adj;
1628 GtkWidget *frame_summary;
1630 GtkWidget *chkbtn_swapfrom;
1631 GtkWidget *chkbtn_useaddrbook;
1632 GtkWidget *chkbtn_threadsubj;
1634 GtkWidget *label_datefmt;
1635 GtkWidget *button_datefmt;
1636 GtkWidget *entry_datefmt;
1637 GtkWidget *button_dispitem;
1639 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1640 gtk_widget_show (vbox1);
1641 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1642 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1644 vbox2 = gtk_vbox_new (FALSE, 0);
1645 gtk_widget_show (vbox2);
1646 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1649 (vbox2, chkbtn_transhdr,
1650 _("Translate header name (such as `From:', `Subject:')"));
1652 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1653 _("Display unread number next to folder name"));
1655 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1657 hbox1 = gtk_hbox_new (FALSE, 8);
1658 gtk_widget_show (hbox1);
1659 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1661 label_ng_abbrev = gtk_label_new
1662 (_("Abbreviate newsgroup names longer than"));
1663 gtk_widget_show (label_ng_abbrev);
1664 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1666 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1667 spinbtn_ng_abbrev_len = gtk_spin_button_new
1668 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1669 gtk_widget_show (spinbtn_ng_abbrev_len);
1670 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1672 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1673 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1676 label_ng_abbrev = gtk_label_new
1678 gtk_widget_show (label_ng_abbrev);
1679 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1681 /* ---- Summary ---- */
1683 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1685 vbox2 = gtk_vbox_new (FALSE, 0);
1686 gtk_widget_show (vbox2);
1687 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1688 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1691 (vbox2, chkbtn_swapfrom,
1692 _("Display recipient in `From' column if sender is yourself"));
1694 (vbox2, chkbtn_useaddrbook,
1695 _("Display sender using address book"));
1697 (vbox2, chkbtn_threadsubj,
1698 _("Thread using subject in addition to standard headers"));
1700 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1702 hbox1 = gtk_hbox_new (FALSE, 8);
1703 gtk_widget_show (hbox1);
1704 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1706 label_datefmt = gtk_label_new (_("Date format"));
1707 gtk_widget_show (label_datefmt);
1708 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1710 entry_datefmt = gtk_entry_new ();
1711 gtk_widget_show (entry_datefmt);
1712 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1714 button_datefmt = gtk_button_new_with_label (" ... ");
1716 gtk_widget_show (button_datefmt);
1717 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1718 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1719 G_CALLBACK (date_format_create), NULL);
1721 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1723 hbox1 = gtk_hbox_new (FALSE, 8);
1724 gtk_widget_show (hbox1);
1725 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1727 button_dispitem = gtk_button_new_with_label
1728 (_(" Set displayed items in summary... "));
1729 gtk_widget_show (button_dispitem);
1730 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1731 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1732 G_CALLBACK (prefs_summary_column_open),
1735 display.chkbtn_transhdr = chkbtn_transhdr;
1736 display.chkbtn_folder_unread = chkbtn_folder_unread;
1737 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1738 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1740 display.chkbtn_swapfrom = chkbtn_swapfrom;
1741 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1742 display.chkbtn_threadsubj = chkbtn_threadsubj;
1743 display.entry_datefmt = entry_datefmt;
1746 static void prefs_message_create(void)
1752 GtkWidget *chkbtn_mbalnum;
1753 GtkWidget *chkbtn_disphdrpane;
1754 GtkWidget *chkbtn_disphdr;
1755 GtkWidget *button_edit_disphdr;
1756 GtkWidget *hbox_linespc;
1757 GtkWidget *label_linespc;
1758 GtkObject *spinbtn_linespc_adj;
1759 GtkWidget *spinbtn_linespc;
1761 GtkWidget *frame_scr;
1762 GtkWidget *vbox_scr;
1763 GtkWidget *chkbtn_smoothscroll;
1764 GtkWidget *hbox_scr;
1765 GtkWidget *label_scr;
1766 GtkObject *spinbtn_scrollstep_adj;
1767 GtkWidget *spinbtn_scrollstep;
1768 GtkWidget *chkbtn_halfpage;
1770 GtkWidget *chkbtn_attach_desc;
1772 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1773 gtk_widget_show (vbox1);
1774 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1775 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1777 vbox2 = gtk_vbox_new (FALSE, 0);
1778 gtk_widget_show (vbox2);
1779 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1782 (vbox2, chkbtn_mbalnum,
1783 _("Display multi-byte alphanumeric as\n"
1784 "ASCII character (Japanese only)"));
1785 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1788 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1789 _("Display header pane above message view"));
1791 hbox1 = gtk_hbox_new (FALSE, 8);
1792 gtk_widget_show (hbox1);
1793 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1795 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1796 _("Display short headers on message view"));
1798 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1799 gtk_widget_show (button_edit_disphdr);
1800 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1802 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1803 G_CALLBACK (prefs_display_header_open),
1806 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1808 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1810 hbox1 = gtk_hbox_new (FALSE, 32);
1811 gtk_widget_show (hbox1);
1812 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1814 hbox_linespc = gtk_hbox_new (FALSE, 8);
1815 gtk_widget_show (hbox1);
1816 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1818 label_linespc = gtk_label_new (_("Line space"));
1819 gtk_widget_show (label_linespc);
1820 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1823 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1824 spinbtn_linespc = gtk_spin_button_new
1825 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1826 gtk_widget_show (spinbtn_linespc);
1827 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1829 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1830 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1832 label_linespc = gtk_label_new (_("pixel(s)"));
1833 gtk_widget_show (label_linespc);
1834 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1837 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1839 vbox_scr = gtk_vbox_new (FALSE, 0);
1840 gtk_widget_show (vbox_scr);
1841 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1842 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1844 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1846 hbox1 = gtk_hbox_new (FALSE, 32);
1847 gtk_widget_show (hbox1);
1848 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1850 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1852 hbox_scr = gtk_hbox_new (FALSE, 8);
1853 gtk_widget_show (hbox_scr);
1854 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1856 label_scr = gtk_label_new (_("Step"));
1857 gtk_widget_show (label_scr);
1858 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1860 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1861 spinbtn_scrollstep = gtk_spin_button_new
1862 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1863 gtk_widget_show (spinbtn_scrollstep);
1864 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1866 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1867 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1870 label_scr = gtk_label_new (_("pixel(s)"));
1871 gtk_widget_show (label_scr);
1872 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1874 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1876 vbox3 = gtk_vbox_new (FALSE, 0);
1877 gtk_widget_show (vbox3);
1878 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1880 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1881 _("Show attachment descriptions (rather than names)"));
1883 message.chkbtn_mbalnum = chkbtn_mbalnum;
1884 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1885 message.chkbtn_disphdr = chkbtn_disphdr;
1886 message.spinbtn_linespc = spinbtn_linespc;
1888 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1889 message.spinbtn_scrollstep = spinbtn_scrollstep;
1890 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1891 message.chkbtn_halfpage = chkbtn_halfpage;
1893 message.chkbtn_attach_desc = chkbtn_attach_desc;
1896 static void prefs_interface_create(void)
1901 /* GtkWidget *checkbtn_emacs; */
1902 GtkWidget *checkbtn_always_show_msg;
1903 GtkWidget *checkbtn_openunread;
1904 GtkWidget *checkbtn_mark_as_read_on_newwin;
1905 GtkWidget *checkbtn_openinbox;
1906 GtkWidget *checkbtn_immedexec;
1907 GtkTooltips *immedexec_tooltip;
1911 GtkWidget *menuitem;
1913 GtkWidget *button_keybind;
1915 GtkWidget *hbox_nextunreadmsgdialog;
1916 GtkWidget *optmenu_nextunreadmsgdialog;
1918 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1919 gtk_widget_show (vbox1);
1920 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1921 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1923 vbox2 = gtk_vbox_new (FALSE, 0);
1924 gtk_widget_show (vbox2);
1925 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1927 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1928 _("Emulate the behavior of mouse operation of\n"
1929 "Emacs-based mailer"));
1930 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1931 GTK_JUSTIFY_LEFT); */
1934 (vbox2, checkbtn_always_show_msg,
1935 _("Always open messages in summary when selected"));
1938 (vbox2, checkbtn_openunread,
1939 _("Open first unread message when entering a folder"));
1942 (vbox2, checkbtn_mark_as_read_on_newwin,
1943 _("Only mark message as read when opened in new window"));
1946 (vbox2, checkbtn_openinbox,
1947 _("Go to inbox after receiving new mail"));
1949 vbox3 = gtk_vbox_new (FALSE, 0);
1950 gtk_widget_show (vbox3);
1951 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1953 immedexec_tooltip = gtk_tooltips_new();
1956 (vbox3, checkbtn_immedexec,
1957 _("Execute immediately when moving or deleting messages"));
1958 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1959 _("Messages will be marked until execution"
1960 " if this is turned off"),
1963 hbox1 = gtk_hbox_new (FALSE, 0);
1964 gtk_widget_show (hbox1);
1965 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1967 /* Next Unread Message Dialog */
1968 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1969 gtk_widget_show (hbox1);
1970 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1972 label = gtk_label_new (_("Show no-unread-message dialog"));
1973 gtk_widget_show (label);
1974 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1976 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1977 gtk_widget_show (optmenu_nextunreadmsgdialog);
1978 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1980 menu = gtk_menu_new ();
1981 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1982 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
1983 NEXTUNREADMSGDIALOG_ASSUME_YES);
1984 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
1985 NEXTUNREADMSGDIALOG_ASSUME_NO);
1987 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1989 hbox1 = gtk_hbox_new (FALSE, 8);
1990 gtk_widget_show (hbox1);
1991 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1993 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1994 gtk_widget_show (button_keybind);
1995 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1996 g_signal_connect (G_OBJECT (button_keybind), "clicked",
1997 G_CALLBACK (prefs_keybind_select), NULL);
1999 /* interface.checkbtn_emacs = checkbtn_emacs; */
2000 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
2001 interface.checkbtn_openunread = checkbtn_openunread;
2002 interface.checkbtn_mark_as_read_on_newwin
2003 = checkbtn_mark_as_read_on_newwin;
2004 interface.checkbtn_openinbox = checkbtn_openinbox;
2005 interface.checkbtn_immedexec = checkbtn_immedexec;
2006 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
2009 static void prefs_other_create(void)
2014 GtkWidget *frame_addr;
2015 GtkWidget *vbox_addr;
2016 GtkWidget *checkbtn_addaddrbyclick;
2018 GtkWidget *frame_cliplog;
2019 GtkWidget *vbox_cliplog;
2020 GtkWidget *hbox_cliplog;
2021 GtkWidget *checkbtn_cliplog;
2022 GtkWidget *loglength_label;
2023 GtkWidget *loglength_entry;
2024 GtkTooltips *loglength_tooltip;
2026 GtkWidget *frame_exit;
2027 GtkWidget *vbox_exit;
2028 GtkWidget *checkbtn_confonexit;
2029 GtkWidget *checkbtn_cleanonexit;
2030 GtkWidget *checkbtn_askonclean;
2031 GtkWidget *checkbtn_warnqueued;
2033 GtkWidget *label_iotimeout;
2034 GtkWidget *spinbtn_iotimeout;
2035 GtkObject *spinbtn_iotimeout_adj;
2039 GtkWidget *frame_ssl;
2040 GtkWidget *vbox_ssl;
2041 GtkWidget *hbox_ssl;
2042 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2045 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2046 gtk_widget_show (vbox1);
2047 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2048 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2050 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2052 vbox_addr = gtk_vbox_new (FALSE, 0);
2053 gtk_widget_show (vbox_addr);
2054 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2055 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2058 (vbox_addr, checkbtn_addaddrbyclick,
2059 _("Add address to destination when double-clicked"));
2062 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2064 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2065 gtk_widget_show (vbox_cliplog);
2066 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2067 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2068 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2069 _("Clip the log size"));
2070 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2071 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2072 gtk_widget_show (hbox_cliplog);
2074 loglength_label = gtk_label_new (_("Log window length"));
2075 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2077 gtk_widget_show (GTK_WIDGET (loglength_label));
2079 loglength_tooltip = gtk_tooltips_new();
2081 loglength_entry = gtk_entry_new ();
2082 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2083 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2085 gtk_widget_show (GTK_WIDGET (loglength_entry));
2086 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2087 _("0 to stop logging in the log window"),
2089 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2094 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2096 vbox_ssl = gtk_vbox_new (FALSE, 0);
2097 gtk_widget_show (vbox_ssl);
2098 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2099 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2100 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2101 _("Ask before accepting SSL certificates"));
2102 hbox_ssl = gtk_hbox_new (FALSE, 3);
2103 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2104 gtk_widget_show (hbox_ssl);
2109 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2111 vbox_exit = gtk_vbox_new (FALSE, 0);
2112 gtk_widget_show (vbox_exit);
2113 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2114 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2116 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2117 _("Confirm on exit"));
2119 hbox1 = gtk_hbox_new (FALSE, 32);
2120 gtk_widget_show (hbox1);
2121 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2123 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2124 _("Empty trash on exit"));
2125 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2126 _("Ask before emptying"));
2127 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2129 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2130 _("Warn if there are queued messages"));
2132 hbox1 = gtk_hbox_new (FALSE, 8);
2133 gtk_widget_show (hbox1);
2134 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2136 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2137 gtk_widget_show (label_iotimeout);
2138 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2140 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2141 spinbtn_iotimeout = gtk_spin_button_new
2142 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2143 gtk_widget_show (spinbtn_iotimeout);
2144 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2146 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2147 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2149 label_iotimeout = gtk_label_new (_("seconds"));
2150 gtk_widget_show (label_iotimeout);
2151 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2153 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2155 other.checkbtn_cliplog = checkbtn_cliplog;
2156 other.loglength_entry = loglength_entry;
2158 other.checkbtn_confonexit = checkbtn_confonexit;
2159 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2160 other.checkbtn_askonclean = checkbtn_askonclean;
2161 other.checkbtn_warnqueued = checkbtn_warnqueued;
2163 other.spinbtn_iotimeout = spinbtn_iotimeout;
2164 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2168 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2173 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2175 GtkWidget *datefmt_sample = NULL;
2178 g_return_if_fail(widget != NULL);
2179 g_return_if_fail(*widget != NULL);
2180 g_return_if_fail(display.entry_datefmt != NULL);
2182 datefmt_sample = GTK_WIDGET(g_object_get_data
2183 (G_OBJECT(*widget), "datefmt_sample"));
2184 g_return_if_fail(datefmt_sample != NULL);
2186 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2187 g_free(prefs_common.date_format);
2188 prefs_common.date_format = text;
2189 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2191 gtk_widget_destroy(*widget);
2195 static void date_format_cancel_btn_clicked(GtkButton *button,
2198 g_return_if_fail(widget != NULL);
2199 g_return_if_fail(*widget != NULL);
2201 gtk_widget_destroy(*widget);
2205 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2208 if (event && event->keyval == GDK_Escape)
2209 date_format_cancel_btn_clicked(NULL, widget);
2213 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2214 GdkEventAny *event, GtkWidget **widget)
2216 g_return_val_if_fail(widget != NULL, FALSE);
2217 g_return_val_if_fail(*widget != NULL, FALSE);
2223 static void date_format_entry_on_change(GtkEditable *editable,
2227 struct tm *cal_time;
2231 cur_time = time(NULL);
2232 cal_time = localtime(&cur_time);
2234 text = gtk_editable_get_chars(editable, 0, -1);
2236 strftime(buffer, sizeof buffer, text, cal_time);
2239 text = conv_codeset_strdup(buffer,
2240 conv_get_locale_charset_str(),
2243 text = g_strdup(buffer);
2245 gtk_label_set_text(example, text);
2250 static void date_format_select_row(GtkTreeView *list_view,
2252 GtkTreeViewColumn *column,
2253 GtkWidget *date_format)
2257 const gchar *old_format;
2259 GtkWidget *datefmt_sample;
2261 GtkTreeModel *model;
2263 g_return_if_fail(date_format != NULL);
2265 /* only on double click */
2266 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2269 g_return_if_fail(datefmt_sample != NULL);
2271 model = gtk_tree_view_get_model(list_view);
2273 /* get format from list */
2274 if (!gtk_tree_model_get_iter(model, &iter, path))
2277 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
2279 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2280 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2282 /* insert the format into the text entry */
2283 new_format = g_malloc(strlen(old_format) + 3);
2285 strncpy(new_format, old_format, cur_pos);
2286 new_format[cur_pos] = '\0';
2287 strcat(new_format, format);
2288 strcat(new_format, &old_format[cur_pos]);
2290 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2291 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2296 static GtkWidget *date_format_create(GtkButton *button, void *data)
2298 static GtkWidget *datefmt_win = NULL;
2301 GtkWidget *scrolledwindow1;
2302 GtkWidget *datefmt_list_view;
2307 GtkWidget *confirm_area;
2309 GtkWidget *cancel_btn;
2310 GtkWidget *datefmt_entry;
2311 GtkListStore *store;
2340 const gint TIME_FORMAT_ELEMS =
2341 sizeof time_format / sizeof time_format[0];
2343 GtkCellRenderer *renderer;
2344 GtkTreeViewColumn *column;
2345 GtkTreeSelection *selection;
2347 time_format[0].txt = _("the full abbreviated weekday name");
2348 time_format[1].txt = _("the full weekday name");
2349 time_format[2].txt = _("the abbreviated month name");
2350 time_format[3].txt = _("the full month name");
2351 time_format[4].txt = _("the preferred date and time for the current locale");
2352 time_format[5].txt = _("the century number (year/100)");
2353 time_format[6].txt = _("the day of the month as a decimal number");
2354 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2355 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2356 time_format[9].txt = _("the day of the year as a decimal number");
2357 time_format[10].txt = _("the month as a decimal number");
2358 time_format[11].txt = _("the minute as a decimal number");
2359 time_format[12].txt = _("either AM or PM");
2360 time_format[13].txt = _("the second as a decimal number");
2361 time_format[14].txt = _("the day of the week as a decimal number");
2362 time_format[15].txt = _("the preferred date for the current locale");
2363 time_format[16].txt = _("the last two digits of a year");
2364 time_format[17].txt = _("the year as a decimal number");
2365 time_format[18].txt = _("the time zone or name or abbreviation");
2367 if (datefmt_win) return datefmt_win;
2369 store = gtk_list_store_new(N_DATEFMT_COLUMNS,
2374 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2377 gtk_list_store_append(store, &iter);
2378 gtk_list_store_set(store, &iter,
2379 DATEFMT_FMT, time_format[i].fmt,
2380 DATEFMT_TXT, time_format[i].txt,
2384 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2385 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2386 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2387 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2388 gtk_widget_set_size_request(datefmt_win, 440, 280);
2390 vbox1 = gtk_vbox_new(FALSE, 10);
2391 gtk_widget_show(vbox1);
2392 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2394 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2395 gtk_scrolled_window_set_policy
2396 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2397 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2398 gtk_widget_show(scrolledwindow1);
2399 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2401 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2402 g_object_unref(G_OBJECT(store));
2403 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(datefmt_list_view), TRUE);
2404 gtk_widget_show(datefmt_list_view);
2405 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view);
2407 renderer = gtk_cell_renderer_text_new();
2408 column = gtk_tree_view_column_new_with_attributes
2409 (_("Specifier"), renderer, "text", DATEFMT_FMT,
2411 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2413 renderer = gtk_cell_renderer_text_new();
2414 column = gtk_tree_view_column_new_with_attributes
2415 (_("Description"), renderer, "text", DATEFMT_TXT,
2417 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2419 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2420 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view));
2421 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
2423 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated",
2424 G_CALLBACK(date_format_select_row),
2427 table = gtk_table_new(2, 2, FALSE);
2428 gtk_widget_show(table);
2429 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2430 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2431 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2433 label1 = gtk_label_new(_("Date format"));
2434 gtk_widget_show(label1);
2435 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2437 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2438 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2440 datefmt_entry = gtk_entry_new();
2441 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2442 gtk_widget_show(datefmt_entry);
2443 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2444 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2446 /* we need the "sample" entry box; add it as data so callbacks can
2447 * get the entry box */
2448 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2451 label2 = gtk_label_new(_("Example"));
2452 gtk_widget_show(label2);
2453 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2455 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2456 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2458 label3 = gtk_label_new("");
2459 gtk_widget_show(label3);
2460 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2461 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2462 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2463 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2465 gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
2466 &cancel_btn, GTK_STOCK_CANCEL, NULL, NULL);
2468 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2469 gtk_widget_show(confirm_area);
2470 gtk_widget_grab_default(ok_btn);
2472 /* set the current format */
2473 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2474 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2477 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2478 G_CALLBACK(date_format_ok_btn_clicked),
2480 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2481 G_CALLBACK(date_format_cancel_btn_clicked),
2483 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2484 G_CALLBACK(date_format_key_pressed),
2486 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2487 G_CALLBACK(date_format_on_delete),
2489 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2490 G_CALLBACK(date_format_entry_on_change),
2493 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2494 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2496 gtk_widget_show(datefmt_win);
2497 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2499 gtk_widget_grab_focus(ok_btn);
2504 static void prefs_keybind_select(void)
2511 GtkWidget *confirm_area;
2513 GtkWidget *cancel_btn;
2515 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2516 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2517 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2518 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2519 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2520 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2521 manage_window_set_transient (GTK_WINDOW (window));
2523 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2524 gtk_container_add (GTK_CONTAINER (window), vbox1);
2525 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2527 hbox1 = gtk_hbox_new (FALSE, 8);
2528 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2530 label = gtk_label_new
2531 (_("Select preset:"));
2532 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2533 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2535 hbox1 = gtk_hbox_new (FALSE, 8);
2536 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2538 combo = gtk_combo_new ();
2539 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2540 gtkut_combo_set_items (GTK_COMBO (combo),
2546 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
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 (_("You can also modify each menu shortcut by pressing\n"
2553 "any key(s) when placing the mouse pointer on the item."));
2554 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2555 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2557 hbox1 = gtk_hbox_new (FALSE, 8);
2558 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2560 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
2561 &cancel_btn, GTK_STOCK_CANCEL,
2563 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2564 gtk_widget_grab_default (ok_btn);
2566 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2567 g_signal_connect (G_OBJECT (window), "delete_event",
2568 G_CALLBACK (prefs_keybind_deleted), NULL);
2569 g_signal_connect (G_OBJECT (window), "key_press_event",
2570 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2571 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2572 G_CALLBACK (prefs_keybind_apply_clicked),
2574 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2575 G_CALLBACK (prefs_keybind_cancel),
2578 gtk_widget_show_all(window);
2580 keybind.window = window;
2581 keybind.combo = combo;
2584 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2587 if (event && event->keyval == GDK_Escape)
2588 prefs_keybind_cancel();
2592 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2595 prefs_keybind_cancel();
2599 static void prefs_keybind_cancel(void)
2601 gtk_widget_destroy(keybind.window);
2602 keybind.window = NULL;
2603 keybind.combo = NULL;
2607 const gchar *accel_path;
2608 const gchar *accel_key;
2611 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2615 GdkModifierType mods;
2617 for (i = 0; i < num; i++) {
2618 const gchar *accel_key
2619 = keybind[i].accel_key ? keybind[i].accel_key : "";
2620 gtk_accelerator_parse(accel_key, &key, &mods);
2621 gtk_accel_map_change_entry(keybind[i].accel_path,
2626 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2628 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2630 struct KeyBind *menurc;
2633 static struct KeyBind default_menurc[] = {
2634 {"<Main>/File/Empty all Trash folders", ""},
2635 {"<Main>/File/Save as...", "<control>S"},
2636 {"<Main>/File/Print...", ""},
2637 {"<Main>/File/Exit", "<control>Q"},
2639 {"<Main>/Edit/Copy", "<control>C"},
2640 {"<Main>/Edit/Select all", "<control>A"},
2641 {"<Main>/Edit/Find in current message...", "<control>F"},
2642 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2644 {"<Main>/View/Show or hide/Message View", "V"},
2645 {"<Main>/View/Thread view", "<control>T"},
2646 {"<Main>/View/Go to/Prev message", "P"},
2647 {"<Main>/View/Go to/Next message", "N"},
2648 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2649 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2650 {"<Main>/View/Go to/Other folder...", "G"},
2651 {"<Main>/View/Open in new window", "<control><alt>N"},
2652 {"<Main>/View/Message source", "<control>U"},
2653 {"<Main>/View/Show all headers", "<control>H"},
2654 {"<Main>/View/Update summary", "<control><alt>U"},
2656 {"<Main>/Message/Receive/Get from current account",
2658 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2659 {"<Main>/Message/Compose an email message", "<control>M"},
2660 {"<Main>/Message/Reply", "<control>R"},
2661 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2662 {"<Main>/Message/Reply to/sender", ""},
2663 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2664 {"<Main>/Message/Forward", "<control><alt>F"},
2665 /* {"<Main>/Message/Forward as attachment", ""}, */
2666 {"<Main>/Message/Move...", "<control>O"},
2667 {"<Main>/Message/Copy...", "<shift><control>O"},
2668 {"<Main>/Message/Delete", "<control>D"},
2669 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2670 {"<Main>/Message/Mark/Unmark", "U"},
2671 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2672 {"<Main>/Message/Mark/Mark as read", ""},
2674 {"<Main>/Tools/Address book", "<shift><control>A"},
2675 {"<Main>/Tools/Execute", "X"},
2676 {"<Main>/Tools/Log window", "<shift><control>L"},
2678 {"<Compose>/Message/Close", "<control>W"},
2679 {"<Compose>/Edit/Select all", "<control>A"},
2680 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2681 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2682 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2683 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2684 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2687 static struct KeyBind mew_wl_menurc[] = {
2688 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2689 {"<Main>/File/Save as...", "Y"},
2690 {"<Main>/File/Print...", "<shift>numbersign"},
2691 {"<Main>/File/Exit", "<shift>Q"},
2693 {"<Main>/Edit/Copy", "<control>C"},
2694 {"<Main>/Edit/Select all", "<control>A"},
2695 {"<Main>/Edit/Find in current message...", "<control>F"},
2696 {"<Main>/Edit/Search folder...", "<control>S"},
2698 {"<Main>/View/Show or hide/Message View", ""},
2699 {"<Main>/View/Thread view", "<shift>T"},
2700 {"<Main>/View/Go to/Prev message", "P"},
2701 {"<Main>/View/Go to/Next message", "N"},
2702 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2703 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2704 {"<Main>/View/Go to/Other folder...", "G"},
2705 {"<Main>/View/Open in new window", "<control><alt>N"},
2706 {"<Main>/View/Message source", "<control>U"},
2707 {"<Main>/View/Show all headers", "<shift>H"},
2708 {"<Main>/View/Update summary", "<shift>S"},
2710 {"<Main>/Message/Receive/Get from current account",
2712 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2713 {"<Main>/Message/Compose an email message", "W"},
2714 {"<Main>/Message/Reply", "<control>R"},
2715 {"<Main>/Message/Reply to/all", "<shift>A"},
2716 {"<Main>/Message/Reply to/sender", ""},
2717 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2718 {"<Main>/Message/Forward", "F"},
2719 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2720 {"<Main>/Message/Move...", "O"},
2721 {"<Main>/Message/Copy...", "<shift>O"},
2722 {"<Main>/Message/Delete", "D"},
2723 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2724 {"<Main>/Message/Mark/Unmark", "U"},
2725 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2726 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2728 {"<Main>/Tools/Address book", "<shift><control>A"},
2729 {"<Main>/Tools/Execute", "X"},
2730 {"<Main>/Tools/Log window", "<shift><control>L"},
2732 {"<Compose>/Message/Close", "<alt>W"},
2733 {"<Compose>/Edit/Select all", ""},
2734 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2735 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2736 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2737 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2738 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2741 static struct KeyBind mutt_menurc[] = {
2742 {"<Main>/File/Empty all Trash folders", ""},
2743 {"<Main>/File/Save as...", "S"},
2744 {"<Main>/File/Print...", "P"},
2745 {"<Main>/File/Exit", "Q"},
2747 {"<Main>/Edit/Copy", "<control>C"},
2748 {"<Main>/Edit/Select all", "<control>A"},
2749 {"<Main>/Edit/Find in current message...", "<control>F"},
2750 {"<Main>/Edit/Search messages...", "slash"},
2752 {"<Main>/View/Show or hide/Message view", "V"},
2753 {"<Main>/View/Thread view", "<control>T"},
2754 {"<Main>/View/Go to/Prev message", ""},
2755 {"<Main>/View/Go to/Next message", ""},
2756 {"<Main>/View/Go to/Prev unread message", ""},
2757 {"<Main>/View/Go to/Next unread message", ""},
2758 {"<Main>/View/Go to/Other folder...", "C"},
2759 {"<Main>/View/Open in new window", "<control><alt>N"},
2760 {"<Main>/View/Message source", "<control>U"},
2761 {"<Main>/View/Show all headers", "<control>H"},
2762 {"<Main>/View/Update summary", "<control><alt>U"},
2764 {"<Main>/Message/Receive/Get from current account",
2766 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2767 {"<Main>/Message/Compose an email message", "M"},
2768 {"<Main>/Message/Reply", "R"},
2769 {"<Main>/Message/Reply to/all", "G"},
2770 {"<Main>/Message/Reply to/sender", ""},
2771 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2772 {"<Main>/Message/Forward", "F"},
2773 {"<Main>/Message/Forward as attachment", ""},
2774 {"<Main>/Message/Move...", "<control>O"},
2775 {"<Main>/Message/Copy...", "<shift>C"},
2776 {"<Main>/Message/Delete", "D"},
2777 {"<Main>/Message/Mark/Mark", "<shift>F"},
2778 {"<Main>/Message/Mark/Unmark", "U"},
2779 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2780 {"<Main>/Message/Mark/Mark as read", ""},
2782 {"<Main>/Tools/Address book", "<shift><control>A"},
2783 {"<Main>/Tools/Execute", "X"},
2784 {"<Main>/Tools/Log window", "<shift><control>L"},
2786 {"<Compose>/Message/Close", "<alt>W"},
2787 {"<Compose>/Edit/Select all", ""},
2788 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2789 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2790 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2791 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2792 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2795 static struct KeyBind old_sylpheed_menurc[] = {
2796 {"<Main>/File/Empty all Trash folders", ""},
2797 {"<Main>/File/Save as...", ""},
2798 {"<Main>/File/Print...", "<alt>P"},
2799 {"<Main>/File/Exit", "<alt>Q"},
2801 {"<Main>/Edit/Copy", "<control>C"},
2802 {"<Main>/Edit/Select all", "<control>A"},
2803 {"<Main>/Edit/Find in current message...", "<control>F"},
2804 {"<Main>/Edit/Search folder...", "<control>S"},
2806 {"<Main>/View/Show or hide/Message View", ""},
2807 {"<Main>/View/Thread view", "<control>T"},
2808 {"<Main>/View/Go to/Prev message", "P"},
2809 {"<Main>/View/Go to/Next message", "N"},
2810 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2811 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2812 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2813 {"<Main>/View/Open in new window", "<shift><control>N"},
2814 {"<Main>/View/Message source", "<control>U"},
2815 {"<Main>/View/Show all headers", "<control>H"},
2816 {"<Main>/View/Update summary", "<alt>U"},
2818 {"<Main>/Message/Receive/Get from current account",
2820 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2821 {"<Main>/Message/Compose an email message", "<alt>N"},
2822 {"<Main>/Message/Reply", "<alt>R"},
2823 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2824 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2825 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2826 {"<Main>/Message/Forward", "<shift><alt>F"},
2827 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2828 {"<Main>/Message/Move...", "<alt>O"},
2829 {"<Main>/Message/Copy...", ""},
2830 {"<Main>/Message/Delete", "<alt>D"},
2831 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2832 {"<Main>/Message/Mark/Unmark", "U"},
2833 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2834 {"<Main>/Message/Mark/Mark as read", ""},
2836 {"<Main>/Tools/Address book", "<alt>A"},
2837 {"<Main>/Tools/Execute", "<alt>X"},
2838 {"<Main>/Tools/Log window", "<alt>L"},
2840 {"<Compose>/Message/Close", "<alt>W"},
2841 {"<Compose>/Edit/Select all", ""},
2842 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2843 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2844 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2845 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2846 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2849 text = gtk_entry_get_text(entry);
2851 if (!strcmp(text, _("Default"))) {
2852 menurc = default_menurc;
2853 n_menurc = G_N_ELEMENTS(default_menurc);
2854 } else if (!strcmp(text, "Mew / Wanderlust")) {
2855 menurc = mew_wl_menurc;
2856 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2857 } else if (!strcmp(text, "Mutt")) {
2858 menurc = mutt_menurc;
2859 n_menurc = G_N_ELEMENTS(mutt_menurc);
2860 } else if (!strcmp(text, _("Old Sylpheed"))) {
2861 menurc = old_sylpheed_menurc;
2862 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2867 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2868 prefs_keybind_apply(menurc, n_menurc);
2870 gtk_widget_destroy(keybind.window);
2871 keybind.window = NULL;
2872 keybind.combo = NULL;
2875 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2878 GtkWidget *menuitem;
2881 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2882 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2883 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2884 g_free(*((gchar **)pparam->data));
2885 *((gchar **)pparam->data) = g_strdup(charset);
2888 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2890 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2893 g_return_if_fail(optmenu != NULL);
2894 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2896 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2897 (GCompareFunc)strcmp);
2899 gtk_option_menu_set_history(optmenu, index);
2901 gtk_option_menu_set_history(optmenu, 0);
2902 prefs_common_charset_set_data_from_optmenu(pparam);
2906 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2909 GtkWidget *menuitem;
2911 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2912 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2913 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2914 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2917 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2919 TransferEncodingMethod method =
2920 *((TransferEncodingMethod *)pparam->data);
2921 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2924 g_return_if_fail(optmenu != NULL);
2926 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2929 gtk_option_menu_set_history(optmenu, index);
2931 gtk_option_menu_set_history(optmenu, 0);
2932 prefs_common_encoding_set_data_from_optmenu(pparam);
2936 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2939 GtkWidget *menuitem;
2941 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2942 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2943 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2944 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2947 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2949 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2950 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2952 GtkWidget *menuitem;
2955 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2958 gtk_option_menu_set_history(optmenu, index);
2960 gtk_option_menu_set_history(optmenu, 0);
2961 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2964 menu = gtk_option_menu_get_menu(optmenu);
2965 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2966 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2969 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2972 GtkWidget *menuitem;
2974 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2975 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2976 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2977 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2980 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2982 SendDialogMode mode = *((SendDialogMode *)pparam->data);
2983 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2985 GtkWidget *menuitem;
2988 case SEND_DIALOG_ALWAYS:
2989 gtk_option_menu_set_history(optmenu, 0);
2991 case SEND_DIALOG_NEVER:
2992 gtk_option_menu_set_history(optmenu, 1);
2998 menu = gtk_option_menu_get_menu(optmenu);
2999 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3000 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3003 static void prefs_common_apply(void)
3005 MainWindow *mainwindow;
3007 prefs_set_data_from_dialog(param);
3008 sock_set_io_timeout(prefs_common.io_timeout_secs);
3009 main_window_reflect_prefs_all_real(FALSE);
3010 prefs_common_write_config();
3012 mainwindow = mainwindow_get_mainwindow();
3013 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3014 prefs_common.loglength);
3016 inc_autocheck_timer_remove();
3017 inc_autocheck_timer_set();
3020 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3023 GtkWidget *menuitem;
3025 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3026 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3027 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3028 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3031 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3033 NextUnreadMsgDialogShow dialog_show;
3034 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3036 GtkWidget *menuitem;
3038 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3040 switch (dialog_show) {
3041 case NEXTUNREADMSGDIALOG_ALWAYS:
3042 gtk_option_menu_set_history(optmenu, 0);
3044 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3045 gtk_option_menu_set_history(optmenu, 1);
3047 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3048 gtk_option_menu_set_history(optmenu, 2);
3052 menu = gtk_option_menu_get_menu(optmenu);
3053 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3054 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3058 static void prefs_common_cancel(void)
3060 gtk_widget_hide(dialog.window);
3065 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3068 GtkWidget *menuitem;
3070 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3071 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3072 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3073 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3076 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3078 RecvDialogShow dialog_show;
3079 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3081 GtkWidget *menuitem;
3083 dialog_show = *((RecvDialogShow *)pparam->data);
3085 switch (dialog_show) {
3086 case RECVDIALOG_ALWAYS:
3087 gtk_option_menu_set_history(optmenu, 0);
3089 case RECVDIALOG_WINDOW_ACTIVE:
3090 gtk_option_menu_set_history(optmenu, 1);
3092 case RECVDIALOG_NEVER:
3093 gtk_option_menu_set_history(optmenu, 2);
3098 menu = gtk_option_menu_get_menu(optmenu);
3099 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3100 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));