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", "#663366", &prefs_common.custom_colorlabel[6].color, P_COLOR,
337 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
341 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
343 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
345 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
348 {"display_folder_unread_num", "FALSE",
349 &prefs_common.display_folder_unread, P_BOOL,
351 {"newsgroup_abbrev_len", "16",
352 &prefs_common.ng_abbrev_len, P_INT,
355 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
358 /* Display: Summary View */
359 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
361 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
363 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
364 P_STRING, NULL, NULL, NULL},
366 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
369 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
371 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
373 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
375 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
377 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
381 {"summary_col_show_mark", "TRUE",
382 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
383 {"summary_col_show_unread", "TRUE",
384 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
385 {"summary_col_show_mime", "TRUE",
386 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
387 {"summary_col_show_subject", "TRUE",
388 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
389 {"summary_col_show_from", "TRUE",
390 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
391 {"summary_col_show_to", "FALSE",
392 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
393 {"summary_col_show_date", "TRUE",
394 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
395 {"summary_col_show_size", "TRUE",
396 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
397 {"summary_col_show_number", "FALSE",
398 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
399 {"summary_col_show_score", "FALSE",
400 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
401 {"summary_col_show_locked", "FALSE",
402 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
404 {"summary_col_pos_mark", "0",
405 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
406 {"summary_col_pos_unread", "1",
407 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
408 {"summary_col_pos_mime", "2",
409 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
410 {"summary_col_pos_subject", "3",
411 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
412 {"summary_col_pos_from", "4",
413 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
414 {"summary_col_pos_date", "5",
415 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
416 {"summary_col_pos_size", "6",
417 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
418 {"summary_col_pos_number", "7",
419 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
420 {"summary_col_pos_score", "8",
421 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
422 {"summary_col_pos_locked", "9",
423 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
424 {"summary_col_pos_to", "10",
425 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
427 {"summary_col_size_mark", "10",
428 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
429 {"summary_col_size_unread", "13",
430 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
431 {"summary_col_size_mime", "10",
432 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
433 {"summary_col_size_subject", "200",
434 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
435 {"summary_col_size_from", "120",
436 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
437 {"summary_col_size_to", "120",
438 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
439 {"summary_col_size_date", "118",
440 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
441 {"summary_col_size_size", "45",
442 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
443 {"summary_col_size_number", "40",
444 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
445 {"summary_col_size_score", "40",
446 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
447 {"summary_col_size_locked", "13",
448 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
451 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
453 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
455 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
457 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
459 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
462 {"folder_col_show_folder", "TRUE",
463 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
464 {"folder_col_show_new", "TRUE",
465 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
466 {"folder_col_show_unread", "TRUE",
467 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
468 {"folder_col_show_total", "TRUE",
469 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
471 {"folder_col_pos_folder", "0",
472 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
473 {"folder_col_pos_new", "1",
474 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
475 {"folder_col_pos_unread", "2",
476 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
477 {"folder_col_pos_total", "3",
478 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
480 {"folder_col_size_folder", "120",
481 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
482 {"folder_col_size_new", "32",
483 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
484 {"folder_col_size_unread", "32",
485 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
486 {"folder_col_size_total", "32",
487 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
489 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
491 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
494 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
496 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
498 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
500 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
502 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
505 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
507 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
509 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
511 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
513 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
515 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
517 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
519 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
521 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
523 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
525 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
527 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
529 {"compose_width", "600", &prefs_common.compose_width, P_INT,
531 {"compose_height", "560", &prefs_common.compose_height, P_INT,
533 {"compose_x", "0", &prefs_common.compose_x, P_INT,
535 {"compose_y", "0", &prefs_common.compose_y, P_INT,
538 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
541 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
543 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
545 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
547 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
549 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
551 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
553 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
555 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
557 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
559 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
561 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
562 P_BOOL, NULL, NULL, NULL},
564 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
565 P_BOOL, NULL, NULL, NULL},
566 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
568 {"display_xface", "TRUE", &prefs_common.display_xface,
569 P_BOOL, NULL, NULL, NULL},
570 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
572 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
574 {"line_space", "2", &prefs_common.line_space, P_INT,
576 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
579 {"enable_smooth_scroll", "FALSE",
580 &prefs_common.enable_smooth_scroll, P_BOOL,
582 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
584 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
586 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
589 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
592 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
595 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
597 {"attach_save_directory", NULL,
598 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
599 {"attach_load_directory", NULL,
600 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
603 {"mime_textviewer", NULL,
604 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
605 {"mime_open_command", "gedit '%s'",
606 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
609 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
612 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
613 NULL, NULL, NULL}, */
614 {"always_show_message_when_selected", "FALSE",
615 &prefs_common.always_show_msg,
616 P_BOOL, NULL, NULL, NULL},
617 {"select_on_entry", "2", &prefs_common.select_on_entry,
618 P_ENUM, NULL, NULL, NULL},
619 {"mark_as_read_on_new_window", "FALSE",
620 &prefs_common.mark_as_read_on_new_window,
621 P_BOOL, NULL, NULL, NULL},
622 {"mark_as_read_delay", "0",
623 &prefs_common.mark_as_read_delay, P_INT,
625 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
627 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
630 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
631 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
634 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
637 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
639 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
643 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
644 P_BOOL, NULL, NULL, NULL},
645 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
646 P_INT, NULL, NULL, NULL},
647 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
648 P_INT, NULL, NULL, NULL},
651 {"uri_open_command", DEFAULT_BROWSER_CMD,
652 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
653 {"print_command", "lpr %s",
654 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
655 {"ext_editor_command", DEFAULT_EDITOR_CMD,
656 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
657 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
658 P_BOOL, NULL, NULL, NULL},
659 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
661 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
663 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
665 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
666 P_BOOL, NULL, NULL, NULL},
667 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
669 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
671 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
674 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
675 P_INT, NULL, NULL, NULL},
676 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
678 {"important_score", "1", &prefs_common.important_score, P_INT,
680 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
682 {"log_length", "500", &prefs_common.loglength, P_INT,
684 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
686 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
688 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
690 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
692 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
695 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
698 {"color_new", "179", &prefs_common.color_new, P_COLOR,
701 /* Some windows' sizes */
702 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
704 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
707 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
709 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
712 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
714 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
717 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
719 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
722 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
724 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
727 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
729 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
732 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
734 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
737 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
739 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
742 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
744 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
747 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
749 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
752 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
754 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
757 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
759 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
762 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
764 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
767 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
769 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
772 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
774 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
777 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
779 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
782 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
784 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
788 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
790 {"utf8_instead_of_locale_for_broken_mail", "0",
791 &prefs_common.broken_are_utf8, P_INT,
793 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
795 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
797 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
799 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
801 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
803 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
805 {"folderview_vscrollbar_policy", "0",
806 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
808 {"textview_cursor_visible", "FALSE",
809 &prefs_common.textview_cursor_visible, P_BOOL,
811 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
813 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
815 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
817 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
818 P_INT, NULL, NULL, NULL },
819 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
821 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
823 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
825 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
827 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
829 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
831 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
833 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
836 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
839 PrefsCommon *prefs_common_get(void)
841 return &prefs_common;
845 * Read history list from the specified history file
847 static GList *prefs_common_read_history(const gchar *history)
851 gchar buf[PREFSBUFSIZE];
854 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
856 if ((fp = g_fopen(path, "rb")) == NULL) {
857 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
862 while (fgets(buf, sizeof(buf), fp) != NULL) {
864 if (buf[0] == '\0') continue;
865 tmp = add_history(tmp, buf);
869 tmp = g_list_reverse(tmp);
874 void prefs_common_read_config(void)
879 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
880 prefs_read_config(param, "Common", rcpath, NULL);
882 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
887 tmp = g_strdup(gettext(prefs_common.quotefmt));
888 g_free(prefs_common.quotefmt);
889 prefs_common.quotefmt = tmp;
891 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
892 g_free(prefs_common.fw_quotefmt);
893 prefs_common.fw_quotefmt = tmp;
895 tmp = g_strdup(gettext(prefs_common.date_format));
896 g_free(prefs_common.date_format);
897 prefs_common.date_format = tmp;
899 tmp = g_strdup(gettext(prefs_common.compose_body_format));
900 g_free(prefs_common.compose_body_format);
901 prefs_common.compose_body_format = tmp;
903 prefs_common.mime_open_cmd_history =
904 prefs_common_read_history(COMMAND_HISTORY);
905 prefs_common.summary_quicksearch_history =
906 prefs_common_read_history(QUICKSEARCH_HISTORY);
907 prefs_common.summary_search_from_history =
908 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
909 prefs_common.summary_search_to_history =
910 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
911 prefs_common.summary_search_subject_history =
912 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
913 prefs_common.summary_search_body_history =
914 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
915 prefs_common.summary_search_adv_condition_history =
916 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
917 prefs_common.message_search_history =
918 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
920 colorlabel_update_colortable_from_prefs();
924 * Save history list to the specified history file
926 static void prefs_common_save_history(const gchar *history, GList *list)
932 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
934 if ((fp = g_fopen(path, "wb")) == NULL) {
935 FILE_OP_ERROR(path, "fopen");
940 for (cur = list; cur != NULL; cur = cur->next) {
941 fputs((gchar *)cur->data, fp);
949 void prefs_common_write_config(void)
951 prefs_write_config(param, "Common", COMMON_RC);
953 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
956 prefs_common_save_history(COMMAND_HISTORY,
957 prefs_common.mime_open_cmd_history);
958 prefs_common_save_history(QUICKSEARCH_HISTORY,
959 prefs_common.summary_quicksearch_history);
960 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
961 prefs_common.summary_search_from_history);
962 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
963 prefs_common.summary_search_to_history);
964 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
965 prefs_common.summary_search_subject_history);
966 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
967 prefs_common.summary_search_body_history);
968 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
969 prefs_common.summary_search_adv_condition_history);
970 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
971 prefs_common.message_search_history);
974 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
975 both 'in' and 'out' must be non-NULL.
976 'out' must be a pointer to a buffer whose size is at least equal
977 to strlen(txt)+1, this buffer will get cleared. out's contents
978 will always get set to a valid string, even if it's "".*/
979 void pref_get_unescaped_pref(gchar *out, const gchar *in)
986 g_return_if_fail( in != NULL );
987 g_return_if_fail( out != NULL );
991 memset(out, 0, strlen(in)+1);
993 if (*i == '\\' && *(i+1) == 'n') {
996 } else if (*i == '\\' && *(i+1) == 't') {
999 } else if (*i == '\\' && *(i+1) == '\\') {
1010 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1011 both 'in' and 'out' must be non-NULL.
1012 'out' must be a pointer to a buffer whose size is at least equal
1013 to 2*strlen(txt)+1. out's contents will always get set to a valid
1014 string, even if it's "". */
1015 void pref_get_escaped_pref(gchar *out, const gchar *in)
1022 g_return_if_fail( in != NULL );
1023 g_return_if_fail( out != NULL );
1027 while (*i != '\0') {
1031 } else if (*i == '\t') {
1034 } else if (*i == '\\') {
1045 /* set the contents of a textview widget from the internal \-escaped
1046 representation of a pref string. both txt and textview must be non-NULL. */
1047 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1049 GtkTextBuffer *buffer;
1052 g_return_if_fail( txt != NULL );
1053 g_return_if_fail( textview != NULL );
1055 buffer = gtk_text_view_get_buffer(textview);
1056 out = malloc(strlen(txt)+1);
1058 pref_get_unescaped_pref(out, txt);
1060 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1064 /* set the contents of a gtkentry widget from the internal \-escaped
1065 representation of a pref string. both txt and entry must be non-NULL. */
1066 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1070 g_return_if_fail( txt != NULL );
1071 g_return_if_fail( entry != NULL );
1073 out = malloc(strlen(txt)+1);
1075 pref_get_unescaped_pref(out, txt);
1077 gtk_entry_set_text(entry, out?out:"");
1081 /* get the \-escaped internal representation of a pref from the contents of
1082 a textview widget. textview must be non-NULL. */
1083 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1085 GtkTextBuffer *buffer;
1086 GtkTextIter start, end;
1089 g_return_val_if_fail( textview != NULL, "" );
1091 buffer = gtk_text_view_get_buffer(textview);
1092 gtk_text_buffer_get_start_iter(buffer, &start);
1093 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1094 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1095 out = malloc(2*strlen(tmp)+1);
1097 pref_get_escaped_pref(out, tmp);
1103 /* get the \-escaped internal representation of a pref from the contents of
1104 a gtkentry widget. entry must be non-NULL. */
1105 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1109 g_return_val_if_fail( entry != NULL, "" );
1111 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1112 out = malloc(2*strlen(tmp)+1);
1114 pref_get_escaped_pref(out, tmp);
1120 /* ugly hack to be able to get this pref from ssl_certificate.c */
1121 gboolean prefs_common_unsafe_ssl_certs(void)
1123 return prefs_common.unsafe_ssl_certs;