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 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
891 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
894 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
896 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
899 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
901 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
904 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
906 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
909 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
911 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
914 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
916 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
919 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
921 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
925 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
927 {"utf8_instead_of_locale_for_broken_mail", "0",
928 &prefs_common.broken_are_utf8, P_INT,
930 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
932 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
934 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
936 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
938 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
940 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
942 {"folderview_vscrollbar_policy", "0",
943 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
945 {"textview_cursor_visible", "FALSE",
946 &prefs_common.textview_cursor_visible, P_BOOL,
948 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
951 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
953 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
956 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
958 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
961 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
962 P_INT, NULL, NULL, NULL },
963 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
965 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
967 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
969 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
971 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
973 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
975 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
977 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
980 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
983 PrefsCommon *prefs_common_get(void)
985 return &prefs_common;
989 * Read history list from the specified history file
991 static GList *prefs_common_read_history(const gchar *history)
995 gchar buf[PREFSBUFSIZE];
998 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1000 if ((fp = g_fopen(path, "rb")) == NULL) {
1001 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1006 while (fgets(buf, sizeof(buf), fp) != NULL) {
1008 if (buf[0] == '\0') continue;
1009 tmp = add_history(tmp, buf);
1013 tmp = g_list_reverse(tmp);
1018 void prefs_common_read_config(void)
1023 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1024 prefs_read_config(param, "Common", rcpath, NULL);
1026 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1031 tmp = g_strdup(gettext(prefs_common.quotefmt));
1032 g_free(prefs_common.quotefmt);
1033 prefs_common.quotefmt = tmp;
1035 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1036 g_free(prefs_common.fw_quotefmt);
1037 prefs_common.fw_quotefmt = tmp;
1039 tmp = g_strdup(gettext(prefs_common.date_format));
1040 g_free(prefs_common.date_format);
1041 prefs_common.date_format = tmp;
1043 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1044 g_free(prefs_common.compose_body_format);
1045 prefs_common.compose_body_format = tmp;
1047 prefs_common.mime_open_cmd_history =
1048 prefs_common_read_history(COMMAND_HISTORY);
1049 prefs_common.summary_quicksearch_history =
1050 prefs_common_read_history(QUICKSEARCH_HISTORY);
1051 prefs_common.summary_search_from_history =
1052 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1053 prefs_common.summary_search_to_history =
1054 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1055 prefs_common.summary_search_subject_history =
1056 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1057 prefs_common.summary_search_body_history =
1058 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1059 prefs_common.summary_search_adv_condition_history =
1060 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1061 prefs_common.message_search_history =
1062 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1064 colorlabel_update_colortable_from_prefs();
1068 * Save history list to the specified history file
1070 static void prefs_common_save_history(const gchar *history, GList *list)
1076 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1078 if ((fp = g_fopen(path, "wb")) == NULL) {
1079 FILE_OP_ERROR(path, "fopen");
1084 for (cur = list; cur != NULL; cur = cur->next) {
1085 fputs((gchar *)cur->data, fp);
1093 void prefs_common_write_config(void)
1095 prefs_write_config(param, "Common", COMMON_RC);
1097 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1100 prefs_common_save_history(COMMAND_HISTORY,
1101 prefs_common.mime_open_cmd_history);
1102 prefs_common_save_history(QUICKSEARCH_HISTORY,
1103 prefs_common.summary_quicksearch_history);
1104 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1105 prefs_common.summary_search_from_history);
1106 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1107 prefs_common.summary_search_to_history);
1108 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1109 prefs_common.summary_search_subject_history);
1110 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1111 prefs_common.summary_search_body_history);
1112 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1113 prefs_common.summary_search_adv_condition_history);
1114 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1115 prefs_common.message_search_history);
1118 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1119 both 'in' and 'out' must be non-NULL.
1120 'out' must be a pointer to a buffer whose size is at least equal
1121 to strlen(txt)+1, this buffer will get cleared. out's contents
1122 will always get set to a valid string, even if it's "".*/
1123 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1130 g_return_if_fail( in != NULL );
1131 g_return_if_fail( out != NULL );
1135 memset(out, 0, strlen(in)+1);
1136 while (*i != '\0') {
1137 if (*i == '\\' && *(i+1) == 'n') {
1140 } else if (*i == '\\' && *(i+1) == 't') {
1143 } else if (*i == '\\' && *(i+1) == '\\') {
1154 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1155 both 'in' and 'out' must be non-NULL.
1156 'out' must be a pointer to a buffer whose size is at least equal
1157 to 2*strlen(txt)+1. out's contents will always get set to a valid
1158 string, even if it's "". */
1159 void pref_get_escaped_pref(gchar *out, const gchar *in)
1166 g_return_if_fail( in != NULL );
1167 g_return_if_fail( out != NULL );
1171 while (*i != '\0') {
1175 } else if (*i == '\t') {
1178 } else if (*i == '\\') {
1189 /* set the contents of a textview widget from the internal \-escaped
1190 representation of a pref string. both txt and textview must be non-NULL. */
1191 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1193 GtkTextBuffer *buffer;
1196 g_return_if_fail( txt != NULL );
1197 g_return_if_fail( textview != NULL );
1199 buffer = gtk_text_view_get_buffer(textview);
1200 out = malloc(strlen(txt)+1);
1202 pref_get_unescaped_pref(out, txt);
1204 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1208 /* set the contents of a gtkentry widget from the internal \-escaped
1209 representation of a pref string. both txt and entry must be non-NULL. */
1210 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1214 g_return_if_fail( txt != NULL );
1215 g_return_if_fail( entry != NULL );
1217 out = malloc(strlen(txt)+1);
1219 pref_get_unescaped_pref(out, txt);
1221 gtk_entry_set_text(entry, out?out:"");
1225 /* get the \-escaped internal representation of a pref from the contents of
1226 a textview widget. textview must be non-NULL. */
1227 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1229 GtkTextBuffer *buffer;
1230 GtkTextIter start, end;
1233 g_return_val_if_fail( textview != NULL, "" );
1235 buffer = gtk_text_view_get_buffer(textview);
1236 gtk_text_buffer_get_start_iter(buffer, &start);
1237 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1238 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1239 out = malloc(2*strlen(tmp)+1);
1241 pref_get_escaped_pref(out, tmp);
1247 /* get the \-escaped internal representation of a pref from the contents of
1248 a gtkentry widget. entry must be non-NULL. */
1249 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1253 g_return_val_if_fail( entry != NULL, "" );
1255 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1256 out = malloc(2*strlen(tmp)+1);
1258 pref_get_escaped_pref(out, tmp);
1264 /* ugly hack to be able to get this pref from ssl_certificate.c */
1265 gboolean prefs_common_unsafe_ssl_certs(void)
1267 return prefs_common.unsafe_ssl_certs;