2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.h>
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
54 #include "alertpanel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
69 PrefsCommon prefs_common;
75 * In the Windows version prefs_common contains
76 * - the non-OS-specific settings of the "Common" section and
77 * - the OS-specific settings of the "CommonWin32" section
78 * The OS-specific settings of the "Common" section are not used
79 * but saved in prefs_unix.
82 # define SPECIFIC_PREFS prefs_unix
84 static PrefsCommon prefs_unix;
86 static PrefParam param_os_specific[] = {
89 &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
90 {"newmail_notify_cmd", "",
91 &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
94 {"widget_font_gtk2", NULL,
95 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
96 {"message_font_gtk2", "Monospace 9",
97 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
98 {"print_font_gtk2", "Monospace 9",
99 &prefs_common.printfont, P_STRING, NULL, NULL, NULL},
100 {"small_font_gtk2", "Sans 9",
101 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
102 {"normal_font_gtk2", "Sans 9",
103 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
106 {"attach_save_directory", NULL,
107 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
108 {"attach_load_directory", NULL,
109 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
112 {"mime_textviewer", NULL,
113 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
114 {"mime_open_command", "notepad '%s'",
115 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
118 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
119 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
122 {"uri_open_command", NULL,
123 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
124 {"print_command", "notepad /p %s",
125 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
126 {"ext_editor_command", "notepad %s",
127 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
129 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
132 # define SPECIFIC_PREFS prefs_common
136 parameter name, default value, pointer to the prefs variable, data type,
137 pointer to the widget pointer,
138 pointer to the function for data setting,
139 pointer to the function for widget setting
142 static PrefParam param[] = {
144 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
146 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
149 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
151 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
153 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
155 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
156 P_BOOL, NULL, NULL, NULL},
157 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
158 P_BOOL, NULL, NULL, NULL},
159 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
160 P_BOOL, NULL, NULL, NULL},
161 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
162 P_BOOL, NULL, NULL, NULL},
163 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
165 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
167 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
169 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
171 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
172 P_BOOL, NULL, NULL, NULL},
173 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
174 P_BOOL, NULL, NULL, NULL},
177 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
179 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
180 P_BOOL, NULL, NULL, NULL},
181 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
183 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
185 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
188 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
190 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
193 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
194 P_BOOL, NULL, NULL, NULL},
197 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
199 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
200 P_BOOL, NULL, NULL, NULL},
201 {"redirect_keep_from", "FALSE",
202 &prefs_common.redirect_keep_from, P_BOOL,
204 {"undo_level", "50", &prefs_common.undolevels, P_INT,
206 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
208 {"compose_subject_format", "",
209 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
210 {"compose_body_format", N_("Hello,\\n"),
211 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
213 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
215 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
217 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
219 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
221 {"autosave", "TRUE", &prefs_common.autosave,
222 P_BOOL, NULL, NULL, NULL},
223 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
226 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
228 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
230 {"dictionary", "", &prefs_common.dictionary, P_STRING,
232 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
234 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
236 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
238 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
240 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
241 P_BOOL, NULL, NULL, NULL},
242 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
244 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
247 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
249 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
252 /* Account autoselection */
253 {"reply_account_autoselect", "TRUE",
254 &prefs_common.reply_account_autosel, P_BOOL,
256 {"forward_account_autoselect", "TRUE",
257 &prefs_common.forward_account_autosel, P_BOOL,
259 {"reedit_account_autoselect", "TRUE",
260 &prefs_common.reedit_account_autosel, P_BOOL,
263 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
270 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
272 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
273 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
275 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
277 {"forward_quote_format",
278 N_("\\n\\nBegin forwarded message:\\n\\n"
279 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
280 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
281 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
282 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
286 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
287 {"widget_font", NULL,
288 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
289 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
290 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
291 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
292 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
294 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
296 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"widget_font_gtk2", NULL,
300 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
301 {"message_font_gtk2", "Monospace 9",
302 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
303 {"print_font_gtk2", "Monospace 9",
304 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
305 {"small_font_gtk2", "Sans 9",
306 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
307 {"normal_font_gtk2", "Sans 9",
308 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
311 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
313 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
315 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
317 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
319 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
321 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
323 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
325 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
327 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
329 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
331 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
333 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
335 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
337 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
339 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
341 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
343 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
345 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
347 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
349 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
351 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
353 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
355 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
357 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
359 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
361 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
363 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
365 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
367 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
369 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
373 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
375 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
377 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
380 {"display_folder_unread_num", "0",
381 &prefs_common.display_folder_unread, P_INT,
383 {"newsgroup_abbrev_len", "16",
384 &prefs_common.ng_abbrev_len, P_INT,
387 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
390 /* Display: Summary View */
391 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
393 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
395 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
396 P_STRING, NULL, NULL, NULL},
398 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
401 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
403 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
405 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
407 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
409 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
413 {"summary_col_show_mark", "TRUE",
414 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
415 {"summary_col_show_unread", "TRUE",
416 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
417 {"summary_col_show_mime", "TRUE",
418 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
419 {"summary_col_show_subject", "TRUE",
420 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
421 {"summary_col_show_from", "TRUE",
422 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
423 {"summary_col_show_to", "FALSE",
424 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
425 {"summary_col_show_date", "TRUE",
426 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
427 {"summary_col_show_size", "TRUE",
428 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
429 {"summary_col_show_number", "FALSE",
430 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
431 {"summary_col_show_score", "FALSE",
432 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
433 {"summary_col_show_locked", "FALSE",
434 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
436 {"summary_col_pos_mark", "0",
437 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
438 {"summary_col_pos_unread", "1",
439 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
440 {"summary_col_pos_mime", "2",
441 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
442 {"summary_col_pos_subject", "3",
443 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
444 {"summary_col_pos_from", "4",
445 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
446 {"summary_col_pos_date", "5",
447 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
448 {"summary_col_pos_size", "6",
449 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
450 {"summary_col_pos_number", "7",
451 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
452 {"summary_col_pos_score", "8",
453 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
454 {"summary_col_pos_locked", "9",
455 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
456 {"summary_col_pos_to", "10",
457 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
459 {"summary_col_size_mark", "10",
460 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
461 {"summary_col_size_unread", "13",
462 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
463 {"summary_col_size_mime", "10",
464 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
465 {"summary_col_size_subject", "200",
466 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
467 {"summary_col_size_from", "120",
468 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
469 {"summary_col_size_to", "120",
470 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
471 {"summary_col_size_date", "118",
472 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
473 {"summary_col_size_size", "45",
474 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
475 {"summary_col_size_number", "40",
476 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
477 {"summary_col_size_score", "40",
478 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
479 {"summary_col_size_locked", "13",
480 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
483 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
485 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
487 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
489 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
491 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
494 {"folder_col_show_folder", "TRUE",
495 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
496 {"folder_col_show_new", "TRUE",
497 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
498 {"folder_col_show_unread", "TRUE",
499 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
500 {"folder_col_show_total", "TRUE",
501 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
503 {"folder_col_pos_folder", "0",
504 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
505 {"folder_col_pos_new", "1",
506 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
507 {"folder_col_pos_unread", "2",
508 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
509 {"folder_col_pos_total", "3",
510 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
512 {"folder_col_size_folder", "120",
513 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
514 {"folder_col_size_new", "32",
515 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
516 {"folder_col_size_unread", "32",
517 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
518 {"folder_col_size_total", "32",
519 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
521 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
523 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
526 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
528 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
530 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
532 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
534 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
537 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
539 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
541 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
543 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
545 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
547 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
549 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
551 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
553 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
555 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
557 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
559 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
561 {"compose_width", "600", &prefs_common.compose_width, P_INT,
563 {"compose_height", "560", &prefs_common.compose_height, P_INT,
565 {"compose_x", "0", &prefs_common.compose_x, P_INT,
567 {"compose_y", "0", &prefs_common.compose_y, P_INT,
570 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
573 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
575 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
577 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
579 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
581 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
583 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
585 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
587 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
589 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
591 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
593 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
594 P_BOOL, NULL, NULL, NULL},
596 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
597 P_BOOL, NULL, NULL, NULL},
598 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
600 {"display_xface", "TRUE", &prefs_common.display_xface,
601 P_BOOL, NULL, NULL, NULL},
602 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
604 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
606 {"line_space", "2", &prefs_common.line_space, P_INT,
608 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
611 {"enable_smooth_scroll", "FALSE",
612 &prefs_common.enable_smooth_scroll, P_BOOL,
614 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
616 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
618 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
621 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
624 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
627 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
629 {"attach_save_directory", NULL,
630 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
631 {"attach_load_directory", NULL,
632 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
635 {"mime_textviewer", NULL,
636 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
637 {"mime_open_command", "gedit '%s'",
638 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
641 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
644 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
645 NULL, NULL, NULL}, */
646 {"always_show_message_when_selected", "FALSE",
647 &prefs_common.always_show_msg,
648 P_BOOL, NULL, NULL, NULL},
649 {"select_on_entry", "2", &prefs_common.select_on_entry,
650 P_ENUM, NULL, NULL, NULL},
651 {"mark_as_read_on_new_window", "FALSE",
652 &prefs_common.mark_as_read_on_new_window,
653 P_BOOL, NULL, NULL, NULL},
654 {"mark_as_read_delay", "0",
655 &prefs_common.mark_as_read_delay, P_INT,
657 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
659 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
662 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
663 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
666 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
669 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
671 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
675 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
676 P_BOOL, NULL, NULL, NULL},
677 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
678 P_INT, NULL, NULL, NULL},
679 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
680 P_INT, NULL, NULL, NULL},
683 {"uri_open_command", DEFAULT_BROWSER_CMD,
684 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
685 {"print_command", "lpr %s",
686 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
687 {"ext_editor_command", DEFAULT_EDITOR_CMD,
688 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
689 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
690 P_BOOL, NULL, NULL, NULL},
691 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
693 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
695 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
697 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
698 P_BOOL, NULL, NULL, NULL},
699 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
701 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
703 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
706 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
707 P_INT, NULL, NULL, NULL},
708 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
710 {"important_score", "1", &prefs_common.important_score, P_INT,
712 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
714 {"log_length", "500", &prefs_common.loglength, P_INT,
716 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
718 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
720 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
722 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
724 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
727 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
730 {"color_new", "179", &prefs_common.color_new, P_COLOR,
733 /* Some windows' sizes */
734 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
736 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
739 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
741 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
744 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
746 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
749 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
751 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
754 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
756 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
759 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
761 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
764 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
766 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
769 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
771 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
774 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
776 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
779 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
781 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
784 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
786 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
789 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
791 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
794 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
796 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
799 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
801 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
804 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
806 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
809 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
811 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
814 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
816 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
820 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
822 {"utf8_instead_of_locale_for_broken_mail", "0",
823 &prefs_common.broken_are_utf8, P_INT,
825 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
827 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
829 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
831 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
833 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
835 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
837 {"folderview_vscrollbar_policy", "0",
838 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
840 {"textview_cursor_visible", "FALSE",
841 &prefs_common.textview_cursor_visible, P_BOOL,
843 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
845 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
847 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
849 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
850 P_INT, NULL, NULL, NULL },
851 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
853 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
855 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
857 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
859 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
861 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
863 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
865 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
868 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
871 PrefsCommon *prefs_common_get(void)
873 return &prefs_common;
877 * Read history list from the specified history file
879 static GList *prefs_common_read_history(const gchar *history)
883 gchar buf[PREFSBUFSIZE];
886 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
888 if ((fp = g_fopen(path, "rb")) == NULL) {
889 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
894 while (fgets(buf, sizeof(buf), fp) != NULL) {
896 if (buf[0] == '\0') continue;
897 tmp = add_history(tmp, buf);
901 tmp = g_list_reverse(tmp);
906 void prefs_common_read_config(void)
911 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
912 prefs_read_config(param, "Common", rcpath, NULL);
914 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
919 tmp = g_strdup(gettext(prefs_common.quotefmt));
920 g_free(prefs_common.quotefmt);
921 prefs_common.quotefmt = tmp;
923 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
924 g_free(prefs_common.fw_quotefmt);
925 prefs_common.fw_quotefmt = tmp;
927 tmp = g_strdup(gettext(prefs_common.date_format));
928 g_free(prefs_common.date_format);
929 prefs_common.date_format = tmp;
931 tmp = g_strdup(gettext(prefs_common.compose_body_format));
932 g_free(prefs_common.compose_body_format);
933 prefs_common.compose_body_format = tmp;
935 prefs_common.mime_open_cmd_history =
936 prefs_common_read_history(COMMAND_HISTORY);
937 prefs_common.summary_quicksearch_history =
938 prefs_common_read_history(QUICKSEARCH_HISTORY);
939 prefs_common.summary_search_from_history =
940 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
941 prefs_common.summary_search_to_history =
942 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
943 prefs_common.summary_search_subject_history =
944 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
945 prefs_common.summary_search_body_history =
946 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
947 prefs_common.summary_search_adv_condition_history =
948 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
949 prefs_common.message_search_history =
950 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
952 colorlabel_update_colortable_from_prefs();
956 * Save history list to the specified history file
958 static void prefs_common_save_history(const gchar *history, GList *list)
964 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
966 if ((fp = g_fopen(path, "wb")) == NULL) {
967 FILE_OP_ERROR(path, "fopen");
972 for (cur = list; cur != NULL; cur = cur->next) {
973 fputs((gchar *)cur->data, fp);
981 void prefs_common_write_config(void)
983 prefs_write_config(param, "Common", COMMON_RC);
985 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
988 prefs_common_save_history(COMMAND_HISTORY,
989 prefs_common.mime_open_cmd_history);
990 prefs_common_save_history(QUICKSEARCH_HISTORY,
991 prefs_common.summary_quicksearch_history);
992 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
993 prefs_common.summary_search_from_history);
994 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
995 prefs_common.summary_search_to_history);
996 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
997 prefs_common.summary_search_subject_history);
998 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
999 prefs_common.summary_search_body_history);
1000 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1001 prefs_common.summary_search_adv_condition_history);
1002 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1003 prefs_common.message_search_history);
1006 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1007 both 'in' and 'out' must be non-NULL.
1008 'out' must be a pointer to a buffer whose size is at least equal
1009 to strlen(txt)+1, this buffer will get cleared. out's contents
1010 will always get set to a valid string, even if it's "".*/
1011 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1018 g_return_if_fail( in != NULL );
1019 g_return_if_fail( out != NULL );
1023 memset(out, 0, strlen(in)+1);
1024 while (*i != '\0') {
1025 if (*i == '\\' && *(i+1) == 'n') {
1028 } else if (*i == '\\' && *(i+1) == 't') {
1031 } else if (*i == '\\' && *(i+1) == '\\') {
1042 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1043 both 'in' and 'out' must be non-NULL.
1044 'out' must be a pointer to a buffer whose size is at least equal
1045 to 2*strlen(txt)+1. out's contents will always get set to a valid
1046 string, even if it's "". */
1047 void pref_get_escaped_pref(gchar *out, const gchar *in)
1054 g_return_if_fail( in != NULL );
1055 g_return_if_fail( out != NULL );
1059 while (*i != '\0') {
1063 } else if (*i == '\t') {
1066 } else if (*i == '\\') {
1077 /* set the contents of a textview widget from the internal \-escaped
1078 representation of a pref string. both txt and textview must be non-NULL. */
1079 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1081 GtkTextBuffer *buffer;
1084 g_return_if_fail( txt != NULL );
1085 g_return_if_fail( textview != NULL );
1087 buffer = gtk_text_view_get_buffer(textview);
1088 out = malloc(strlen(txt)+1);
1090 pref_get_unescaped_pref(out, txt);
1092 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1096 /* set the contents of a gtkentry widget from the internal \-escaped
1097 representation of a pref string. both txt and entry must be non-NULL. */
1098 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1102 g_return_if_fail( txt != NULL );
1103 g_return_if_fail( entry != NULL );
1105 out = malloc(strlen(txt)+1);
1107 pref_get_unescaped_pref(out, txt);
1109 gtk_entry_set_text(entry, out?out:"");
1113 /* get the \-escaped internal representation of a pref from the contents of
1114 a textview widget. textview must be non-NULL. */
1115 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1117 GtkTextBuffer *buffer;
1118 GtkTextIter start, end;
1121 g_return_val_if_fail( textview != NULL, "" );
1123 buffer = gtk_text_view_get_buffer(textview);
1124 gtk_text_buffer_get_start_iter(buffer, &start);
1125 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1126 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1127 out = malloc(2*strlen(tmp)+1);
1129 pref_get_escaped_pref(out, tmp);
1135 /* get the \-escaped internal representation of a pref from the contents of
1136 a gtkentry widget. entry must be non-NULL. */
1137 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1141 g_return_val_if_fail( entry != NULL, "" );
1143 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1144 out = malloc(2*strlen(tmp)+1);
1146 pref_get_escaped_pref(out, tmp);
1152 /* ugly hack to be able to get this pref from ssl_certificate.c */
1153 gboolean prefs_common_unsafe_ssl_certs(void)
1155 return prefs_common.unsafe_ssl_certs;