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.
28 #include <gdk/gdkkeysyms.h>
33 #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", "fixed 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},
391 {"display_folder_unread_num", "TRUE",
392 &prefs_common.display_folder_unread, P_BOOL,
393 &display.chkbtn_folder_unread,
394 prefs_set_data_from_toggle, prefs_set_toggle},
395 {"newsgroup_abbrev_len", "16",
396 &prefs_common.ng_abbrev_len, P_INT,
397 &display.spinbtn_ng_abbrev_len,
398 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
400 {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
401 &display.chkbtn_transhdr,
402 prefs_set_data_from_toggle, prefs_set_toggle},
404 /* Display: Summary View */
405 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
406 &display.chkbtn_swapfrom,
407 prefs_set_data_from_toggle, prefs_set_toggle},
408 {"use_address_book", "TRUE", &prefs_common.use_addr_book, P_BOOL,
409 &display.chkbtn_useaddrbook,
410 prefs_set_data_from_toggle, prefs_set_toggle},
411 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
412 &display.chkbtn_threadsubj,
413 prefs_set_data_from_toggle, prefs_set_toggle},
414 {"date_format", "%y/%m/%d(%a) %H:%M", &prefs_common.date_format,
415 P_STRING, &display.entry_datefmt,
416 prefs_set_data_from_entry, prefs_set_entry},
418 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
420 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
422 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
423 P_INT, NULL, NULL, NULL },
425 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
427 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
429 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"folderview_vscrollbar_policy", "0",
435 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
438 {"summary_col_show_mark", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_unread", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_mime", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_subject", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_from", "TRUE",
447 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_date", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_size", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_number", "FALSE",
453 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_score", "FALSE",
455 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_locked", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
459 {"summary_col_pos_mark", "0",
460 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
461 {"summary_col_pos_unread", "1",
462 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_mime", "2",
464 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_subject", "3",
466 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_from", "4",
468 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_date", "5",
470 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_size", "6",
472 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_number", "7",
474 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_score", "8",
476 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_locked", "9",
478 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
480 {"summary_col_size_mark", "10",
481 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
482 {"summary_col_size_unread", "13",
483 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_mime", "10",
485 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_subject", "200",
487 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_from", "120",
489 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_date", "118",
491 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_size", "45",
493 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_number", "40",
495 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_score", "40",
497 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_locked", "13",
499 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
502 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
504 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
506 {"folderview_width", "179", &prefs_common.folderview_width, P_INT,
508 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
510 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
513 {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT,
515 {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT,
517 {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT,
519 {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT,
522 {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT,
524 {"summaryview_height", "157", &prefs_common.summaryview_height, P_INT,
527 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
529 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
531 {"messageview_width", "600", &prefs_common.msgview_width, P_INT,
533 {"messageview_height", "300", &prefs_common.msgview_height, P_INT,
535 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
538 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
540 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
542 {"mainview_width", "600", &prefs_common.mainview_width, P_INT,
544 {"mainview_height", "600", &prefs_common.mainview_height, P_INT,
546 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
548 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
550 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
552 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
554 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
556 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
558 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
560 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
562 {"compose_width", "600", &prefs_common.compose_width, P_INT,
564 {"compose_height", "560", &prefs_common.compose_height, P_INT,
566 {"compose_x", "0", &prefs_common.compose_x, P_INT,
568 {"compose_y", "0", &prefs_common.compose_y, P_INT,
571 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
574 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
576 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
578 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
580 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
582 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
584 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
586 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
587 P_BOOL, NULL, NULL, NULL},
589 {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL,
590 &message.chkbtn_mbalnum,
591 prefs_set_data_from_toggle, prefs_set_toggle},
592 {"display_header_pane", "TRUE", &prefs_common.display_header_pane,
593 P_BOOL, &message.chkbtn_disphdrpane,
594 prefs_set_data_from_toggle, prefs_set_toggle},
595 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
596 &message.chkbtn_disphdr,
597 prefs_set_data_from_toggle, prefs_set_toggle},
598 {"line_space", "2", &prefs_common.line_space, P_INT,
599 &message.spinbtn_linespc,
600 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
602 {"enable_smooth_scroll", "FALSE",
603 &prefs_common.enable_smooth_scroll, P_BOOL,
604 &message.chkbtn_smoothscroll,
605 prefs_set_data_from_toggle, prefs_set_toggle},
606 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
607 &message.spinbtn_scrollstep,
608 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
609 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
610 &message.chkbtn_halfpage,
611 prefs_set_data_from_toggle, prefs_set_toggle},
613 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
616 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
617 &message.chkbtn_attach_desc,
618 prefs_set_data_from_toggle, prefs_set_toggle},
619 {"attach_save_directory", NULL,
620 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
623 {"mime_image_viewer", "display '%s'",
624 &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL},
625 {"mime_audio_player", "play '%s'",
626 &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL},
627 {"mime_open_command", "gedit '%s'",
628 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
631 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
633 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
636 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
637 NULL, NULL, NULL}, */
638 {"always_show_message_when_selected", "FALSE",
639 &prefs_common.always_show_msg,
640 P_BOOL, &interface.checkbtn_always_show_msg,
641 prefs_set_data_from_toggle, prefs_set_toggle},
642 {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter,
643 P_BOOL, &interface.checkbtn_openunread,
644 prefs_set_data_from_toggle, prefs_set_toggle},
645 {"mark_as_read_on_new_window", "FALSE",
646 &prefs_common.mark_as_read_on_new_window,
647 P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
648 prefs_set_data_from_toggle, prefs_set_toggle},
649 {"mark_as_read_delay", "0",
650 &prefs_common.mark_as_read_delay, P_INT,
652 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
653 P_BOOL, &interface.checkbtn_openinbox,
654 prefs_set_data_from_toggle, prefs_set_toggle},
655 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
656 &interface.checkbtn_immedexec,
657 prefs_set_data_from_toggle, prefs_set_toggle},
658 {"nextunreadmsg_dialog", NULL, &prefs_common.next_unread_msg_dialog, P_ENUM,
659 &interface.optmenu_nextunreadmsgdialog,
660 prefs_nextunreadmsgdialog_set_data_from_optmenu,
661 prefs_nextunreadmsgdialog_set_optmenu},
663 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
664 &prefs_common.pixmap_theme_path, P_STRING,
667 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
671 {"uri_open_command", DEFAULT_BROWSER_CMD,
672 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
673 {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING,
675 {"ext_editor_command", "gedit %s",
676 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
678 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
679 P_BOOL, &other.checkbtn_addaddrbyclick,
680 prefs_set_data_from_toggle, prefs_set_toggle},
682 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
683 &other.checkbtn_confonexit,
684 prefs_set_data_from_toggle, prefs_set_toggle},
685 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
686 &other.checkbtn_cleanonexit,
687 prefs_set_data_from_toggle, prefs_set_toggle},
688 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
689 &other.checkbtn_askonclean,
690 prefs_set_data_from_toggle, prefs_set_toggle},
691 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
692 P_BOOL, &other.checkbtn_warnqueued,
693 prefs_set_data_from_toggle, prefs_set_toggle},
696 {"ssl_ask_unknown_valid", "TRUE", &prefs_common.ssl_ask_unknown_valid,
697 P_BOOL, &other.checkbtn_ssl_ask_unknown_valid,
698 prefs_set_data_from_toggle, prefs_set_toggle},
701 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
703 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
705 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
707 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
710 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
711 P_INT, &other.spinbtn_iotimeout,
712 prefs_set_data_from_spinbtn, prefs_set_spinbtn},
713 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
715 {"important_score", "1", &prefs_common.important_score, P_INT,
717 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
718 &other.checkbtn_cliplog,
719 prefs_set_data_from_toggle, prefs_set_toggle},
720 {"log_length", "500", &prefs_common.loglength, P_INT,
721 &other.loglength_entry,
722 prefs_set_data_from_entry, prefs_set_entry},
724 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
726 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
729 {"color_new", "179", &prefs_common.color_new, P_COLOR,
732 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
735 /* widget creating functions */
736 static void prefs_common_create (void);
737 static void prefs_receive_create (void);
738 static void prefs_send_create (void);
739 static void prefs_compose_create (void);
740 static void prefs_quote_create (void);
741 static void prefs_display_create (void);
742 static void prefs_message_create (void);
743 static void prefs_interface_create (void);
744 static void prefs_other_create (void);
746 static void date_format_ok_btn_clicked (GtkButton *button,
748 static void date_format_cancel_btn_clicked (GtkButton *button,
750 static gboolean date_format_key_pressed (GtkWidget *keywidget,
753 static gboolean date_format_on_delete (GtkWidget *dialogwidget,
756 static void date_format_entry_on_change (GtkEditable *editable,
758 static void date_format_select_row (GtkTreeView *list_view,
760 GtkTreeViewColumn *column,
761 GtkWidget *date_format);
762 static GtkWidget *date_format_create (GtkButton *button,
765 static void prefs_keybind_select (void);
766 static gint prefs_keybind_deleted (GtkWidget *widget,
769 static gboolean prefs_keybind_key_pressed (GtkWidget *widget,
772 static void prefs_keybind_cancel (void);
773 static void prefs_keybind_apply_clicked (GtkWidget *widget);
775 static void prefs_common_apply (void);
777 typedef struct CommonPage
784 static CommonPage common_page;
786 static void create_widget_func(PrefsPage * _page,
790 CommonPage *page = (CommonPage *) _page;
793 vbox = gtk_vbox_new(FALSE, 6);
794 gtk_widget_show(vbox);
796 if (notebook == NULL)
797 prefs_common_create();
798 gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
799 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
801 prefs_set_dialog(param);
805 page->page.widget = vbox;
808 static void destroy_widget_func(PrefsPage *_page)
810 CommonPage *page = (CommonPage *) _page;
812 gtk_container_remove(GTK_CONTAINER (page->vbox), notebook);
815 static void save_func(PrefsPage * _page)
817 prefs_common_apply();
820 void prefs_common_init(void)
822 static gchar *path[2];
824 prefs_common.disphdr_list = NULL;
826 path[0] = _("Common");
829 common_page.page.path = path;
830 common_page.page.weight = 1000.0;
831 common_page.page.create_widget = create_widget_func;
832 common_page.page.destroy_widget = destroy_widget_func;
833 common_page.page.save_page = save_func;
835 prefs_gtk_register_page((PrefsPage *) &common_page);
838 PrefsCommon *prefs_common_get(void)
840 return &prefs_common;
844 * Read history list from the specified history file
846 GList *prefs_common_read_history(const gchar *history)
850 gchar buf[PREFSBUFSIZE];
853 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
855 if ((fp = fopen(path, "rb")) == NULL) {
856 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
861 while (fgets(buf, sizeof(buf), fp) != NULL) {
863 if (buf[0] == '\0') continue;
864 tmp = add_history(tmp, buf);
868 tmp = g_list_reverse(tmp);
873 void prefs_common_read_config(void)
877 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
878 prefs_read_config(param, "Common", rcpath, NULL);
881 prefs_common.mime_open_cmd_history =
882 prefs_common_read_history(COMMAND_HISTORY);
883 prefs_common.summary_quicksearch_history =
884 prefs_common_read_history(QUICKSEARCH_HISTORY);
888 * Save history list to the specified history file
890 void prefs_common_save_history(const gchar *history, GList *list)
896 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
898 if ((fp = fopen(path, "wb")) == NULL) {
899 FILE_OP_ERROR(path, "fopen");
904 for (cur = list; cur != NULL; cur = cur->next) {
905 fputs((gchar *)cur->data, fp);
913 void prefs_common_write_config(void)
915 prefs_write_config(param, "Common", COMMON_RC);
917 prefs_common_save_history(COMMAND_HISTORY,
918 prefs_common.mime_open_cmd_history);
919 prefs_common_save_history(QUICKSEARCH_HISTORY,
920 prefs_common.summary_quicksearch_history);
923 static void prefs_common_create(void)
927 debug_print("Creating common preferences window...\n");
929 notebook = gtk_notebook_new ();
930 gtk_widget_show(notebook);
931 gtk_container_set_border_width (GTK_CONTAINER (notebook), 2);
932 /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */
933 gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
935 gtk_notebook_popup_enable (GTK_NOTEBOOK (notebook));
937 gtk_widget_ref(notebook);
939 /* create all widgets on notebook */
940 prefs_receive_create();
941 SET_NOTEBOOK_LABEL(notebook, _("Receive"), page++);
943 SET_NOTEBOOK_LABEL(notebook, _("Send"), page++);
944 prefs_compose_create();
945 SET_NOTEBOOK_LABEL(notebook, _("Compose"), page++);
946 prefs_quote_create();
947 SET_NOTEBOOK_LABEL(notebook, _("Quote"), page++);
948 prefs_display_create();
949 SET_NOTEBOOK_LABEL(notebook, _("Display"), page++);
950 prefs_message_create();
951 SET_NOTEBOOK_LABEL(notebook, _("Message"), page++);
952 prefs_interface_create();
953 SET_NOTEBOOK_LABEL(notebook, _("Interface"), page++);
954 prefs_other_create();
955 SET_NOTEBOOK_LABEL(notebook, _("Other"), page++);
957 gtk_widget_show_all(notebook);
960 static void prefs_receive_create(void)
964 GtkWidget *frame_incext;
965 GtkWidget *checkbtn_incext;
967 GtkWidget *label_incext;
968 GtkWidget *entry_incext;
969 /* GtkWidget *button_incext; */
971 GtkWidget *hbox_autochk;
972 GtkWidget *checkbtn_autochk;
973 GtkWidget *label_autochk1;
974 GtkObject *spinbtn_autochk_adj;
975 GtkWidget *spinbtn_autochk;
976 GtkWidget *label_autochk2;
977 GtkWidget *checkbtn_chkonstartup;
978 GtkWidget *checkbtn_scan_after_inc;
981 GtkWidget *frame_newmail;
982 GtkWidget *hbox_newmail_notify;
983 GtkWidget *checkbtn_newmail_auto;
984 GtkWidget *checkbtn_newmail_manu;
985 GtkWidget *entry_newmail_notify_cmd;
986 GtkWidget *label_newmail_notify_cmd;
988 GtkWidget *hbox_recvdialog;
989 GtkWidget *label_recvdialog;
992 GtkWidget *optmenu_recvdialog;
993 GtkWidget *checkbtn_no_recv_err_panel;
994 GtkWidget *checkbtn_close_recv_dialog;
996 vbox1 = gtk_vbox_new (FALSE, VSPACING);
997 gtk_widget_show (vbox1);
998 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
999 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1001 PACK_FRAME(vbox1, frame_incext, _("External program"));
1003 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1004 gtk_widget_show (vbox2);
1005 gtk_container_add (GTK_CONTAINER (frame_incext), vbox2);
1006 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1008 /* Use of external incorporation program */
1009 PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
1010 _("Use external program for incorporation"));
1012 hbox = gtk_hbox_new (FALSE, 8);
1013 gtk_widget_show (hbox);
1014 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
1015 SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox);
1017 label_incext = gtk_label_new (_("Command"));
1018 gtk_widget_show (label_incext);
1019 gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0);
1021 entry_incext = gtk_entry_new ();
1022 gtk_widget_show (entry_incext);
1023 gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
1026 button_incext = gtk_button_new_with_label ("... ");
1027 gtk_widget_show (button_incext);
1028 gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0);
1031 vbox2 = gtk_vbox_new (FALSE, 0);
1032 gtk_widget_show (vbox2);
1033 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1036 hbox_autochk = gtk_hbox_new (FALSE, 8);
1037 gtk_widget_show (hbox_autochk);
1038 gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
1040 PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
1041 _("Auto-check new mail"));
1043 label_autochk1 = gtk_label_new (_("every"));
1044 gtk_widget_show (label_autochk1);
1045 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
1047 spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
1048 spinbtn_autochk = gtk_spin_button_new
1049 (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
1050 gtk_widget_show (spinbtn_autochk);
1051 gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0);
1052 gtk_widget_set_size_request (spinbtn_autochk, 64, -1);
1053 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE);
1055 label_autochk2 = gtk_label_new (_("minute(s)"));
1056 gtk_widget_show (label_autochk2);
1057 gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
1059 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
1060 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
1061 SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
1063 PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
1064 _("Check new mail on startup"));
1065 PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
1066 _("Update all local folders after incorporation"));
1069 /* receive dialog */
1070 hbox_recvdialog = gtk_hbox_new (FALSE, 8);
1071 gtk_widget_show (hbox_recvdialog);
1072 gtk_box_pack_start (GTK_BOX (vbox2), hbox_recvdialog, FALSE, FALSE, 0);
1074 label_recvdialog = gtk_label_new (_("Show receive dialog"));
1075 gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
1076 gtk_widget_show (label_recvdialog);
1077 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), label_recvdialog, FALSE, FALSE, 0);
1079 optmenu_recvdialog = gtk_option_menu_new ();
1080 gtk_widget_show (optmenu_recvdialog);
1081 gtk_box_pack_start (GTK_BOX (hbox_recvdialog), optmenu_recvdialog, FALSE, FALSE, 0);
1083 menu = gtk_menu_new ();
1084 MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
1085 MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
1086 RECV_DIALOG_MANUAL);
1087 MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
1089 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
1091 PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
1092 _("Don't popup error dialog on receive error"));
1094 PACK_CHECK_BUTTON (vbox2, checkbtn_close_recv_dialog,
1095 _("Close receive dialog when finished"));
1097 PACK_FRAME(vbox1, frame_newmail, _("Run command when new mail "
1099 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
1100 gtk_widget_show (vbox2);
1101 gtk_container_add (GTK_CONTAINER (frame_newmail), vbox2);
1102 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1104 hbox = gtk_hbox_new (TRUE, 8);
1105 gtk_widget_show (hbox);
1106 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
1107 _("after autochecking"));
1108 PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
1109 _("after manual checking"));
1110 gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1111 g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
1112 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1114 g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
1115 G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
1118 hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
1119 gtk_widget_show (hbox);
1120 gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE,
1123 label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
1124 "(use %d as number of new "
1126 gtk_label_set_justify(GTK_LABEL(label_newmail_notify_cmd),
1128 gtk_widget_show (label_newmail_notify_cmd);
1129 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1130 label_newmail_notify_cmd, FALSE, FALSE, 0);
1132 entry_newmail_notify_cmd = gtk_entry_new ();
1133 gtk_widget_show (entry_newmail_notify_cmd);
1134 gtk_box_pack_start (GTK_BOX (hbox_newmail_notify),
1135 entry_newmail_notify_cmd, TRUE, TRUE, 0);
1137 gtk_widget_set_sensitive(hbox_newmail_notify,
1138 prefs_common.newmail_notify_auto ||
1139 prefs_common.newmail_notify_manu);
1141 receive.checkbtn_incext = checkbtn_incext;
1142 receive.entry_incext = entry_incext;
1143 /* receive.button_incext = button_incext; */
1145 receive.checkbtn_autochk = checkbtn_autochk;
1146 receive.spinbtn_autochk = spinbtn_autochk;
1147 receive.spinbtn_autochk_adj = spinbtn_autochk_adj;
1149 receive.checkbtn_chkonstartup = checkbtn_chkonstartup;
1150 receive.checkbtn_scan_after_inc = checkbtn_scan_after_inc;
1153 receive.checkbtn_newmail_auto = checkbtn_newmail_auto;
1154 receive.checkbtn_newmail_manu = checkbtn_newmail_manu;
1155 receive.hbox_newmail_notify = hbox_newmail_notify;
1156 receive.entry_newmail_notify_cmd = entry_newmail_notify_cmd;
1157 receive.optmenu_recvdialog = optmenu_recvdialog;
1158 receive.checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
1159 receive.checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
1162 static void prefs_send_create(void)
1167 GtkWidget *checkbtn_savemsg;
1168 GtkWidget *label_outcharset;
1169 GtkWidget *optmenu_charset;
1170 GtkWidget *optmenu_menu;
1171 GtkWidget *menuitem;
1172 GtkTooltips *charset_tooltip;
1173 GtkWidget *optmenu_encoding;
1174 GtkWidget *label_encoding;
1175 GtkTooltips *encoding_tooltip;
1176 GtkWidget *label_senddialog;
1178 GtkWidget *optmenu_senddialog;
1179 GtkWidget *hbox_senddialog;
1181 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1182 gtk_widget_show (vbox1);
1183 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1184 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1186 vbox2 = gtk_vbox_new (FALSE, 0);
1187 gtk_widget_show (vbox2);
1188 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1190 PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg,
1191 _("Save sent messages to Sent folder"));
1193 hbox_senddialog = gtk_hbox_new (FALSE, 8);
1194 gtk_box_pack_start (GTK_BOX (vbox1), hbox_senddialog, FALSE, FALSE, 0);
1196 label_senddialog = gtk_label_new (_("Show send dialog"));
1197 gtk_widget_show (label_senddialog);
1198 gtk_box_pack_start (GTK_BOX (hbox_senddialog), label_senddialog, FALSE, FALSE, 0);
1200 optmenu_senddialog = gtk_option_menu_new ();
1201 gtk_widget_show (optmenu_senddialog);
1202 gtk_box_pack_start (GTK_BOX (hbox_senddialog), optmenu_senddialog, FALSE, FALSE, 0);
1204 menu = gtk_menu_new ();
1205 MENUITEM_ADD (menu, menuitem, _("Always"), SEND_DIALOG_ALWAYS);
1206 MENUITEM_ADD (menu, menuitem, _("Never"), SEND_DIALOG_NEVER);
1208 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_senddialog), menu);
1210 hbox1 = gtk_hbox_new (FALSE, 8);
1211 gtk_widget_show (hbox1);
1212 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1214 label_outcharset = gtk_label_new (_("Outgoing codeset"));
1215 gtk_widget_show (label_outcharset);
1216 gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0);
1218 charset_tooltip = gtk_tooltips_new();
1220 optmenu_charset = gtk_option_menu_new ();
1221 gtk_widget_show (optmenu_charset);
1222 gtk_tooltips_set_tip(GTK_TOOLTIPS(charset_tooltip), optmenu_charset,
1223 _("If `Automatic' is selected, the optimal encoding"
1224 " for the current locale will be used"),
1226 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_charset, FALSE, FALSE, 0);
1228 optmenu_menu = gtk_menu_new ();
1230 #define SET_MENUITEM(str, data) \
1232 MENUITEM_ADD(optmenu_menu, menuitem, str, data); \
1235 SET_MENUITEM(_("Automatic (Recommended)"), CS_AUTO);
1236 SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII);
1237 SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8);
1238 SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1);
1239 SET_MENUITEM(_("Western European (ISO-8859-15)"), CS_ISO_8859_15);
1240 SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2);
1241 SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13);
1242 SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4);
1243 SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7);
1244 SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9);
1245 SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5);
1246 SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R);
1247 SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_WINDOWS_1251);
1248 SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U);
1249 SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP);
1251 SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP);
1252 SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS);
1254 SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312);
1255 SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5);
1257 SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW);
1258 SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN);
1260 SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR);
1261 SET_MENUITEM(_("Thai (TIS-620)"), CS_TIS_620);
1262 SET_MENUITEM(_("Thai (Windows-874)"), CS_WINDOWS_874);
1264 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_charset),
1267 hbox1 = gtk_hbox_new (FALSE, 8);
1268 gtk_widget_show (hbox1);
1269 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1271 hbox1 = gtk_hbox_new (FALSE, 8);
1272 gtk_widget_show (hbox1);
1273 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1275 label_encoding = gtk_label_new (_("Transfer encoding"));
1276 gtk_widget_show (label_encoding);
1277 gtk_box_pack_start (GTK_BOX (hbox1), label_encoding, FALSE, FALSE, 0);
1279 encoding_tooltip = gtk_tooltips_new();
1281 optmenu_encoding = gtk_option_menu_new ();
1282 gtk_widget_show (optmenu_encoding);
1283 gtk_tooltips_set_tip(GTK_TOOLTIPS(encoding_tooltip), optmenu_encoding,
1284 _("Specify Content-Transfer-Encoding used when"
1285 " message body contains non-ASCII characters"),
1287 gtk_box_pack_start (GTK_BOX (hbox1), optmenu_encoding, FALSE, FALSE, 0);
1289 optmenu_menu = gtk_menu_new ();
1291 SET_MENUITEM(_("Automatic"), CTE_AUTO);
1292 SET_MENUITEM("base64", CTE_BASE64);
1293 SET_MENUITEM("quoted-printable", CTE_QUOTED_PRINTABLE);
1294 SET_MENUITEM("8bit", CTE_8BIT);
1296 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_encoding),
1299 hbox1 = gtk_hbox_new (FALSE, 8);
1300 gtk_widget_show (hbox1);
1301 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1303 p_send.checkbtn_savemsg = checkbtn_savemsg;
1304 p_send.optmenu_senddialog = optmenu_senddialog;
1306 p_send.optmenu_charset = optmenu_charset;
1307 p_send.optmenu_encoding_method = optmenu_encoding;
1310 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
1314 toggled = gtk_toggle_button_get_active
1315 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_manu)) ||
1316 gtk_toggle_button_get_active
1317 (GTK_TOGGLE_BUTTON(receive.checkbtn_newmail_auto));
1318 gtk_widget_set_sensitive(receive.hbox_newmail_notify, toggled);
1321 static void prefs_compose_create(void)
1326 GtkWidget *checkbtn_autoextedit;
1328 GtkWidget *frame_autosel;
1329 GtkWidget *hbox_autosel;
1330 GtkWidget *checkbtn_reply_account_autosel;
1331 GtkWidget *checkbtn_forward_account_autosel;
1332 GtkWidget *checkbtn_reedit_account_autosel;
1334 GtkWidget *hbox_undolevel;
1335 GtkWidget *label_undolevel;
1336 GtkObject *spinbtn_undolevel_adj;
1337 GtkWidget *spinbtn_undolevel;
1341 GtkWidget *checkbtn_default_reply_list;
1343 GtkWidget *checkbtn_forward_as_attachment;
1344 GtkWidget *checkbtn_redirect_keep_from;
1346 GtkWidget *hbox_autosave;
1347 GtkWidget *checkbtn_autosave;
1348 GtkWidget *entry_autosave_length;
1349 GtkWidget *label_autosave_length;
1351 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1352 gtk_widget_show (vbox1);
1353 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1354 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1356 /* Account autoselection */
1357 PACK_FRAME(vbox1, frame_autosel, _("Automatic account selection"));
1359 hbox_autosel = gtk_hbox_new (FALSE, VSPACING_NARROW);
1360 gtk_widget_show (hbox_autosel);
1361 gtk_container_add (GTK_CONTAINER (frame_autosel), hbox_autosel);
1362 gtk_container_set_border_width (GTK_CONTAINER (hbox_autosel), 8);
1364 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reply_account_autosel,
1365 _("when replying"));
1366 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_forward_account_autosel,
1367 _("when forwarding"));
1368 PACK_CHECK_BUTTON (hbox_autosel, checkbtn_reedit_account_autosel,
1369 _("when re-editing"));
1371 vbox2 = gtk_vbox_new (FALSE, 0);
1372 gtk_widget_show (vbox2);
1373 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1375 PACK_CHECK_BUTTON (vbox2, checkbtn_default_reply_list,
1376 _("Reply button invokes mailing list reply"));
1378 PACK_CHECK_BUTTON (vbox2, checkbtn_autoextedit,
1379 _("Automatically launch the external editor"));
1381 hbox5 = gtk_hbox_new (FALSE, 8);
1382 gtk_widget_show (hbox5);
1383 gtk_box_pack_start (GTK_BOX (vbox2), hbox5, FALSE, FALSE, 0);
1385 PACK_CHECK_BUTTON (hbox5, checkbtn_forward_as_attachment,
1386 _("Forward as attachment"));
1388 PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from,
1389 _("Keep the original 'From' header when redirecting"));
1392 hbox_autosave = gtk_hbox_new (FALSE, 8);
1393 gtk_widget_show (hbox_autosave);
1394 gtk_box_pack_start (GTK_BOX (vbox1), hbox_autosave, FALSE, FALSE, 0);
1396 PACK_CHECK_BUTTON (hbox_autosave, checkbtn_autosave,
1397 _("Autosave to Drafts folder every "));
1399 entry_autosave_length = gtk_entry_new();
1400 gtk_widget_set_size_request (entry_autosave_length, 64, -1);
1401 gtk_widget_show (entry_autosave_length);
1402 gtk_box_pack_start (GTK_BOX (hbox_autosave), entry_autosave_length, FALSE, FALSE, 0);
1404 label_autosave_length = gtk_label_new(_("characters"));
1405 gtk_widget_show (label_autosave_length);
1406 gtk_box_pack_start (GTK_BOX (hbox_autosave), label_autosave_length, FALSE, FALSE, 0);
1408 hbox_undolevel = gtk_hbox_new (FALSE, 8);
1409 gtk_widget_show (hbox_undolevel);
1410 gtk_box_pack_start (GTK_BOX (vbox1), hbox_undolevel, FALSE, FALSE, 0);
1412 label_undolevel = gtk_label_new (_("Undo level"));
1413 gtk_widget_show (label_undolevel);
1414 gtk_box_pack_start (GTK_BOX (hbox_undolevel), label_undolevel, FALSE, FALSE, 0);
1416 spinbtn_undolevel_adj = gtk_adjustment_new (50, 0, 100, 1, 10, 10);
1417 spinbtn_undolevel = gtk_spin_button_new
1418 (GTK_ADJUSTMENT (spinbtn_undolevel_adj), 1, 0);
1419 gtk_widget_show (spinbtn_undolevel);
1420 gtk_box_pack_start (GTK_BOX (hbox_undolevel), spinbtn_undolevel, FALSE, FALSE, 0);
1421 gtk_widget_set_size_request (spinbtn_undolevel, 64, -1);
1422 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_undolevel), TRUE);
1425 compose.checkbtn_quote = checkbtn_quote;
1426 compose.entry_quotemark = entry_quotemark;
1427 compose.text_quotefmt = text_quotefmt;
1430 compose.checkbtn_autoextedit = checkbtn_autoextedit;
1432 compose.checkbtn_reply_account_autosel = checkbtn_reply_account_autosel;
1433 compose.checkbtn_forward_account_autosel = checkbtn_forward_account_autosel;
1434 compose.checkbtn_reedit_account_autosel = checkbtn_reedit_account_autosel;
1436 compose.spinbtn_undolevel = spinbtn_undolevel;
1437 compose.spinbtn_undolevel_adj = spinbtn_undolevel_adj;
1439 compose.checkbtn_autosave = checkbtn_autosave;
1440 compose.entry_autosave_length = entry_autosave_length;
1442 compose.checkbtn_forward_as_attachment =
1443 checkbtn_forward_as_attachment;
1444 compose.checkbtn_redirect_keep_from =
1445 checkbtn_redirect_keep_from;
1446 compose.checkbtn_default_reply_list = checkbtn_default_reply_list;
1449 static void prefs_quote_create(void)
1452 GtkWidget *frame_quote;
1453 GtkWidget *vbox_quote;
1456 GtkWidget *label_quotemark;
1457 GtkWidget *entry_quotemark;
1458 GtkWidget *scrolledwin_quotefmt;
1459 GtkWidget *text_quotefmt;
1461 GtkWidget *entry_fw_quotemark;
1462 GtkWidget *text_fw_quotefmt;
1464 GtkWidget *entry_quote_chars;
1465 GtkWidget *label_quote_chars;
1467 GtkWidget *btn_quotedesc;
1469 GtkWidget *checkbtn_reply_with_quote;
1471 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1472 gtk_widget_show (vbox1);
1473 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1474 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1478 PACK_CHECK_BUTTON (vbox1, checkbtn_reply_with_quote, _("Reply will quote by default"));
1480 PACK_FRAME (vbox1, frame_quote, _("Reply format"));
1482 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1483 gtk_widget_show (vbox_quote);
1484 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1485 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1487 hbox1 = gtk_hbox_new (FALSE, 32);
1488 gtk_widget_show (hbox1);
1489 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1491 hbox2 = gtk_hbox_new (FALSE, 8);
1492 gtk_widget_show (hbox2);
1493 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1495 label_quotemark = gtk_label_new (_("Quotation mark"));
1496 gtk_widget_show (label_quotemark);
1497 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1499 entry_quotemark = gtk_entry_new ();
1500 gtk_widget_show (entry_quotemark);
1501 gtk_box_pack_start (GTK_BOX (hbox2), entry_quotemark, FALSE, FALSE, 0);
1502 gtk_widget_set_size_request (entry_quotemark, 64, -1);
1504 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1505 gtk_widget_show (scrolledwin_quotefmt);
1506 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1507 gtk_scrolled_window_set_policy
1508 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1509 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1511 text_quotefmt = gtk_text_view_new ();
1512 gtk_widget_show (text_quotefmt);
1513 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
1514 gtk_text_view_set_editable (GTK_TEXT_VIEW(text_quotefmt), TRUE);
1515 gtk_widget_set_size_request(text_quotefmt, -1, 60);
1519 PACK_FRAME (vbox1, frame_quote, _("Forward format"));
1521 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1522 gtk_widget_show (vbox_quote);
1523 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1524 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1526 hbox1 = gtk_hbox_new (FALSE, 32);
1527 gtk_widget_show (hbox1);
1528 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1530 hbox2 = gtk_hbox_new (FALSE, 8);
1531 gtk_widget_show (hbox2);
1532 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1534 label_quotemark = gtk_label_new (_("Quotation mark"));
1535 gtk_widget_show (label_quotemark);
1536 gtk_box_pack_start (GTK_BOX (hbox2), label_quotemark, FALSE, FALSE, 0);
1538 entry_fw_quotemark = gtk_entry_new ();
1539 gtk_widget_show (entry_fw_quotemark);
1540 gtk_box_pack_start (GTK_BOX (hbox2), entry_fw_quotemark,
1542 gtk_widget_set_size_request (entry_fw_quotemark, 64, -1);
1544 scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
1545 gtk_widget_show (scrolledwin_quotefmt);
1546 gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0);
1547 gtk_scrolled_window_set_policy
1548 (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
1549 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1551 text_fw_quotefmt = gtk_text_view_new ();
1552 gtk_widget_show (text_fw_quotefmt);
1553 gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
1555 gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
1556 gtk_widget_set_size_request(text_fw_quotefmt, -1, 60);
1558 hbox1 = gtk_hbox_new (FALSE, 32);
1559 gtk_widget_show (hbox1);
1560 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1563 gtk_button_new_with_label (_(" Description of symbols "));
1564 gtk_widget_show (btn_quotedesc);
1565 gtk_box_pack_start (GTK_BOX (hbox1), btn_quotedesc, FALSE, FALSE, 0);
1566 g_signal_connect(G_OBJECT(btn_quotedesc), "clicked",
1567 G_CALLBACK(quote_fmt_quote_description), NULL);
1571 PACK_FRAME (vbox1, frame_quote, _("Quotation characters"));
1573 vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW);
1574 gtk_widget_show (vbox_quote);
1575 gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote);
1576 gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
1578 hbox1 = gtk_hbox_new (FALSE, 32);
1579 gtk_widget_show (hbox1);
1580 gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
1582 hbox2 = gtk_hbox_new (FALSE, 8);
1583 gtk_widget_show (hbox2);
1584 gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
1586 label_quote_chars = gtk_label_new (_("Treat these characters as quotation marks: "));
1587 gtk_widget_show (label_quote_chars);
1588 gtk_box_pack_start (GTK_BOX (hbox2), label_quote_chars, FALSE, FALSE, 0);
1590 entry_quote_chars = gtk_entry_new ();
1591 gtk_widget_show (entry_quote_chars);
1592 gtk_box_pack_start (GTK_BOX (hbox2), entry_quote_chars,
1594 gtk_widget_set_size_request (entry_quote_chars, 64, -1);
1597 compose.checkbtn_reply_with_quote= checkbtn_reply_with_quote;
1598 quote.entry_quotemark = entry_quotemark;
1599 quote.text_quotefmt = text_quotefmt;
1600 quote.entry_fw_quotemark = entry_fw_quotemark;
1601 quote.text_fw_quotefmt = text_fw_quotefmt;
1602 quote.entry_quote_chars = entry_quote_chars;
1605 static void prefs_display_create(void)
1608 GtkWidget *chkbtn_transhdr;
1609 GtkWidget *chkbtn_folder_unread;
1611 GtkWidget *label_ng_abbrev;
1612 GtkWidget *spinbtn_ng_abbrev_len;
1613 GtkObject *spinbtn_ng_abbrev_len_adj;
1614 GtkWidget *frame_summary;
1616 GtkWidget *chkbtn_swapfrom;
1617 GtkWidget *chkbtn_useaddrbook;
1618 GtkWidget *chkbtn_threadsubj;
1620 GtkWidget *label_datefmt;
1621 GtkWidget *button_datefmt;
1622 GtkWidget *entry_datefmt;
1623 GtkWidget *button_dispitem;
1625 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1626 gtk_widget_show (vbox1);
1627 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1628 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1630 vbox2 = gtk_vbox_new (FALSE, 0);
1631 gtk_widget_show (vbox2);
1632 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
1635 (vbox2, chkbtn_transhdr,
1636 _("Translate header name (such as `From:', `Subject:')"));
1638 PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
1639 _("Display unread number next to folder name"));
1641 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1643 hbox1 = gtk_hbox_new (FALSE, 8);
1644 gtk_widget_show (hbox1);
1645 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1647 label_ng_abbrev = gtk_label_new
1648 (_("Abbreviate newsgroup names longer than"));
1649 gtk_widget_show (label_ng_abbrev);
1650 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1652 spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
1653 spinbtn_ng_abbrev_len = gtk_spin_button_new
1654 (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
1655 gtk_widget_show (spinbtn_ng_abbrev_len);
1656 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
1658 gtk_widget_set_size_request (spinbtn_ng_abbrev_len, 56, -1);
1659 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
1662 label_ng_abbrev = gtk_label_new
1664 gtk_widget_show (label_ng_abbrev);
1665 gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
1667 /* ---- Summary ---- */
1669 PACK_FRAME(vbox1, frame_summary, _("Summary View"));
1671 vbox2 = gtk_vbox_new (FALSE, 0);
1672 gtk_widget_show (vbox2);
1673 gtk_container_add (GTK_CONTAINER (frame_summary), vbox2);
1674 gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
1677 (vbox2, chkbtn_swapfrom,
1678 _("Display recipient in `From' column if sender is yourself"));
1680 (vbox2, chkbtn_useaddrbook,
1681 _("Display sender using address book"));
1683 (vbox2, chkbtn_threadsubj,
1684 _("Thread using subject in addition to standard headers"));
1686 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1688 hbox1 = gtk_hbox_new (FALSE, 8);
1689 gtk_widget_show (hbox1);
1690 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1692 label_datefmt = gtk_label_new (_("Date format"));
1693 gtk_widget_show (label_datefmt);
1694 gtk_box_pack_start (GTK_BOX (hbox1), label_datefmt, FALSE, FALSE, 0);
1696 entry_datefmt = gtk_entry_new ();
1697 gtk_widget_show (entry_datefmt);
1698 gtk_box_pack_start (GTK_BOX (hbox1), entry_datefmt, TRUE, TRUE, 0);
1700 button_datefmt = gtk_button_new_with_label (" ... ");
1702 gtk_widget_show (button_datefmt);
1703 gtk_box_pack_start (GTK_BOX (hbox1), button_datefmt, FALSE, FALSE, 0);
1704 g_signal_connect (G_OBJECT (button_datefmt), "clicked",
1705 G_CALLBACK (date_format_create), NULL);
1707 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW);
1709 hbox1 = gtk_hbox_new (FALSE, 8);
1710 gtk_widget_show (hbox1);
1711 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1713 button_dispitem = gtk_button_new_with_label
1714 (_(" Set displayed items in summary... "));
1715 gtk_widget_show (button_dispitem);
1716 gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0);
1717 g_signal_connect (G_OBJECT (button_dispitem), "clicked",
1718 G_CALLBACK (prefs_summary_column_open),
1721 display.chkbtn_transhdr = chkbtn_transhdr;
1722 display.chkbtn_folder_unread = chkbtn_folder_unread;
1723 display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
1724 display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
1726 display.chkbtn_swapfrom = chkbtn_swapfrom;
1727 display.chkbtn_useaddrbook = chkbtn_useaddrbook;
1728 display.chkbtn_threadsubj = chkbtn_threadsubj;
1729 display.entry_datefmt = entry_datefmt;
1732 static void prefs_message_create(void)
1738 GtkWidget *chkbtn_mbalnum;
1739 GtkWidget *chkbtn_disphdrpane;
1740 GtkWidget *chkbtn_disphdr;
1741 GtkWidget *button_edit_disphdr;
1742 GtkWidget *hbox_linespc;
1743 GtkWidget *label_linespc;
1744 GtkObject *spinbtn_linespc_adj;
1745 GtkWidget *spinbtn_linespc;
1747 GtkWidget *frame_scr;
1748 GtkWidget *vbox_scr;
1749 GtkWidget *chkbtn_smoothscroll;
1750 GtkWidget *hbox_scr;
1751 GtkWidget *label_scr;
1752 GtkObject *spinbtn_scrollstep_adj;
1753 GtkWidget *spinbtn_scrollstep;
1754 GtkWidget *chkbtn_halfpage;
1756 GtkWidget *chkbtn_attach_desc;
1758 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1759 gtk_widget_show (vbox1);
1760 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1761 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1763 vbox2 = gtk_vbox_new (FALSE, 0);
1764 gtk_widget_show (vbox2);
1765 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1768 (vbox2, chkbtn_mbalnum,
1769 _("Display multi-byte alphanumeric as\n"
1770 "ASCII character (Japanese only)"));
1771 gtk_label_set_justify (GTK_LABEL (GTK_BIN(chkbtn_mbalnum)->child),
1774 PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane,
1775 _("Display header pane above message view"));
1777 hbox1 = gtk_hbox_new (FALSE, 8);
1778 gtk_widget_show (hbox1);
1779 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1781 PACK_CHECK_BUTTON(hbox1, chkbtn_disphdr,
1782 _("Display short headers on message view"));
1784 button_edit_disphdr = gtk_button_new_with_label (_(" Edit... "));
1785 gtk_widget_show (button_edit_disphdr);
1786 gtk_box_pack_end (GTK_BOX (hbox1), button_edit_disphdr,
1788 g_signal_connect (G_OBJECT (button_edit_disphdr), "clicked",
1789 G_CALLBACK (prefs_display_header_open),
1792 SET_TOGGLE_SENSITIVITY(chkbtn_disphdr, button_edit_disphdr);
1794 PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
1796 hbox1 = gtk_hbox_new (FALSE, 32);
1797 gtk_widget_show (hbox1);
1798 gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
1800 hbox_linespc = gtk_hbox_new (FALSE, 8);
1801 gtk_widget_show (hbox1);
1802 gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0);
1804 label_linespc = gtk_label_new (_("Line space"));
1805 gtk_widget_show (label_linespc);
1806 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1809 spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16);
1810 spinbtn_linespc = gtk_spin_button_new
1811 (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0);
1812 gtk_widget_show (spinbtn_linespc);
1813 gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc,
1815 gtk_widget_set_size_request (spinbtn_linespc, 64, -1);
1816 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE);
1818 label_linespc = gtk_label_new (_("pixel(s)"));
1819 gtk_widget_show (label_linespc);
1820 gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc,
1823 PACK_FRAME(vbox1, frame_scr, _("Scroll"));
1825 vbox_scr = gtk_vbox_new (FALSE, 0);
1826 gtk_widget_show (vbox_scr);
1827 gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr);
1828 gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8);
1830 PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page"));
1832 hbox1 = gtk_hbox_new (FALSE, 32);
1833 gtk_widget_show (hbox1);
1834 gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
1836 PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll"));
1838 hbox_scr = gtk_hbox_new (FALSE, 8);
1839 gtk_widget_show (hbox_scr);
1840 gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0);
1842 label_scr = gtk_label_new (_("Step"));
1843 gtk_widget_show (label_scr);
1844 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1846 spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10);
1847 spinbtn_scrollstep = gtk_spin_button_new
1848 (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0);
1849 gtk_widget_show (spinbtn_scrollstep);
1850 gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep,
1852 gtk_widget_set_size_request (spinbtn_scrollstep, 64, -1);
1853 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep),
1856 label_scr = gtk_label_new (_("pixel(s)"));
1857 gtk_widget_show (label_scr);
1858 gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0);
1860 SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr)
1862 vbox3 = gtk_vbox_new (FALSE, 0);
1863 gtk_widget_show (vbox3);
1864 gtk_box_pack_start (GTK_BOX (vbox1), vbox3, FALSE, FALSE, 0);
1866 PACK_CHECK_BUTTON(vbox3, chkbtn_attach_desc,
1867 _("Show attachment descriptions (rather than names)"));
1869 message.chkbtn_mbalnum = chkbtn_mbalnum;
1870 message.chkbtn_disphdrpane = chkbtn_disphdrpane;
1871 message.chkbtn_disphdr = chkbtn_disphdr;
1872 message.spinbtn_linespc = spinbtn_linespc;
1874 message.chkbtn_smoothscroll = chkbtn_smoothscroll;
1875 message.spinbtn_scrollstep = spinbtn_scrollstep;
1876 message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj;
1877 message.chkbtn_halfpage = chkbtn_halfpage;
1879 message.chkbtn_attach_desc = chkbtn_attach_desc;
1882 static void prefs_interface_create(void)
1887 /* GtkWidget *checkbtn_emacs; */
1888 GtkWidget *checkbtn_always_show_msg;
1889 GtkWidget *checkbtn_openunread;
1890 GtkWidget *checkbtn_mark_as_read_on_newwin;
1891 GtkWidget *checkbtn_openinbox;
1892 GtkWidget *checkbtn_immedexec;
1893 GtkTooltips *immedexec_tooltip;
1897 GtkWidget *menuitem;
1899 GtkWidget *button_keybind;
1901 GtkWidget *hbox_nextunreadmsgdialog;
1902 GtkWidget *optmenu_nextunreadmsgdialog;
1904 vbox1 = gtk_vbox_new (FALSE, VSPACING);
1905 gtk_widget_show (vbox1);
1906 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
1907 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
1909 vbox2 = gtk_vbox_new (FALSE, 0);
1910 gtk_widget_show (vbox2);
1911 gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
1913 /* PACK_CHECK_BUTTON (vbox2, checkbtn_emacs,
1914 _("Emulate the behavior of mouse operation of\n"
1915 "Emacs-based mailer"));
1916 gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child),
1917 GTK_JUSTIFY_LEFT); */
1920 (vbox2, checkbtn_always_show_msg,
1921 _("Always open messages in summary when selected"));
1924 (vbox2, checkbtn_openunread,
1925 _("Open first unread message when entering a folder"));
1928 (vbox2, checkbtn_mark_as_read_on_newwin,
1929 _("Only mark message as read when opened in new window"));
1932 (vbox2, checkbtn_openinbox,
1933 _("Go to inbox after receiving new mail"));
1935 vbox3 = gtk_vbox_new (FALSE, 0);
1936 gtk_widget_show (vbox3);
1937 gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0);
1939 immedexec_tooltip = gtk_tooltips_new();
1942 (vbox3, checkbtn_immedexec,
1943 _("Execute immediately when moving or deleting messages"));
1944 gtk_tooltips_set_tip(GTK_TOOLTIPS(immedexec_tooltip), checkbtn_immedexec,
1945 _("Messages will be marked until execution"
1946 " if this is turned off"),
1949 hbox1 = gtk_hbox_new (FALSE, 0);
1950 gtk_widget_show (hbox1);
1951 gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0);
1953 /* Next Unread Message Dialog */
1954 hbox_nextunreadmsgdialog = gtk_hbox_new (FALSE, 8);
1955 gtk_widget_show (hbox1);
1956 gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
1958 label = gtk_label_new (_("Show no-unread-message dialog"));
1959 gtk_widget_show (label);
1960 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
1962 optmenu_nextunreadmsgdialog = gtk_option_menu_new ();
1963 gtk_widget_show (optmenu_nextunreadmsgdialog);
1964 gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), optmenu_nextunreadmsgdialog, FALSE, FALSE, 8);
1966 menu = gtk_menu_new ();
1967 MENUITEM_ADD (menu, menuitem, _("Always"), NEXTUNREADMSGDIALOG_ALWAYS);
1968 MENUITEM_ADD (menu, menuitem, _("Assume 'Yes'"),
1969 NEXTUNREADMSGDIALOG_ASSUME_YES);
1970 MENUITEM_ADD (menu, menuitem, _("Assume 'No'"),
1971 NEXTUNREADMSGDIALOG_ASSUME_NO);
1973 gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_nextunreadmsgdialog), menu);
1975 hbox1 = gtk_hbox_new (FALSE, 8);
1976 gtk_widget_show (hbox1);
1977 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
1979 button_keybind = gtk_button_new_with_label (_(" Set key bindings... "));
1980 gtk_widget_show (button_keybind);
1981 gtk_box_pack_start (GTK_BOX (hbox1), button_keybind, FALSE, FALSE, 0);
1982 g_signal_connect (G_OBJECT (button_keybind), "clicked",
1983 G_CALLBACK (prefs_keybind_select), NULL);
1985 /* interface.checkbtn_emacs = checkbtn_emacs; */
1986 interface.checkbtn_always_show_msg = checkbtn_always_show_msg;
1987 interface.checkbtn_openunread = checkbtn_openunread;
1988 interface.checkbtn_mark_as_read_on_newwin
1989 = checkbtn_mark_as_read_on_newwin;
1990 interface.checkbtn_openinbox = checkbtn_openinbox;
1991 interface.checkbtn_immedexec = checkbtn_immedexec;
1992 interface.optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
1995 static void prefs_other_create(void)
2000 GtkWidget *frame_addr;
2001 GtkWidget *vbox_addr;
2002 GtkWidget *checkbtn_addaddrbyclick;
2004 GtkWidget *frame_cliplog;
2005 GtkWidget *vbox_cliplog;
2006 GtkWidget *hbox_cliplog;
2007 GtkWidget *checkbtn_cliplog;
2008 GtkWidget *loglength_label;
2009 GtkWidget *loglength_entry;
2010 GtkTooltips *loglength_tooltip;
2012 GtkWidget *frame_exit;
2013 GtkWidget *vbox_exit;
2014 GtkWidget *checkbtn_confonexit;
2015 GtkWidget *checkbtn_cleanonexit;
2016 GtkWidget *checkbtn_askonclean;
2017 GtkWidget *checkbtn_warnqueued;
2019 GtkWidget *label_iotimeout;
2020 GtkWidget *spinbtn_iotimeout;
2021 GtkObject *spinbtn_iotimeout_adj;
2025 GtkWidget *frame_ssl;
2026 GtkWidget *vbox_ssl;
2027 GtkWidget *hbox_ssl;
2028 GtkWidget *checkbtn_ssl_ask_unknown_valid;
2031 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2032 gtk_widget_show (vbox1);
2033 gtk_container_add (GTK_CONTAINER (notebook), vbox1);
2034 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
2036 PACK_FRAME (vbox1, frame_addr, _("Address book"));
2038 vbox_addr = gtk_vbox_new (FALSE, 0);
2039 gtk_widget_show (vbox_addr);
2040 gtk_container_add (GTK_CONTAINER (frame_addr), vbox_addr);
2041 gtk_container_set_border_width (GTK_CONTAINER (vbox_addr), 8);
2044 (vbox_addr, checkbtn_addaddrbyclick,
2045 _("Add address to destination when double-clicked"));
2048 PACK_FRAME (vbox1, frame_cliplog, _("Log Size"));
2050 vbox_cliplog = gtk_vbox_new (FALSE, 0);
2051 gtk_widget_show (vbox_cliplog);
2052 gtk_container_add (GTK_CONTAINER (frame_cliplog), vbox_cliplog);
2053 gtk_container_set_border_width (GTK_CONTAINER (vbox_cliplog), 8);
2054 PACK_CHECK_BUTTON (vbox_cliplog, checkbtn_cliplog,
2055 _("Clip the log size"));
2056 hbox_cliplog = gtk_hbox_new (FALSE, 3);
2057 gtk_container_add (GTK_CONTAINER (vbox_cliplog), hbox_cliplog);
2058 gtk_widget_show (hbox_cliplog);
2060 loglength_label = gtk_label_new (_("Log window length"));
2061 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_label,
2063 gtk_widget_show (GTK_WIDGET (loglength_label));
2065 loglength_tooltip = gtk_tooltips_new();
2067 loglength_entry = gtk_entry_new ();
2068 gtk_widget_set_size_request (GTK_WIDGET (loglength_entry), 64, -1);
2069 gtk_box_pack_start (GTK_BOX (hbox_cliplog), loglength_entry,
2071 gtk_widget_show (GTK_WIDGET (loglength_entry));
2072 gtk_tooltips_set_tip(GTK_TOOLTIPS(loglength_tooltip), loglength_entry,
2073 _("0 to stop logging in the log window"),
2075 SET_TOGGLE_SENSITIVITY(checkbtn_cliplog, loglength_entry);
2080 PACK_FRAME (vbox1, frame_ssl, _("Security"));
2082 vbox_ssl = gtk_vbox_new (FALSE, 0);
2083 gtk_widget_show (vbox_ssl);
2084 gtk_container_add (GTK_CONTAINER (frame_ssl), vbox_ssl);
2085 gtk_container_set_border_width (GTK_CONTAINER (vbox_ssl), 8);
2086 PACK_CHECK_BUTTON (vbox_ssl, checkbtn_ssl_ask_unknown_valid,
2087 _("Ask before accepting SSL certificates"));
2088 hbox_ssl = gtk_hbox_new (FALSE, 3);
2089 gtk_container_add (GTK_CONTAINER (vbox_ssl), hbox_ssl);
2090 gtk_widget_show (hbox_ssl);
2095 PACK_FRAME (vbox1, frame_exit, _("On exit"));
2097 vbox_exit = gtk_vbox_new (FALSE, 0);
2098 gtk_widget_show (vbox_exit);
2099 gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit);
2100 gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8);
2102 PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit,
2103 _("Confirm on exit"));
2105 hbox1 = gtk_hbox_new (FALSE, 32);
2106 gtk_widget_show (hbox1);
2107 gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0);
2109 PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit,
2110 _("Empty trash on exit"));
2111 PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean,
2112 _("Ask before emptying"));
2113 SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
2115 PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
2116 _("Warn if there are queued messages"));
2118 hbox1 = gtk_hbox_new (FALSE, 8);
2119 gtk_widget_show (hbox1);
2120 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2122 label_iotimeout = gtk_label_new (_("Socket I/O timeout:"));
2123 gtk_widget_show (label_iotimeout);
2124 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2126 spinbtn_iotimeout_adj = gtk_adjustment_new (60, 0, 1000, 1, 10, 10);
2127 spinbtn_iotimeout = gtk_spin_button_new
2128 (GTK_ADJUSTMENT (spinbtn_iotimeout_adj), 1, 0);
2129 gtk_widget_show (spinbtn_iotimeout);
2130 gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_iotimeout,
2132 gtk_widget_set_size_request (spinbtn_iotimeout, 64, -1);
2133 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_iotimeout), TRUE);
2135 label_iotimeout = gtk_label_new (_("seconds"));
2136 gtk_widget_show (label_iotimeout);
2137 gtk_box_pack_start (GTK_BOX (hbox1), label_iotimeout, FALSE, FALSE, 0);
2139 other.checkbtn_addaddrbyclick = checkbtn_addaddrbyclick;
2141 other.checkbtn_cliplog = checkbtn_cliplog;
2142 other.loglength_entry = loglength_entry;
2144 other.checkbtn_confonexit = checkbtn_confonexit;
2145 other.checkbtn_cleanonexit = checkbtn_cleanonexit;
2146 other.checkbtn_askonclean = checkbtn_askonclean;
2147 other.checkbtn_warnqueued = checkbtn_warnqueued;
2149 other.spinbtn_iotimeout = spinbtn_iotimeout;
2150 other.spinbtn_iotimeout_adj = spinbtn_iotimeout_adj;
2154 other.checkbtn_ssl_ask_unknown_valid = checkbtn_ssl_ask_unknown_valid;
2159 static void date_format_ok_btn_clicked(GtkButton *button, GtkWidget **widget)
2161 GtkWidget *datefmt_sample = NULL;
2164 g_return_if_fail(widget != NULL);
2165 g_return_if_fail(*widget != NULL);
2166 g_return_if_fail(display.entry_datefmt != NULL);
2168 datefmt_sample = GTK_WIDGET(g_object_get_data
2169 (G_OBJECT(*widget), "datefmt_sample"));
2170 g_return_if_fail(datefmt_sample != NULL);
2172 text = gtk_editable_get_chars(GTK_EDITABLE(datefmt_sample), 0, -1);
2173 g_free(prefs_common.date_format);
2174 prefs_common.date_format = text;
2175 gtk_entry_set_text(GTK_ENTRY(display.entry_datefmt), text);
2177 gtk_widget_destroy(*widget);
2181 static void date_format_cancel_btn_clicked(GtkButton *button,
2184 g_return_if_fail(widget != NULL);
2185 g_return_if_fail(*widget != NULL);
2187 gtk_widget_destroy(*widget);
2191 static gboolean date_format_key_pressed(GtkWidget *keywidget, GdkEventKey *event,
2194 if (event && event->keyval == GDK_Escape)
2195 date_format_cancel_btn_clicked(NULL, widget);
2199 static gboolean date_format_on_delete(GtkWidget *dialogwidget,
2200 GdkEventAny *event, GtkWidget **widget)
2202 g_return_val_if_fail(widget != NULL, FALSE);
2203 g_return_val_if_fail(*widget != NULL, FALSE);
2209 static void date_format_entry_on_change(GtkEditable *editable,
2213 struct tm *cal_time;
2217 cur_time = time(NULL);
2218 cal_time = localtime(&cur_time);
2220 text = gtk_editable_get_chars(editable, 0, -1);
2222 strftime(buffer, sizeof buffer, text, cal_time);
2225 text = conv_codeset_strdup(buffer,
2226 conv_get_locale_charset_str(),
2229 text = g_strdup(buffer);
2231 gtk_label_set_text(example, text);
2236 static void date_format_select_row(GtkTreeView *list_view,
2238 GtkTreeViewColumn *column,
2239 GtkWidget *date_format)
2243 const gchar *old_format;
2245 GtkWidget *datefmt_sample;
2247 GtkTreeModel *model;
2249 g_return_if_fail(date_format != NULL);
2251 /* only on double click */
2252 datefmt_sample = GTK_WIDGET(g_object_get_data(G_OBJECT(date_format),
2255 g_return_if_fail(datefmt_sample != NULL);
2257 model = gtk_tree_view_get_model(list_view);
2259 /* get format from list */
2260 if (!gtk_tree_model_get_iter(model, &iter, path))
2263 gtk_tree_model_get(model, &iter, DATEFMT_FMT, &format, -1);
2265 cur_pos = gtk_editable_get_position(GTK_EDITABLE(datefmt_sample));
2266 old_format = gtk_entry_get_text(GTK_ENTRY(datefmt_sample));
2268 /* insert the format into the text entry */
2269 new_format = g_malloc(strlen(old_format) + 3);
2271 strncpy(new_format, old_format, cur_pos);
2272 new_format[cur_pos] = '\0';
2273 strcat(new_format, format);
2274 strcat(new_format, &old_format[cur_pos]);
2276 gtk_entry_set_text(GTK_ENTRY(datefmt_sample), new_format);
2277 gtk_editable_set_position(GTK_EDITABLE(datefmt_sample), cur_pos + 2);
2282 static GtkWidget *date_format_create(GtkButton *button, void *data)
2284 static GtkWidget *datefmt_win = NULL;
2287 GtkWidget *scrolledwindow1;
2288 GtkWidget *datefmt_list_view;
2293 GtkWidget *confirm_area;
2295 GtkWidget *cancel_btn;
2296 GtkWidget *datefmt_entry;
2297 GtkListStore *store;
2326 const gint TIME_FORMAT_ELEMS =
2327 sizeof time_format / sizeof time_format[0];
2329 GtkCellRenderer *renderer;
2330 GtkTreeViewColumn *column;
2331 GtkTreeSelection *selection;
2333 time_format[0].txt = _("the full abbreviated weekday name");
2334 time_format[1].txt = _("the full weekday name");
2335 time_format[2].txt = _("the abbreviated month name");
2336 time_format[3].txt = _("the full month name");
2337 time_format[4].txt = _("the preferred date and time for the current locale");
2338 time_format[5].txt = _("the century number (year/100)");
2339 time_format[6].txt = _("the day of the month as a decimal number");
2340 time_format[7].txt = _("the hour as a decimal number using a 24-hour clock");
2341 time_format[8].txt = _("the hour as a decimal number using a 12-hour clock");
2342 time_format[9].txt = _("the day of the year as a decimal number");
2343 time_format[10].txt = _("the month as a decimal number");
2344 time_format[11].txt = _("the minute as a decimal number");
2345 time_format[12].txt = _("either AM or PM");
2346 time_format[13].txt = _("the second as a decimal number");
2347 time_format[14].txt = _("the day of the week as a decimal number");
2348 time_format[15].txt = _("the preferred date for the current locale");
2349 time_format[16].txt = _("the last two digits of a year");
2350 time_format[17].txt = _("the year as a decimal number");
2351 time_format[18].txt = _("the time zone or name or abbreviation");
2353 if (datefmt_win) return datefmt_win;
2355 store = gtk_list_store_new(N_DATEFMT_COLUMNS,
2360 for (i = 0; i < TIME_FORMAT_ELEMS; i++) {
2363 gtk_list_store_append(store, &iter);
2364 gtk_list_store_set(store, &iter,
2365 DATEFMT_FMT, time_format[i].fmt,
2366 DATEFMT_TXT, time_format[i].txt,
2370 datefmt_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
2371 gtk_container_set_border_width(GTK_CONTAINER(datefmt_win), 8);
2372 gtk_window_set_title(GTK_WINDOW(datefmt_win), _("Date format"));
2373 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2374 gtk_widget_set_size_request(datefmt_win, 440, 280);
2376 vbox1 = gtk_vbox_new(FALSE, 10);
2377 gtk_widget_show(vbox1);
2378 gtk_container_add(GTK_CONTAINER(datefmt_win), vbox1);
2380 scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
2381 gtk_scrolled_window_set_policy
2382 (GTK_SCROLLED_WINDOW(scrolledwindow1),
2383 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2384 gtk_widget_show(scrolledwindow1);
2385 gtk_box_pack_start(GTK_BOX(vbox1), scrolledwindow1, TRUE, TRUE, 0);
2387 datefmt_list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
2388 g_object_unref(G_OBJECT(store));
2389 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(datefmt_list_view), TRUE);
2390 gtk_widget_show(datefmt_list_view);
2391 gtk_container_add(GTK_CONTAINER(scrolledwindow1), datefmt_list_view);
2393 renderer = gtk_cell_renderer_text_new();
2394 column = gtk_tree_view_column_new_with_attributes
2395 (_("Specifier"), renderer, "text", DATEFMT_FMT,
2397 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2399 renderer = gtk_cell_renderer_text_new();
2400 column = gtk_tree_view_column_new_with_attributes
2401 (_("Description"), renderer, "text", DATEFMT_TXT,
2403 gtk_tree_view_append_column(GTK_TREE_VIEW(datefmt_list_view), column);
2405 /* gtk_clist_set_column_width(GTK_CLIST(datefmt_clist), 0, 80); */
2406 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(datefmt_list_view));
2407 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
2409 g_signal_connect(G_OBJECT(datefmt_list_view), "row_activated",
2410 G_CALLBACK(date_format_select_row),
2413 table = gtk_table_new(2, 2, FALSE);
2414 gtk_widget_show(table);
2415 gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
2416 gtk_table_set_row_spacings(GTK_TABLE(table), 4);
2417 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
2419 label1 = gtk_label_new(_("Date format"));
2420 gtk_widget_show(label1);
2421 gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1,
2423 gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_LEFT);
2424 gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
2426 datefmt_entry = gtk_entry_new();
2427 gtk_entry_set_max_length(GTK_ENTRY(datefmt_entry), 256);
2428 gtk_widget_show(datefmt_entry);
2429 gtk_table_attach(GTK_TABLE(table), datefmt_entry, 1, 2, 0, 1,
2430 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2432 /* we need the "sample" entry box; add it as data so callbacks can
2433 * get the entry box */
2434 g_object_set_data(G_OBJECT(datefmt_win), "datefmt_sample",
2437 label2 = gtk_label_new(_("Example"));
2438 gtk_widget_show(label2);
2439 gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
2441 gtk_label_set_justify(GTK_LABEL(label2), GTK_JUSTIFY_LEFT);
2442 gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
2444 label3 = gtk_label_new("");
2445 gtk_widget_show(label3);
2446 gtk_table_attach(GTK_TABLE(table), label3, 1, 2, 1, 2,
2447 (GTK_EXPAND | GTK_FILL), 0, 0, 0);
2448 gtk_label_set_justify(GTK_LABEL(label3), GTK_JUSTIFY_LEFT);
2449 gtk_misc_set_alignment(GTK_MISC(label3), 0, 0.5);
2451 gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
2452 &cancel_btn, GTK_STOCK_CANCEL, NULL, NULL);
2454 gtk_box_pack_start(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 0);
2455 gtk_widget_show(confirm_area);
2456 gtk_widget_grab_default(ok_btn);
2458 /* set the current format */
2459 gtk_entry_set_text(GTK_ENTRY(datefmt_entry), prefs_common.date_format);
2460 date_format_entry_on_change(GTK_EDITABLE(datefmt_entry),
2463 g_signal_connect(G_OBJECT(ok_btn), "clicked",
2464 G_CALLBACK(date_format_ok_btn_clicked),
2466 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
2467 G_CALLBACK(date_format_cancel_btn_clicked),
2469 g_signal_connect(G_OBJECT(datefmt_win), "key_press_event",
2470 G_CALLBACK(date_format_key_pressed),
2472 g_signal_connect(G_OBJECT(datefmt_win), "delete_event",
2473 G_CALLBACK(date_format_on_delete),
2475 g_signal_connect(G_OBJECT(datefmt_entry), "changed",
2476 G_CALLBACK(date_format_entry_on_change),
2479 gtk_window_set_position(GTK_WINDOW(datefmt_win), GTK_WIN_POS_CENTER);
2480 gtk_window_set_modal(GTK_WINDOW(datefmt_win), TRUE);
2482 gtk_widget_show(datefmt_win);
2483 manage_window_set_transient(GTK_WINDOW(datefmt_win));
2485 gtk_widget_grab_focus(ok_btn);
2490 static void prefs_keybind_select(void)
2497 GtkWidget *confirm_area;
2499 GtkWidget *cancel_btn;
2501 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
2502 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
2503 gtk_window_set_title (GTK_WINDOW (window), _("Key bindings"));
2504 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
2505 gtk_window_set_modal (GTK_WINDOW (window), TRUE);
2506 gtk_window_set_resizable(GTK_WINDOW (window), FALSE);
2507 manage_window_set_transient (GTK_WINDOW (window));
2509 vbox1 = gtk_vbox_new (FALSE, VSPACING);
2510 gtk_container_add (GTK_CONTAINER (window), vbox1);
2511 gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
2513 hbox1 = gtk_hbox_new (FALSE, 8);
2514 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2516 label = gtk_label_new
2517 (_("Select preset:"));
2518 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2519 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2521 hbox1 = gtk_hbox_new (FALSE, 8);
2522 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2524 combo = gtk_combo_new ();
2525 gtk_box_pack_start (GTK_BOX (hbox1), combo, TRUE, TRUE, 0);
2526 gtkut_combo_set_items (GTK_COMBO (combo),
2532 gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO (combo)->entry), FALSE);
2534 hbox1 = gtk_hbox_new (FALSE, 8);
2535 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2537 label = gtk_label_new
2538 (_("You can also modify each menu shortcut by pressing\n"
2539 "any key(s) when placing the mouse pointer on the item."));
2540 gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
2541 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
2543 hbox1 = gtk_hbox_new (FALSE, 8);
2544 gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
2546 gtkut_stock_button_set_create (&confirm_area, &ok_btn, GTK_STOCK_OK,
2547 &cancel_btn, GTK_STOCK_CANCEL,
2549 gtk_box_pack_end (GTK_BOX (hbox1), confirm_area, FALSE, FALSE, 0);
2550 gtk_widget_grab_default (ok_btn);
2552 MANAGE_WINDOW_SIGNALS_CONNECT(window);
2553 g_signal_connect (G_OBJECT (window), "delete_event",
2554 G_CALLBACK (prefs_keybind_deleted), NULL);
2555 g_signal_connect (G_OBJECT (window), "key_press_event",
2556 G_CALLBACK (prefs_keybind_key_pressed), NULL);
2557 g_signal_connect (G_OBJECT (ok_btn), "clicked",
2558 G_CALLBACK (prefs_keybind_apply_clicked),
2560 g_signal_connect (G_OBJECT (cancel_btn), "clicked",
2561 G_CALLBACK (prefs_keybind_cancel),
2564 gtk_widget_show_all(window);
2566 keybind.window = window;
2567 keybind.combo = combo;
2570 static gboolean prefs_keybind_key_pressed(GtkWidget *widget, GdkEventKey *event,
2573 if (event && event->keyval == GDK_Escape)
2574 prefs_keybind_cancel();
2578 static gint prefs_keybind_deleted(GtkWidget *widget, GdkEventAny *event,
2581 prefs_keybind_cancel();
2585 static void prefs_keybind_cancel(void)
2587 gtk_widget_destroy(keybind.window);
2588 keybind.window = NULL;
2589 keybind.combo = NULL;
2593 const gchar *accel_path;
2594 const gchar *accel_key;
2597 static void prefs_keybind_apply(struct KeyBind keybind[], gint num)
2601 GdkModifierType mods;
2603 for (i = 0; i < num; i++) {
2604 const gchar *accel_key
2605 = keybind[i].accel_key ? keybind[i].accel_key : "";
2606 gtk_accelerator_parse(accel_key, &key, &mods);
2607 gtk_accel_map_change_entry(keybind[i].accel_path,
2612 static void prefs_keybind_apply_clicked(GtkWidget *widget)
2614 GtkEntry *entry = GTK_ENTRY(GTK_COMBO(keybind.combo)->entry);
2616 struct KeyBind *menurc;
2619 static struct KeyBind default_menurc[] = {
2620 {"<Main>/File/Empty all Trash folders", ""},
2621 {"<Main>/File/Save as...", "<control>S"},
2622 {"<Main>/File/Print...", ""},
2623 {"<Main>/File/Exit", "<control>Q"},
2625 {"<Main>/Edit/Copy", "<control>C"},
2626 {"<Main>/Edit/Select all", "<control>A"},
2627 {"<Main>/Edit/Find in current message...", "<control>F"},
2628 {"<Main>/Edit/Search folder...", "<shift><control>F"},
2630 {"<Main>/View/Show or hide/Message View", "V"},
2631 {"<Main>/View/Thread view", "<control>T"},
2632 {"<Main>/View/Go to/Prev message", "P"},
2633 {"<Main>/View/Go to/Next message", "N"},
2634 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2635 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2636 {"<Main>/View/Go to/Other folder...", "G"},
2637 {"<Main>/View/Open in new window", "<control><alt>N"},
2638 {"<Main>/View/Message source", "<control>U"},
2639 {"<Main>/View/Show all headers", "<control>H"},
2640 {"<Main>/View/Update summary", "<control><alt>U"},
2642 {"<Main>/Message/Receive/Get from current account",
2644 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2645 {"<Main>/Message/Compose an email message", "<control>M"},
2646 {"<Main>/Message/Reply", "<control>R"},
2647 {"<Main>/Message/Reply to/all", "<shift><control>R"},
2648 {"<Main>/Message/Reply to/sender", ""},
2649 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2650 {"<Main>/Message/Forward", "<control><alt>F"},
2651 /* {"<Main>/Message/Forward as attachment", ""}, */
2652 {"<Main>/Message/Move...", "<control>O"},
2653 {"<Main>/Message/Copy...", "<shift><control>O"},
2654 {"<Main>/Message/Delete", "<control>D"},
2655 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2656 {"<Main>/Message/Mark/Unmark", "U"},
2657 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2658 {"<Main>/Message/Mark/Mark as read", ""},
2660 {"<Main>/Tools/Address book", "<shift><control>A"},
2661 {"<Main>/Tools/Execute", "X"},
2662 {"<Main>/Tools/Log window", "<shift><control>L"},
2664 {"<Compose>/Message/Close", "<control>W"},
2665 {"<Compose>/Edit/Select all", "<control>A"},
2666 {"<Compose>/Edit/Advanced/Move a word backward", ""},
2667 {"<Compose>/Edit/Advanced/Move a word forward", ""},
2668 {"<Compose>/Edit/Advanced/Move to beginning of line", ""},
2669 {"<Compose>/Edit/Advanced/Delete a word backward", ""},
2670 {"<Compose>/Edit/Advanced/Delete a word forward", ""},
2673 static struct KeyBind mew_wl_menurc[] = {
2674 {"<Main>/File/Empty all Trash folders", "<shift>D"},
2675 {"<Main>/File/Save as...", "Y"},
2676 {"<Main>/File/Print...", "<shift>numbersign"},
2677 {"<Main>/File/Exit", "<shift>Q"},
2679 {"<Main>/Edit/Copy", "<control>C"},
2680 {"<Main>/Edit/Select all", "<control>A"},
2681 {"<Main>/Edit/Find in current message...", "<control>F"},
2682 {"<Main>/Edit/Search folder...", "<control>S"},
2684 {"<Main>/View/Show or hide/Message View", ""},
2685 {"<Main>/View/Thread view", "<shift>T"},
2686 {"<Main>/View/Go to/Prev message", "P"},
2687 {"<Main>/View/Go to/Next message", "N"},
2688 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2689 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2690 {"<Main>/View/Go to/Other folder...", "G"},
2691 {"<Main>/View/Open in new window", "<control><alt>N"},
2692 {"<Main>/View/Message source", "<control>U"},
2693 {"<Main>/View/Show all headers", "<shift>H"},
2694 {"<Main>/View/Update summary", "<shift>S"},
2696 {"<Main>/Message/Receive/Get from current account",
2698 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2699 {"<Main>/Message/Compose an email message", "W"},
2700 {"<Main>/Message/Reply", "<control>R"},
2701 {"<Main>/Message/Reply to/all", "<shift>A"},
2702 {"<Main>/Message/Reply to/sender", ""},
2703 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2704 {"<Main>/Message/Forward", "F"},
2705 /* {"<Main>/Message/Forward as attachment", "<shift>F"}, */
2706 {"<Main>/Message/Move...", "O"},
2707 {"<Main>/Message/Copy...", "<shift>O"},
2708 {"<Main>/Message/Delete", "D"},
2709 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2710 {"<Main>/Message/Mark/Unmark", "U"},
2711 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2712 {"<Main>/Message/Mark/Mark as read", "<shift>R"},
2714 {"<Main>/Tools/Address book", "<shift><control>A"},
2715 {"<Main>/Tools/Execute", "X"},
2716 {"<Main>/Tools/Log window", "<shift><control>L"},
2718 {"<Compose>/Message/Close", "<alt>W"},
2719 {"<Compose>/Edit/Select all", ""},
2720 {"<Compose>/Edit/Advanced/Move a word backward," "<alt>B"},
2721 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2722 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2723 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2724 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2727 static struct KeyBind mutt_menurc[] = {
2728 {"<Main>/File/Empty all Trash folders", ""},
2729 {"<Main>/File/Save as...", "S"},
2730 {"<Main>/File/Print...", "P"},
2731 {"<Main>/File/Exit", "Q"},
2733 {"<Main>/Edit/Copy", "<control>C"},
2734 {"<Main>/Edit/Select all", "<control>A"},
2735 {"<Main>/Edit/Find in current message...", "<control>F"},
2736 {"<Main>/Edit/Search messages...", "slash"},
2738 {"<Main>/View/Show or hide/Message view", "V"},
2739 {"<Main>/View/Thread view", "<control>T"},
2740 {"<Main>/View/Go to/Prev message", ""},
2741 {"<Main>/View/Go to/Next message", ""},
2742 {"<Main>/View/Go to/Prev unread message", ""},
2743 {"<Main>/View/Go to/Next unread message", ""},
2744 {"<Main>/View/Go to/Other folder...", "C"},
2745 {"<Main>/View/Open in new window", "<control><alt>N"},
2746 {"<Main>/View/Message source", "<control>U"},
2747 {"<Main>/View/Show all headers", "<control>H"},
2748 {"<Main>/View/Update summary", "<control><alt>U"},
2750 {"<Main>/Message/Receive/Get from current account",
2752 {"<Main>/Message/Receive/Get from all accounts","<shift><control>I"},
2753 {"<Main>/Message/Compose an email message", "M"},
2754 {"<Main>/Message/Reply", "R"},
2755 {"<Main>/Message/Reply to/all", "G"},
2756 {"<Main>/Message/Reply to/sender", ""},
2757 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2758 {"<Main>/Message/Forward", "F"},
2759 {"<Main>/Message/Forward as attachment", ""},
2760 {"<Main>/Message/Move...", "<control>O"},
2761 {"<Main>/Message/Copy...", "<shift>C"},
2762 {"<Main>/Message/Delete", "D"},
2763 {"<Main>/Message/Mark/Mark", "<shift>F"},
2764 {"<Main>/Message/Mark/Unmark", "U"},
2765 {"<Main>/Message/Mark/Mark as unread", "<shift>N"},
2766 {"<Main>/Message/Mark/Mark as read", ""},
2768 {"<Main>/Tools/Address book", "<shift><control>A"},
2769 {"<Main>/Tools/Execute", "X"},
2770 {"<Main>/Tools/Log window", "<shift><control>L"},
2772 {"<Compose>/Message/Close", "<alt>W"},
2773 {"<Compose>/Edit/Select all", ""},
2774 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2775 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2776 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2777 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2778 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2781 static struct KeyBind old_sylpheed_menurc[] = {
2782 {"<Main>/File/Empty all Trash folders", ""},
2783 {"<Main>/File/Save as...", ""},
2784 {"<Main>/File/Print...", "<alt>P"},
2785 {"<Main>/File/Exit", "<alt>Q"},
2787 {"<Main>/Edit/Copy", "<control>C"},
2788 {"<Main>/Edit/Select all", "<control>A"},
2789 {"<Main>/Edit/Find in current message...", "<control>F"},
2790 {"<Main>/Edit/Search folder...", "<control>S"},
2792 {"<Main>/View/Show or hide/Message View", ""},
2793 {"<Main>/View/Thread view", "<control>T"},
2794 {"<Main>/View/Go to/Prev message", "P"},
2795 {"<Main>/View/Go to/Next message", "N"},
2796 {"<Main>/View/Go to/Prev unread message", "<shift>P"},
2797 {"<Main>/View/Go to/Next unread message", "<shift>N"},
2798 {"<Main>/View/Go to/Other folder...", "<alt>G"},
2799 {"<Main>/View/Open in new window", "<shift><control>N"},
2800 {"<Main>/View/Message source", "<control>U"},
2801 {"<Main>/View/Show all headers", "<control>H"},
2802 {"<Main>/View/Update summary", "<alt>U"},
2804 {"<Main>/Message/Receive/Get from current account",
2806 {"<Main>/Message/Receive/Get from all accounts","<shift><alt>I"},
2807 {"<Main>/Message/Compose an email message", "<alt>N"},
2808 {"<Main>/Message/Reply", "<alt>R"},
2809 {"<Main>/Message/Reply to/all", "<shift><alt>R"},
2810 {"<Main>/Message/Reply to/sender", "<control><alt>R"},
2811 {"<Main>/Message/Reply to/mailing list", "<control>L"},
2812 {"<Main>/Message/Forward", "<shift><alt>F"},
2813 /* "(menu-path \"<Main>/Message/Forward as attachment", "<shift><control>F"}, */
2814 {"<Main>/Message/Move...", "<alt>O"},
2815 {"<Main>/Message/Copy...", ""},
2816 {"<Main>/Message/Delete", "<alt>D"},
2817 {"<Main>/Message/Mark/Mark", "<shift>asterisk"},
2818 {"<Main>/Message/Mark/Unmark", "U"},
2819 {"<Main>/Message/Mark/Mark as unread", "<shift>exclam"},
2820 {"<Main>/Message/Mark/Mark as read", ""},
2822 {"<Main>/Tools/Address book", "<alt>A"},
2823 {"<Main>/Tools/Execute", "<alt>X"},
2824 {"<Main>/Tools/Log window", "<alt>L"},
2826 {"<Compose>/Message/Close", "<alt>W"},
2827 {"<Compose>/Edit/Select all", ""},
2828 {"<Compose>/Edit/Advanced/Move a word backward", "<alt>B"},
2829 {"<Compose>/Edit/Advanced/Move a word forward", "<alt>F"},
2830 {"<Compose>/Edit/Advanced/Move to beginning of line", "<control>A"},
2831 {"<Compose>/Edit/Advanced/Delete a word backward", "<control>W"},
2832 {"<Compose>/Edit/Advanced/Delete a word forward", "<alt>D"},
2835 text = gtk_entry_get_text(entry);
2837 if (!strcmp(text, _("Default"))) {
2838 menurc = default_menurc;
2839 n_menurc = G_N_ELEMENTS(default_menurc);
2840 } else if (!strcmp(text, "Mew / Wanderlust")) {
2841 menurc = mew_wl_menurc;
2842 n_menurc = G_N_ELEMENTS(mew_wl_menurc);
2843 } else if (!strcmp(text, "Mutt")) {
2844 menurc = mutt_menurc;
2845 n_menurc = G_N_ELEMENTS(mutt_menurc);
2846 } else if (!strcmp(text, _("Old Sylpheed"))) {
2847 menurc = old_sylpheed_menurc;
2848 n_menurc = G_N_ELEMENTS(old_sylpheed_menurc);
2853 /* prefs_keybind_apply(empty_menurc, G_N_ELEMENTS(empty_menurc)); */
2854 prefs_keybind_apply(menurc, n_menurc);
2856 gtk_widget_destroy(keybind.window);
2857 keybind.window = NULL;
2858 keybind.combo = NULL;
2861 static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam)
2864 GtkWidget *menuitem;
2867 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2868 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2869 charset = g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID);
2870 g_free(*((gchar **)pparam->data));
2871 *((gchar **)pparam->data) = g_strdup(charset);
2874 static void prefs_common_charset_set_optmenu(PrefParam *pparam)
2876 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2879 g_return_if_fail(optmenu != NULL);
2880 g_return_if_fail(*((gchar **)pparam->data) != NULL);
2882 index = menu_find_option_menu_index(optmenu, *((gchar **)pparam->data),
2883 (GCompareFunc)strcmp);
2885 gtk_option_menu_set_history(optmenu, index);
2887 gtk_option_menu_set_history(optmenu, 0);
2888 prefs_common_charset_set_data_from_optmenu(pparam);
2892 static void prefs_common_encoding_set_data_from_optmenu(PrefParam *pparam)
2895 GtkWidget *menuitem;
2897 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2898 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2899 *((TransferEncodingMethod *)pparam->data) = GPOINTER_TO_INT
2900 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2903 static void prefs_common_encoding_set_optmenu(PrefParam *pparam)
2905 TransferEncodingMethod method =
2906 *((TransferEncodingMethod *)pparam->data);
2907 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2910 g_return_if_fail(optmenu != NULL);
2912 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(method),
2915 gtk_option_menu_set_history(optmenu, index);
2917 gtk_option_menu_set_history(optmenu, 0);
2918 prefs_common_encoding_set_data_from_optmenu(pparam);
2922 static void prefs_common_recv_dialog_set_data_from_optmenu(PrefParam *pparam)
2925 GtkWidget *menuitem;
2927 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2928 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2929 *((RecvDialogMode *)pparam->data) = GPOINTER_TO_INT
2930 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2933 static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam)
2935 RecvDialogMode mode = *((RecvDialogMode *)pparam->data);
2936 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2938 GtkWidget *menuitem;
2941 index = menu_find_option_menu_index(optmenu, GINT_TO_POINTER(mode),
2944 gtk_option_menu_set_history(optmenu, index);
2946 gtk_option_menu_set_history(optmenu, 0);
2947 prefs_common_recv_dialog_set_data_from_optmenu(pparam);
2950 menu = gtk_option_menu_get_menu(optmenu);
2951 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2952 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2955 static void prefs_common_send_dialog_set_data_from_optmenu(PrefParam *pparam)
2958 GtkWidget *menuitem;
2960 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
2961 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2962 *((SendDialogMode *)pparam->data) = GPOINTER_TO_INT
2963 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
2966 static void prefs_common_send_dialog_set_optmenu(PrefParam *pparam)
2968 SendDialogMode mode = *((SendDialogMode *)pparam->data);
2969 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
2971 GtkWidget *menuitem;
2974 case SEND_DIALOG_ALWAYS:
2975 gtk_option_menu_set_history(optmenu, 0);
2977 case SEND_DIALOG_NEVER:
2978 gtk_option_menu_set_history(optmenu, 1);
2984 menu = gtk_option_menu_get_menu(optmenu);
2985 menuitem = gtk_menu_get_active(GTK_MENU(menu));
2986 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
2989 static void prefs_common_apply(void)
2991 MainWindow *mainwindow;
2993 prefs_set_data_from_dialog(param);
2994 sock_set_io_timeout(prefs_common.io_timeout_secs);
2995 main_window_reflect_prefs_all_real(FALSE);
2996 prefs_common_write_config();
2998 mainwindow = mainwindow_get_mainwindow();
2999 log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog,
3000 prefs_common.loglength);
3002 inc_autocheck_timer_remove();
3003 inc_autocheck_timer_set();
3006 static void prefs_nextunreadmsgdialog_set_data_from_optmenu(PrefParam *pparam)
3009 GtkWidget *menuitem;
3011 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3012 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3013 *((NextUnreadMsgDialogShow *)pparam->data) = GPOINTER_TO_INT
3014 (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
3017 static void prefs_nextunreadmsgdialog_set_optmenu(PrefParam *pparam)
3019 NextUnreadMsgDialogShow dialog_show;
3020 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3022 GtkWidget *menuitem;
3024 dialog_show = *((NextUnreadMsgDialogShow *)pparam->data);
3026 switch (dialog_show) {
3027 case NEXTUNREADMSGDIALOG_ALWAYS:
3028 gtk_option_menu_set_history(optmenu, 0);
3030 case NEXTUNREADMSGDIALOG_ASSUME_YES:
3031 gtk_option_menu_set_history(optmenu, 1);
3033 case NEXTUNREADMSGDIALOG_ASSUME_NO:
3034 gtk_option_menu_set_history(optmenu, 2);
3038 menu = gtk_option_menu_get_menu(optmenu);
3039 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3040 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));
3044 static void prefs_common_cancel(void)
3046 gtk_widget_hide(dialog.window);
3051 /* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
3054 GtkWidget *menuitem;
3056 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget));
3057 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3058 *((RecvDialogShow *)pparam->data) = GPOINTER_TO_INT
3059 (gtk_object_get_user_data(GTK_OBJECT(menuitem)));
3062 /* static void prefs_recvdialog_set_optmenu(PrefParam *pparam)
3064 RecvDialogShow dialog_show;
3065 GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget);
3067 GtkWidget *menuitem;
3069 dialog_show = *((RecvDialogShow *)pparam->data);
3071 switch (dialog_show) {
3072 case RECVDIALOG_ALWAYS:
3073 gtk_option_menu_set_history(optmenu, 0);
3075 case RECVDIALOG_WINDOW_ACTIVE:
3076 gtk_option_menu_set_history(optmenu, 1);
3078 case RECVDIALOG_NEVER:
3079 gtk_option_menu_set_history(optmenu, 2);
3084 menu = gtk_option_menu_get_menu(optmenu);
3085 menuitem = gtk_menu_get_active(GTK_MENU(menu));
3086 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem));