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,
265 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
271 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
272 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
274 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
276 {"forward_quote_format",
277 N_("\\n\\nBegin forwarded message:\\n\\n"
278 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
279 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
280 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
281 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
285 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
286 {"widget_font", NULL,
287 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
288 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
289 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
290 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
291 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
292 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
293 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
294 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
295 &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},
310 {"widget_font_gtk2", NULL,
311 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
312 {"message_font_gtk2", "Monospace 8",
313 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
314 {"print_font_gtk2", "Monospace 8",
315 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
316 {"small_font_gtk2", "Sans 8",
317 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
318 {"normal_font_gtk2", "Sans 8",
319 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
322 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
324 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
326 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
328 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
330 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
332 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
334 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
336 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
338 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
340 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
342 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
344 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
346 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
348 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
350 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
352 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
354 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
356 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
358 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
360 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
362 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
364 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
366 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
368 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
370 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
372 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
374 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
376 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
378 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
380 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
384 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
386 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
388 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
391 {"display_folder_unread_num", "0",
392 &prefs_common.display_folder_unread, P_INT,
394 {"newsgroup_abbrev_len", "16",
395 &prefs_common.ng_abbrev_len, P_INT,
398 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
401 /* Display: Summary View */
402 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
404 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
406 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
407 P_STRING, NULL, NULL, NULL},
409 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
412 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
415 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
418 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
421 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
423 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
426 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
429 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
433 {"summary_col_show_mark", "TRUE",
434 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
435 {"summary_col_show_unread", "TRUE",
436 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
437 {"summary_col_show_subject", "TRUE",
438 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
439 {"summary_col_show_from", "TRUE",
440 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
441 {"summary_col_show_to", "FALSE",
442 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
443 {"summary_col_show_date", "TRUE",
444 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
445 {"summary_col_show_mime", "TRUE",
446 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
447 {"summary_col_show_size", "TRUE",
448 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
449 {"summary_col_show_number", "FALSE",
450 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
451 {"summary_col_show_score", "FALSE",
452 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
453 {"summary_col_show_locked", "FALSE",
454 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_pos_mark", "0",
457 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
458 {"summary_col_pos_unread", "1",
459 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
460 {"summary_col_pos_mime", "2",
461 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
462 {"summary_col_pos_subject", "3",
463 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
464 {"summary_col_pos_from", "4",
465 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
466 {"summary_col_pos_date", "5",
467 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
468 {"summary_col_pos_size", "6",
469 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
470 {"summary_col_pos_number", "7",
471 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
472 {"summary_col_pos_score", "8",
473 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
474 {"summary_col_pos_locked", "9",
475 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
476 {"summary_col_pos_to", "10",
477 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
479 {"summary_col_size_mark", "10",
480 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
481 {"summary_col_size_unread", "13",
482 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
483 {"summary_col_size_mime", "10",
484 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_subject", "200",
487 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_from", "120",
489 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_to", "120",
491 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_subject", "300",
494 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_from", "150",
496 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_to", "150",
498 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_date", "118",
502 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_size", "45",
504 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_number", "40",
506 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_score", "40",
508 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_locked", "13",
510 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
513 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
515 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
517 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
519 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
521 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
524 {"folder_col_show_folder", "TRUE",
525 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
526 {"folder_col_show_new", "TRUE",
527 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
528 {"folder_col_show_unread", "TRUE",
529 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
530 {"folder_col_show_total", "TRUE",
531 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
533 {"folder_col_pos_folder", "0",
534 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
535 {"folder_col_pos_new", "1",
536 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
537 {"folder_col_pos_unread", "2",
538 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
539 {"folder_col_pos_total", "3",
540 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
543 {"folder_col_size_folder", "120",
544 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
545 {"folder_col_size_new", "32",
546 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
547 {"folder_col_size_unread", "32",
548 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
549 {"folder_col_size_total", "32",
550 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
552 {"folder_col_size_folder", "400",
553 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
554 {"folder_col_size_new", "32",
555 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
556 {"folder_col_size_unread", "32",
557 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
558 {"folder_col_size_total", "32",
559 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
561 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
563 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
566 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
568 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
570 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
572 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
574 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
577 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
579 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
581 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
583 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
585 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
587 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
590 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
592 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
594 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
596 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
598 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
600 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
602 {"compose_width", "600", &prefs_common.compose_width, P_INT,
604 {"compose_height", "560", &prefs_common.compose_height, P_INT,
607 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
609 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
611 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
613 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
615 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
617 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
619 {"compose_width", "700", &prefs_common.compose_width, P_INT,
621 {"compose_height", "470", &prefs_common.compose_height, P_INT,
624 {"compose_x", "0", &prefs_common.compose_x, P_INT,
626 {"compose_y", "0", &prefs_common.compose_y, P_INT,
629 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
632 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
634 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
636 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
638 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
640 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
642 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
644 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
646 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
648 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
650 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
652 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
653 P_BOOL, NULL, NULL, NULL},
655 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
656 P_BOOL, NULL, NULL, NULL},
657 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
659 {"display_xface", "TRUE", &prefs_common.display_xface,
660 P_BOOL, NULL, NULL, NULL},
661 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
663 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
665 {"line_space", "2", &prefs_common.line_space, P_INT,
667 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
670 {"enable_smooth_scroll", "FALSE",
671 &prefs_common.enable_smooth_scroll, P_BOOL,
673 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
675 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
677 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
680 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
683 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
686 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
688 {"attach_save_directory", NULL,
689 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
690 {"attach_load_directory", NULL,
691 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
694 {"mime_textviewer", NULL,
695 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
696 {"mime_open_command", "gedit '%s'",
697 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
701 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
704 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
707 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
708 NULL, NULL, NULL}, */
709 {"always_show_message_when_selected", "FALSE",
710 &prefs_common.always_show_msg,
711 P_BOOL, NULL, NULL, NULL},
712 {"select_on_entry", "2", &prefs_common.select_on_entry,
713 P_ENUM, NULL, NULL, NULL},
714 {"mark_as_read_on_new_window", "FALSE",
715 &prefs_common.mark_as_read_on_new_window,
716 P_BOOL, NULL, NULL, NULL},
717 {"mark_as_read_delay", "0",
718 &prefs_common.mark_as_read_delay, P_INT,
720 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
722 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
725 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
726 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
729 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
732 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
734 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
738 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
739 P_BOOL, NULL, NULL, NULL},
740 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
741 P_INT, NULL, NULL, NULL},
742 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
743 P_INT, NULL, NULL, NULL},
746 {"uri_open_command", DEFAULT_BROWSER_CMD,
747 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
748 {"print_command", "lpr %s",
749 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
750 {"ext_editor_command", DEFAULT_EDITOR_CMD,
751 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
752 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
753 P_BOOL, NULL, NULL, NULL},
754 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
756 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
758 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
760 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
761 P_BOOL, NULL, NULL, NULL},
762 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
764 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
767 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
770 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
774 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
775 P_INT, NULL, NULL, NULL},
776 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
778 {"important_score", "1", &prefs_common.important_score, P_INT,
781 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
783 {"log_length", "500", &prefs_common.loglength, P_INT,
786 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
788 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
790 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
792 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
794 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
796 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
798 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
800 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
803 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
805 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
807 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
809 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
811 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
813 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
815 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
817 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
819 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
822 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
825 {"color_new", "179", &prefs_common.color_new, P_COLOR,
828 /* Some windows' sizes */
829 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
831 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
834 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
836 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
839 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
841 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
844 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
846 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
849 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
851 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
854 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
856 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
859 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
861 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
864 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
866 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
869 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
871 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
874 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
876 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
879 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
881 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
884 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
886 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
889 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
891 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
894 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
896 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
899 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
901 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
904 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
906 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
909 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
911 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
914 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
916 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
920 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
922 {"utf8_instead_of_locale_for_broken_mail", "0",
923 &prefs_common.broken_are_utf8, P_INT,
925 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
927 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
929 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
931 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
933 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
935 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
937 {"folderview_vscrollbar_policy", "0",
938 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
940 {"textview_cursor_visible", "FALSE",
941 &prefs_common.textview_cursor_visible, P_BOOL,
943 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
945 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
947 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
949 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
950 P_INT, NULL, NULL, NULL },
951 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
953 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
955 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
957 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
959 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
961 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
963 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
965 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
968 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
971 PrefsCommon *prefs_common_get(void)
973 return &prefs_common;
977 * Read history list from the specified history file
979 static GList *prefs_common_read_history(const gchar *history)
983 gchar buf[PREFSBUFSIZE];
986 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
988 if ((fp = g_fopen(path, "rb")) == NULL) {
989 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
994 while (fgets(buf, sizeof(buf), fp) != NULL) {
996 if (buf[0] == '\0') continue;
997 tmp = add_history(tmp, buf);
1001 tmp = g_list_reverse(tmp);
1006 void prefs_common_read_config(void)
1011 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1012 prefs_read_config(param, "Common", rcpath, NULL);
1014 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1019 tmp = g_strdup(gettext(prefs_common.quotefmt));
1020 g_free(prefs_common.quotefmt);
1021 prefs_common.quotefmt = tmp;
1023 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1024 g_free(prefs_common.fw_quotefmt);
1025 prefs_common.fw_quotefmt = tmp;
1027 tmp = g_strdup(gettext(prefs_common.date_format));
1028 g_free(prefs_common.date_format);
1029 prefs_common.date_format = tmp;
1031 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1032 g_free(prefs_common.compose_body_format);
1033 prefs_common.compose_body_format = tmp;
1035 prefs_common.mime_open_cmd_history =
1036 prefs_common_read_history(COMMAND_HISTORY);
1037 prefs_common.summary_quicksearch_history =
1038 prefs_common_read_history(QUICKSEARCH_HISTORY);
1039 prefs_common.summary_search_from_history =
1040 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1041 prefs_common.summary_search_to_history =
1042 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1043 prefs_common.summary_search_subject_history =
1044 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1045 prefs_common.summary_search_body_history =
1046 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1047 prefs_common.summary_search_adv_condition_history =
1048 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1049 prefs_common.message_search_history =
1050 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1052 colorlabel_update_colortable_from_prefs();
1056 * Save history list to the specified history file
1058 static void prefs_common_save_history(const gchar *history, GList *list)
1064 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1066 if ((fp = g_fopen(path, "wb")) == NULL) {
1067 FILE_OP_ERROR(path, "fopen");
1072 for (cur = list; cur != NULL; cur = cur->next) {
1073 fputs((gchar *)cur->data, fp);
1081 void prefs_common_write_config(void)
1083 prefs_write_config(param, "Common", COMMON_RC);
1085 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1088 prefs_common_save_history(COMMAND_HISTORY,
1089 prefs_common.mime_open_cmd_history);
1090 prefs_common_save_history(QUICKSEARCH_HISTORY,
1091 prefs_common.summary_quicksearch_history);
1092 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1093 prefs_common.summary_search_from_history);
1094 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1095 prefs_common.summary_search_to_history);
1096 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1097 prefs_common.summary_search_subject_history);
1098 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1099 prefs_common.summary_search_body_history);
1100 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1101 prefs_common.summary_search_adv_condition_history);
1102 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1103 prefs_common.message_search_history);
1106 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1107 both 'in' and 'out' must be non-NULL.
1108 'out' must be a pointer to a buffer whose size is at least equal
1109 to strlen(txt)+1, this buffer will get cleared. out's contents
1110 will always get set to a valid string, even if it's "".*/
1111 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1118 g_return_if_fail( in != NULL );
1119 g_return_if_fail( out != NULL );
1123 memset(out, 0, strlen(in)+1);
1124 while (*i != '\0') {
1125 if (*i == '\\' && *(i+1) == 'n') {
1128 } else if (*i == '\\' && *(i+1) == 't') {
1131 } else if (*i == '\\' && *(i+1) == '\\') {
1142 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1143 both 'in' and 'out' must be non-NULL.
1144 'out' must be a pointer to a buffer whose size is at least equal
1145 to 2*strlen(txt)+1. out's contents will always get set to a valid
1146 string, even if it's "". */
1147 void pref_get_escaped_pref(gchar *out, const gchar *in)
1154 g_return_if_fail( in != NULL );
1155 g_return_if_fail( out != NULL );
1159 while (*i != '\0') {
1163 } else if (*i == '\t') {
1166 } else if (*i == '\\') {
1177 /* set the contents of a textview widget from the internal \-escaped
1178 representation of a pref string. both txt and textview must be non-NULL. */
1179 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1181 GtkTextBuffer *buffer;
1184 g_return_if_fail( txt != NULL );
1185 g_return_if_fail( textview != NULL );
1187 buffer = gtk_text_view_get_buffer(textview);
1188 out = malloc(strlen(txt)+1);
1190 pref_get_unescaped_pref(out, txt);
1192 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1196 /* set the contents of a gtkentry widget from the internal \-escaped
1197 representation of a pref string. both txt and entry must be non-NULL. */
1198 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1202 g_return_if_fail( txt != NULL );
1203 g_return_if_fail( entry != NULL );
1205 out = malloc(strlen(txt)+1);
1207 pref_get_unescaped_pref(out, txt);
1209 gtk_entry_set_text(entry, out?out:"");
1213 /* get the \-escaped internal representation of a pref from the contents of
1214 a textview widget. textview must be non-NULL. */
1215 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1217 GtkTextBuffer *buffer;
1218 GtkTextIter start, end;
1221 g_return_val_if_fail( textview != NULL, "" );
1223 buffer = gtk_text_view_get_buffer(textview);
1224 gtk_text_buffer_get_start_iter(buffer, &start);
1225 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1226 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1227 out = malloc(2*strlen(tmp)+1);
1229 pref_get_escaped_pref(out, tmp);
1235 /* get the \-escaped internal representation of a pref from the contents of
1236 a gtkentry widget. entry must be non-NULL. */
1237 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1241 g_return_val_if_fail( entry != NULL, "" );
1243 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1244 out = malloc(2*strlen(tmp)+1);
1246 pref_get_escaped_pref(out, tmp);
1252 /* ugly hack to be able to get this pref from ssl_certificate.c */
1253 gboolean prefs_common_unsafe_ssl_certs(void)
1255 return prefs_common.unsafe_ssl_certs;