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},
105 {"attach_save_directory", NULL,
106 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107 {"attach_load_directory", NULL,
108 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
111 {"mime_textviewer", NULL,
112 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
113 {"mime_open_command", "notepad '%s'",
114 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
117 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
118 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
121 {"uri_open_command", NULL,
122 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123 {"print_command", "notepad /p %s",
124 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125 {"ext_editor_command", "notepad %s",
126 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 # define SPECIFIC_PREFS prefs_common
135 parameter name, default value, pointer to the prefs variable, data type,
136 pointer to the widget pointer,
137 pointer to the function for data setting,
138 pointer to the function for widget setting
141 static PrefParam param[] = {
143 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
148 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155 P_BOOL, NULL, NULL, NULL},
156 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157 P_BOOL, NULL, NULL, NULL},
158 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159 P_BOOL, NULL, NULL, NULL},
160 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
166 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
168 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
170 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171 P_BOOL, NULL, NULL, NULL},
172 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173 P_BOOL, NULL, NULL, NULL},
176 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
178 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179 P_BOOL, NULL, NULL, NULL},
180 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
182 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
184 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
187 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
189 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
192 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193 P_BOOL, NULL, NULL, NULL},
196 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
198 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199 P_BOOL, NULL, NULL, NULL},
200 {"redirect_keep_from", "FALSE",
201 &prefs_common.redirect_keep_from, P_BOOL,
203 {"undo_level", "50", &prefs_common.undolevels, P_INT,
205 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
207 {"compose_subject_format", "",
208 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209 {"compose_body_format", N_("Hello,\\n"),
210 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
212 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
214 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
216 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
218 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
220 {"autosave", "TRUE", &prefs_common.autosave,
221 P_BOOL, NULL, NULL, NULL},
222 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
225 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
227 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
229 {"dictionary", "", &prefs_common.dictionary, P_STRING,
231 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
233 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
235 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
237 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
239 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240 P_BOOL, NULL, NULL, NULL},
241 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
246 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
248 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
251 /* Account autoselection */
252 {"reply_account_autoselect", "TRUE",
253 &prefs_common.reply_account_autosel, P_BOOL,
255 {"forward_account_autoselect", "TRUE",
256 &prefs_common.forward_account_autosel, P_BOOL,
258 {"reedit_account_autoselect", "TRUE",
259 &prefs_common.reedit_account_autosel, P_BOOL,
262 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
274 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
276 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
277 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
279 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
281 {"forward_quote_format",
282 N_("\\n\\nBegin forwarded message:\\n\\n"
283 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
284 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
285 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
286 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
290 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
291 {"widget_font", NULL,
292 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
296 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
297 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
298 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
300 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
304 {"widget_font_gtk2", NULL,
305 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
306 {"message_font_gtk2", "Monospace 9",
307 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
308 {"print_font_gtk2", "Monospace 9",
309 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
310 {"small_font_gtk2", "Sans 9",
311 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
312 {"normal_font_gtk2", "Sans 9",
313 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
315 {"widget_font_gtk2", NULL,
316 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
317 {"message_font_gtk2", "Monospace 8",
318 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
319 {"print_font_gtk2", "Monospace 8",
320 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
321 {"small_font_gtk2", "Sans 8",
322 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
323 {"normal_font_gtk2", "Sans 8",
324 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
327 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
329 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
331 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
333 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
335 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
337 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
339 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
341 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
343 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
345 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
347 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
349 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
351 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
353 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
355 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
357 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
359 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
361 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
363 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
365 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
367 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
369 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
371 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
373 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
375 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
377 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
379 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
381 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
383 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
385 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
389 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
391 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
393 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
396 {"display_folder_unread_num", "0",
397 &prefs_common.display_folder_unread, P_INT,
399 {"newsgroup_abbrev_len", "16",
400 &prefs_common.ng_abbrev_len, P_INT,
403 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
406 /* Display: Summary View */
407 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
409 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
411 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
412 P_STRING, NULL, NULL, NULL},
414 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
417 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
420 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
423 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
426 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
428 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
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_subject", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_from", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_to", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_TO], 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_mime", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_size", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_number", "FALSE",
455 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_score", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_locked", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_pos_mark", "0",
462 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_unread", "1",
464 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_mime", "2",
466 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_subject", "3",
468 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_from", "4",
470 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_date", "5",
472 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_size", "6",
474 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_number", "7",
476 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_score", "8",
478 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_locked", "9",
480 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_to", "10",
482 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_mark", "10",
485 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_unread", "13",
487 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_mime", "10",
489 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_subject", "200",
492 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_from", "120",
494 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_to", "120",
496 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_subject", "300",
499 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_from", "150",
501 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_to", "150",
503 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_date", "118",
507 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_size", "45",
509 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
510 {"summary_col_size_number", "40",
511 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_score", "40",
513 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_locked", "13",
515 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
518 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
520 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
522 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
524 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
526 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
529 {"folder_col_show_folder", "TRUE",
530 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
531 {"folder_col_show_new", "TRUE",
532 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
533 {"folder_col_show_unread", "TRUE",
534 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
535 {"folder_col_show_total", "TRUE",
536 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
538 {"folder_col_pos_folder", "0",
539 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
540 {"folder_col_pos_new", "1",
541 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
542 {"folder_col_pos_unread", "2",
543 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
544 {"folder_col_pos_total", "3",
545 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
548 {"folder_col_size_folder", "120",
549 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
550 {"folder_col_size_new", "32",
551 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
552 {"folder_col_size_unread", "32",
553 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
554 {"folder_col_size_total", "32",
555 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
557 {"folder_col_size_folder", "400",
558 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
559 {"folder_col_size_new", "32",
560 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
561 {"folder_col_size_unread", "32",
562 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
563 {"folder_col_size_total", "32",
564 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
566 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
568 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
571 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
573 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
575 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
577 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
579 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
582 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
584 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
586 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
588 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
590 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
592 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
595 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
597 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
599 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
601 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
603 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
605 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
607 {"compose_width", "600", &prefs_common.compose_width, P_INT,
609 {"compose_height", "560", &prefs_common.compose_height, P_INT,
612 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
614 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
616 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
618 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
620 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
622 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
624 {"compose_width", "700", &prefs_common.compose_width, P_INT,
626 {"compose_height", "470", &prefs_common.compose_height, P_INT,
629 {"compose_x", "0", &prefs_common.compose_x, P_INT,
631 {"compose_y", "0", &prefs_common.compose_y, P_INT,
634 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
637 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
639 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
641 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
643 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
645 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
647 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
649 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
651 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
653 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
655 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
657 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
658 P_BOOL, NULL, NULL, NULL},
660 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
661 P_BOOL, NULL, NULL, NULL},
662 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
664 {"display_xface", "TRUE", &prefs_common.display_xface,
665 P_BOOL, NULL, NULL, NULL},
666 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
668 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
670 {"line_space", "2", &prefs_common.line_space, P_INT,
672 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
675 {"enable_smooth_scroll", "FALSE",
676 &prefs_common.enable_smooth_scroll, P_BOOL,
678 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
680 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
682 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
685 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
688 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
691 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
693 {"attach_save_directory", NULL,
694 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
695 {"attach_load_directory", NULL,
696 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
699 {"mime_textviewer", NULL,
700 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
701 {"mime_open_command", "gedit '%s'",
702 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
706 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
709 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
712 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
713 NULL, NULL, NULL}, */
714 {"always_show_message_when_selected", "FALSE",
715 &prefs_common.always_show_msg,
716 P_BOOL, NULL, NULL, NULL},
717 {"select_on_entry", "2", &prefs_common.select_on_entry,
718 P_ENUM, NULL, NULL, NULL},
719 {"mark_as_read_on_new_window", "FALSE",
720 &prefs_common.mark_as_read_on_new_window,
721 P_BOOL, NULL, NULL, NULL},
722 {"mark_as_read_delay", "0",
723 &prefs_common.mark_as_read_delay, P_INT,
725 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
727 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
730 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
731 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
734 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
737 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
739 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
743 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
744 P_BOOL, NULL, NULL, NULL},
745 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
746 P_INT, NULL, NULL, NULL},
747 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
748 P_INT, NULL, NULL, NULL},
751 {"uri_open_command", DEFAULT_BROWSER_CMD,
752 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
753 {"print_command", "lpr %s",
754 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
755 {"ext_editor_command", DEFAULT_EDITOR_CMD,
756 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
757 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
758 P_BOOL, NULL, NULL, NULL},
759 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
761 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
763 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
765 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
766 P_BOOL, NULL, NULL, NULL},
767 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
769 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
772 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
775 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
779 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
780 P_INT, NULL, NULL, NULL},
781 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
783 {"important_score", "1", &prefs_common.important_score, P_INT,
786 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
788 {"log_length", "500", &prefs_common.loglength, P_INT,
791 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
793 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
795 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
797 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
799 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
801 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
803 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
805 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
808 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
810 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
812 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
814 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
816 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
818 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
820 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
822 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
824 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
827 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
830 {"color_new", "179", &prefs_common.color_new, P_COLOR,
833 /* Some windows' sizes */
834 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
836 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
839 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
841 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
844 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
846 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
849 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
851 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
854 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
856 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
859 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
861 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
864 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
866 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
869 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
871 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
874 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
876 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
879 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
881 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
884 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
886 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
889 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
892 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
894 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
897 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
899 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
902 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
904 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
907 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
909 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
912 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
914 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
917 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
919 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
922 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
924 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
928 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
930 {"utf8_instead_of_locale_for_broken_mail", "0",
931 &prefs_common.broken_are_utf8, P_INT,
933 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
935 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
937 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
939 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
941 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
943 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
945 {"folderview_vscrollbar_policy", "0",
946 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
948 {"textview_cursor_visible", "FALSE",
949 &prefs_common.textview_cursor_visible, P_BOOL,
951 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
954 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
956 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
959 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
961 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
964 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
965 P_INT, NULL, NULL, NULL },
966 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
968 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
970 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
972 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
974 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
976 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
978 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
980 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
983 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
986 PrefsCommon *prefs_common_get(void)
988 return &prefs_common;
992 * Read history list from the specified history file
994 static GList *prefs_common_read_history(const gchar *history)
998 gchar buf[PREFSBUFSIZE];
1001 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1003 if ((fp = g_fopen(path, "rb")) == NULL) {
1004 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1009 while (fgets(buf, sizeof(buf), fp) != NULL) {
1011 if (buf[0] == '\0') continue;
1012 tmp = add_history(tmp, buf);
1016 tmp = g_list_reverse(tmp);
1021 void prefs_common_read_config(void)
1026 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1027 prefs_read_config(param, "Common", rcpath, NULL);
1029 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1034 tmp = g_strdup(gettext(prefs_common.quotefmt));
1035 g_free(prefs_common.quotefmt);
1036 prefs_common.quotefmt = tmp;
1038 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1039 g_free(prefs_common.fw_quotefmt);
1040 prefs_common.fw_quotefmt = tmp;
1042 tmp = g_strdup(gettext(prefs_common.date_format));
1043 g_free(prefs_common.date_format);
1044 prefs_common.date_format = tmp;
1046 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1047 g_free(prefs_common.compose_body_format);
1048 prefs_common.compose_body_format = tmp;
1050 prefs_common.mime_open_cmd_history =
1051 prefs_common_read_history(COMMAND_HISTORY);
1052 prefs_common.summary_quicksearch_history =
1053 prefs_common_read_history(QUICKSEARCH_HISTORY);
1054 prefs_common.summary_search_from_history =
1055 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1056 prefs_common.summary_search_to_history =
1057 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1058 prefs_common.summary_search_subject_history =
1059 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1060 prefs_common.summary_search_body_history =
1061 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1062 prefs_common.summary_search_adv_condition_history =
1063 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1064 prefs_common.message_search_history =
1065 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1067 colorlabel_update_colortable_from_prefs();
1073 g_warning("failed to write\n"); \
1078 * Save history list to the specified history file
1080 static void prefs_common_save_history(const gchar *history, GList *list)
1084 gchar *path, *tmp_path;
1086 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1088 tmp_path = g_strconcat(path, ".tmp", NULL);
1090 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1091 FILE_OP_ERROR(tmp_path, "fopen");
1095 for (cur = list; cur != NULL; cur = cur->next) {
1096 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1097 fputc('\n', fp) != EOF);
1100 if (fclose(fp) == EOF) {
1101 FILE_OP_ERROR(tmp_path, "fclose");
1109 if (g_rename(tmp_path, path) < 0) {
1110 FILE_OP_ERROR(path, "rename");
1123 void prefs_common_write_config(void)
1125 prefs_write_config(param, "Common", COMMON_RC);
1127 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1130 prefs_common_save_history(COMMAND_HISTORY,
1131 prefs_common.mime_open_cmd_history);
1132 prefs_common_save_history(QUICKSEARCH_HISTORY,
1133 prefs_common.summary_quicksearch_history);
1134 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1135 prefs_common.summary_search_from_history);
1136 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1137 prefs_common.summary_search_to_history);
1138 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1139 prefs_common.summary_search_subject_history);
1140 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1141 prefs_common.summary_search_body_history);
1142 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1143 prefs_common.summary_search_adv_condition_history);
1144 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1145 prefs_common.message_search_history);
1148 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1149 both 'in' and 'out' must be non-NULL.
1150 'out' must be a pointer to a buffer whose size is at least equal
1151 to strlen(txt)+1, this buffer will get cleared. out's contents
1152 will always get set to a valid string, even if it's "".*/
1153 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1160 g_return_if_fail( in != NULL );
1161 g_return_if_fail( out != NULL );
1165 memset(out, 0, strlen(in)+1);
1166 while (*i != '\0') {
1167 if (*i == '\\' && *(i+1) == 'n') {
1170 } else if (*i == '\\' && *(i+1) == 't') {
1173 } else if (*i == '\\' && *(i+1) == '\\') {
1184 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1185 both 'in' and 'out' must be non-NULL.
1186 'out' must be a pointer to a buffer whose size is at least equal
1187 to 2*strlen(txt)+1. out's contents will always get set to a valid
1188 string, even if it's "". */
1189 void pref_get_escaped_pref(gchar *out, const gchar *in)
1196 g_return_if_fail( in != NULL );
1197 g_return_if_fail( out != NULL );
1201 while (*i != '\0') {
1205 } else if (*i == '\t') {
1208 } else if (*i == '\\') {
1219 /* set the contents of a textview widget from the internal \-escaped
1220 representation of a pref string. both txt and textview must be non-NULL. */
1221 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1223 GtkTextBuffer *buffer;
1226 g_return_if_fail( txt != NULL );
1227 g_return_if_fail( textview != NULL );
1229 buffer = gtk_text_view_get_buffer(textview);
1230 out = malloc(strlen(txt)+1);
1232 pref_get_unescaped_pref(out, txt);
1234 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1238 /* set the contents of a gtkentry widget from the internal \-escaped
1239 representation of a pref string. both txt and entry must be non-NULL. */
1240 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1244 g_return_if_fail( txt != NULL );
1245 g_return_if_fail( entry != NULL );
1247 out = malloc(strlen(txt)+1);
1249 pref_get_unescaped_pref(out, txt);
1251 gtk_entry_set_text(entry, out?out:"");
1255 /* get the \-escaped internal representation of a pref from the contents of
1256 a textview widget. textview must be non-NULL. */
1257 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1259 GtkTextBuffer *buffer;
1260 GtkTextIter start, end;
1263 g_return_val_if_fail( textview != NULL, "" );
1265 buffer = gtk_text_view_get_buffer(textview);
1266 gtk_text_buffer_get_start_iter(buffer, &start);
1267 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1268 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1269 out = malloc(2*strlen(tmp)+1);
1271 pref_get_escaped_pref(out, tmp);
1277 /* get the \-escaped internal representation of a pref from the contents of
1278 a gtkentry widget. entry must be non-NULL. */
1279 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1283 g_return_val_if_fail( entry != NULL, "" );
1285 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1286 out = malloc(2*strlen(tmp)+1);
1288 pref_get_escaped_pref(out, tmp);
1294 /* ugly hack to be able to get this pref from ssl_certificate.c */
1295 gboolean prefs_common_unsafe_ssl_certs(void)
1297 return prefs_common.unsafe_ssl_certs;