4b5d46b15515c941c2ba514ac4df860c60234808
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2011 Hiroyuki Yamamoto and the Claws Mail team
4  *
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 3 of the License, or
8  * (at your option) any later version.
9  *
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.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  * 
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
37
38 #include "main.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"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
62 #include "addrcustomattr.h"
63
64 enum {
65         DATEFMT_FMT,
66         DATEFMT_TXT,
67         N_DATEFMT_COLUMNS
68 };
69
70 PrefsCommon prefs_common;
71
72 GtkWidget *notebook;
73
74 #ifdef G_OS_WIN32
75 /*
76  * In the Windows version prefs_common contains
77  *   - the non-OS-specific settings of the "Common" section and
78  *   - the OS-specific settings of the "CommonWin32" section
79  * The OS-specific settings of the "Common" section are not used
80  * but saved in prefs_unix.
81  */
82
83 #  define SPECIFIC_PREFS prefs_unix
84
85 static PrefsCommon prefs_unix;
86
87 static PrefParam param_os_specific[] = {
88         /* Receive */
89         {"ext_inc_path", "",
90          &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
91         {"newmail_notify_cmd", "",
92          &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
93
94         /* new fonts */
95         {"widget_font_gtk2",    NULL,
96           &prefs_common.widgetfont,             P_STRING, NULL, NULL, NULL},
97         {"message_font_gtk2",   "Monospace 9",
98          &prefs_common.textfont,                P_STRING, NULL, NULL, NULL},
99         {"print_font_gtk2",     "Monospace 9",
100          &prefs_common.printfont,               P_STRING, NULL, NULL, NULL},
101         {"small_font_gtk2",     "Sans 9",
102           &prefs_common.smallfont,              P_STRING, NULL, NULL, NULL},
103         {"normal_font_gtk2",    "Sans 9",
104           &prefs_common.normalfont,             P_STRING, NULL, NULL, NULL},
105         {"bold_font_gtk2",      "Sans 9 Bold",
106           &prefs_common.boldfont,               P_STRING, NULL, NULL, NULL},
107         /* Message */
108         {"attach_save_directory", NULL,
109          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
110         {"attach_load_directory", NULL,
111          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
112
113         /* MIME viewer */
114         {"mime_textviewer", NULL,
115          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
116         {"mime_open_command", "notepad '%s'",
117          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
118
119         /* Interface */
120         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
121          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
122
123         /* Other */
124         {"ext_editor_command", "notepad %s",
125          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
126
127         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
128 };
129 #else
130 #  define SPECIFIC_PREFS prefs_common
131 #endif
132
133 /*
134    parameter name, default value, pointer to the prefs variable, data type,
135    pointer to the widget pointer,
136    pointer to the function for data setting,
137    pointer to the function for widget setting
138  */
139
140 static PrefParam param[] = {
141 #ifdef MAEMO
142         {"data_root", "", &prefs_common.data_root, P_STRING,
143          NULL, NULL, NULL},
144 #endif
145         /* Receive */
146         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
147          NULL, NULL, NULL},
148         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
149          NULL, NULL, NULL},
150
151         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
152          NULL, NULL, NULL},
153         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
154          NULL, NULL, NULL},
155         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
156          NULL, NULL, NULL},
157         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
158          P_BOOL, NULL, NULL, NULL},
159         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
160          P_BOOL, NULL, NULL, NULL},
161         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
162          P_BOOL, NULL, NULL, NULL},
163         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
164         P_BOOL, NULL, NULL, NULL},
165         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
166          NULL, NULL, NULL},
167 #ifdef MAEMO
168         {"maemo_show_led", "TRUE", &prefs_common.maemo_show_led, P_BOOL,
169          NULL, NULL, NULL},
170         {"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
171          NULL, NULL, NULL},
172         {"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
173          NULL, NULL, NULL},
174 #endif
175         {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
176          NULL, NULL, NULL},
177         {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
178          NULL, NULL, NULL},
179         {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
180          NULL, NULL, NULL},
181         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
182          P_BOOL, NULL, NULL, NULL},
183         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
184          P_BOOL, NULL, NULL, NULL},
185  
186         /* Send */
187         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
188          NULL, NULL, NULL},
189         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
190          P_BOOL, NULL, NULL, NULL},
191 #ifndef GENERIC_UMPC
192         {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
193          NULL, NULL, NULL},
194 #else
195         {"send_dialog_mode", "1", &prefs_common.send_dialog_invisible, P_BOOL,
196          NULL, NULL, NULL},
197 #endif
198         {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
199          NULL, NULL, NULL},
200         {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
201          NULL, NULL, NULL},
202
203         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
204          NULL, NULL, NULL},
205         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
206          NULL, NULL, NULL},
207         {"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL,
208          NULL, NULL, NULL},
209
210         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
211          P_BOOL, NULL, NULL, NULL},
212
213         /* Compose */
214         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
215          NULL, NULL, NULL},
216         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
217          P_BOOL, NULL, NULL, NULL},
218         {"redirect_keep_from", "FALSE",
219          &prefs_common.redirect_keep_from, P_BOOL,
220          NULL, NULL, NULL},
221         {"undo_level", "50", &prefs_common.undolevels, P_INT,
222          NULL, NULL, NULL},
223         {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
224          NULL, NULL, NULL},
225         {"compose_subject_format", "",
226          &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
227         {"compose_body_format", N_("Hello,\\n"),
228          &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
229         {"show_compose_margin", "FALSE", &prefs_common.show_compose_margin, P_BOOL,
230          NULL, NULL, NULL},
231         
232
233         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
234          NULL, NULL, NULL},
235         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
236          NULL, NULL, NULL},
237         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
238          NULL, NULL, NULL},
239         {"primary_paste_unselects", "FALSE", &prefs_common.primary_paste_unselects, P_BOOL,
240          NULL, NULL, NULL},
241         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
242          NULL, NULL, NULL},
243         {"auto_indent", "TRUE", &prefs_common.auto_indent, P_BOOL,
244          NULL, NULL, NULL},
245         {"autosave", "TRUE", &prefs_common.autosave,
246          P_BOOL, NULL, NULL, NULL},
247         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
248          NULL, NULL, NULL},
249         {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert,
250          P_BOOL, NULL, NULL, NULL},
251         {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size,
252          P_INT, NULL, NULL, NULL},
253
254         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
255          NULL, NULL, NULL},
256         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
257          NULL, NULL, NULL},
258         {"alt_dictionary",  "", &prefs_common.alt_dictionary, P_STRING,
259          NULL, NULL, NULL},
260         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
261          NULL, NULL, NULL},
262         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
263          NULL, NULL, NULL},
264         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
265          P_BOOL, NULL, NULL, NULL},
266         {"misspelled_color", "#ff0000", &prefs_common.misspelled_col, P_COLOR,
267          NULL, NULL, NULL},
268         {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
269          NULL, NULL, NULL},
270
271         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
272          NULL, NULL, NULL},
273         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
274          NULL, NULL, NULL},
275
276         /* Account autoselection */
277         {"reply_account_autoselect", "TRUE",
278          &prefs_common.reply_account_autosel, P_BOOL,
279          NULL, NULL, NULL},
280         {"forward_account_autoselect", "TRUE",
281          &prefs_common.forward_account_autosel, P_BOOL,
282          NULL, NULL, NULL},
283         {"reedit_account_autoselect", "TRUE",
284          &prefs_common.reedit_account_autosel, P_BOOL,
285          NULL, NULL, NULL},
286
287         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
288          NULL, NULL, NULL},
289
290 #ifndef GENERIC_UMPC
291         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
292          NULL, NULL, NULL},
293 #else
294         {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
295          NULL, NULL, NULL},
296 #endif
297
298         /* Quote */
299         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
300          NULL, NULL, NULL},
301         {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"),
302          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
303
304         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
305          NULL, NULL, NULL},
306         {"forward_quote_format",
307          N_("\\n\\nBegin forwarded message:\\n\\n"
308          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
309          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
310          &prefs_common.fw_quotefmt, P_STRING,
311          NULL, NULL, NULL},
312         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
313          NULL, NULL, NULL},
314
315         /* Display */
316         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
317         {"widget_font",         NULL,
318           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
319         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
320          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
321         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
322           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
323         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
324           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
325         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
326           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
327
328         /* new fonts */
329 #ifndef GENERIC_UMPC
330         {"widget_font_gtk2",    NULL,
331           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
332         {"message_font_gtk2",   "Monospace 9",
333          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
334         {"print_font_gtk2",     "Monospace 9",
335          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
336         {"small_font_gtk2",     "Sans 9",
337           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
338         {"normal_font_gtk2",    "Sans 9",
339           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
340         {"bold_font_gtk2",      "Sans Bold 9",
341           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
342 #else
343         {"widget_font_gtk2",    NULL,
344           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
345         {"message_font_gtk2",   "Monospace 8",
346          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
347         {"print_font_gtk2",     "Monospace 8",
348          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
349         {"small_font_gtk2",     "Sans 8",
350           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
351         {"normal_font_gtk2",    "Sans 8",
352           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
353         {"bold_font_gtk2",      "Sans Bold 8",
354           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
355 #endif
356
357         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
358          NULL, NULL, NULL},
359         {"derive_from_normal_font", "TRUE", &prefs_common.derive_from_normal_font, P_BOOL,
360          NULL, NULL, NULL},
361
362         /* custom colors */
363         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
364          NULL, NULL, NULL},
365         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
366          NULL, NULL, NULL},
367         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
368          NULL, NULL, NULL},
369         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
370          NULL, NULL, NULL},
371         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
372          NULL, NULL, NULL},
373         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
374          NULL, NULL, NULL},
375         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
376          NULL, NULL, NULL},
377         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
378          NULL, NULL, NULL},
379         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
380          NULL, NULL, NULL},
381         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
382          NULL, NULL, NULL},
383         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
384          NULL, NULL, NULL},
385         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
386          NULL, NULL, NULL},
387         {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
388          NULL, NULL, NULL},
389         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
390          NULL, NULL, NULL},
391         {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
392          NULL, NULL, NULL},
393         {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
394          NULL, NULL, NULL},
395         {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
396          NULL, NULL, NULL},
397         {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
398          NULL, NULL, NULL},
399         {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
400          NULL, NULL, NULL},
401         {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
402          NULL, NULL, NULL},
403         {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
404          NULL, NULL, NULL},
405         {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
406          NULL, NULL, NULL},
407         {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
408          NULL, NULL, NULL},
409         {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
410          NULL, NULL, NULL},
411         {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
412          NULL, NULL, NULL},
413         {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
414          NULL, NULL, NULL},
415         {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
416          NULL, NULL, NULL},
417         {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
418          NULL, NULL, NULL},
419         {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
420          NULL, NULL, NULL},
421         {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
422          NULL, NULL, NULL},
423
424         /* image viewer */
425         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
426          NULL, NULL, NULL},
427         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
428          NULL, NULL, NULL},
429         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
430          NULL, NULL, NULL},
431
432         {"display_folder_unread_num", "0",
433          &prefs_common.display_folder_unread, P_INT,
434          NULL, NULL, NULL},
435         {"newsgroup_abbrev_len", "16",
436          &prefs_common.ng_abbrev_len, P_INT,
437          NULL, NULL, NULL},
438
439         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
440          NULL, NULL, NULL},
441
442         /* Display: Summary View */
443         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
444          NULL, NULL, NULL},
445         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
446          NULL, NULL, NULL},
447         {"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format,
448          P_STRING, NULL, NULL, NULL},
449         {"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL,
450          NULL, NULL, NULL},
451
452         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
453          NULL, NULL, NULL},
454
455         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
456          NULL, NULL, NULL},
457 #ifndef GENERIC_UMPC
458         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
459          NULL, NULL, NULL},
460 #else
461         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
462          NULL, NULL, NULL},
463 #endif
464         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
465          NULL, NULL, NULL},
466         {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
467          NULL, NULL, NULL},
468 #ifndef GENERIC_UMPC
469         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
470          NULL, NULL, NULL},
471         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
472          NULL, NULL, NULL},
473 #else
474         {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
475          NULL, NULL, NULL},
476         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
477          NULL, NULL, NULL},
478 #endif
479
480         {"summary_col_show_mark", "TRUE",
481          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
482         {"summary_col_show_unread", "TRUE",
483          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
484         {"summary_col_show_subject", "TRUE",
485          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
486         {"summary_col_show_from", "TRUE",
487          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
488         {"summary_col_show_to", "FALSE",
489          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
490         {"summary_col_show_date", "TRUE",
491          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
492         {"summary_col_show_mime", "TRUE",
493          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
494         {"summary_col_show_size", "TRUE",
495          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
496         {"summary_col_show_number", "FALSE",
497          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
498         {"summary_col_show_score", "FALSE",
499          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
500         {"summary_col_show_locked", "FALSE",
501          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
502         {"summary_col_show_tags", "FALSE",
503          &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
504
505         {"summary_col_pos_mark", "0",
506           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
507         {"summary_col_pos_unread", "1",
508           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
509         {"summary_col_pos_mime", "2",
510           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
511         {"summary_col_pos_subject", "3",
512           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
513         {"summary_col_pos_from", "4",
514           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
515         {"summary_col_pos_date", "5",
516           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
517         {"summary_col_pos_size", "6",
518           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
519         {"summary_col_pos_number", "7",
520           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
521         {"summary_col_pos_score", "8",
522          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
523         {"summary_col_pos_locked", "9",
524          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
525         {"summary_col_pos_to", "10",
526           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
527         {"summary_col_pos_tags", "11",
528           &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
529
530         {"summary_col_size_mark", "10",
531          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
532         {"summary_col_size_unread", "13",
533          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
534         {"summary_col_size_mime", "10",
535          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
536 #ifndef GENERIC_UMPC
537         {"summary_col_size_subject", "200",
538          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
539         {"summary_col_size_from", "120",
540          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
541         {"summary_col_size_to", "120",
542          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
543 #else
544         {"summary_col_size_subject", "300",
545          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
546         {"summary_col_size_from", "150",
547          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
548         {"summary_col_size_to", "150",
549          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
550
551 #endif
552         {"summary_col_size_date", "118",
553          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
554         {"summary_col_size_size", "45",
555          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
556         {"summary_col_size_number", "40",
557          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
558         {"summary_col_size_score", "40",
559          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
560         {"summary_col_size_locked", "13",
561          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
562         {"summary_col_size_tags", "150",
563          &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
564
565         /* Widget size */
566         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
567          NULL, NULL, NULL},
568         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
569          NULL, NULL, NULL},
570         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
571          NULL, NULL, NULL},
572         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
573          NULL, NULL, NULL},
574         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
575          NULL, NULL, NULL},
576
577         {"folder_col_show_folder", "TRUE",
578          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
579         {"folder_col_show_new", "TRUE",
580          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
581         {"folder_col_show_unread", "TRUE",
582          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
583         {"folder_col_show_total", "TRUE",
584          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
585
586         {"folder_col_pos_folder", "0",
587          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
588         {"folder_col_pos_new", "1",
589          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
590         {"folder_col_pos_unread", "2",
591          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
592         {"folder_col_pos_total", "3",
593          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
594
595 #ifndef GENERIC_UMPC
596         {"folder_col_size_folder", "120",
597          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
598         {"folder_col_size_new", "32",
599          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
600         {"folder_col_size_unread", "32",
601          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
602         {"folder_col_size_total", "32",
603          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
604 #else
605         {"folder_col_size_folder", "400",
606          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
607         {"folder_col_size_new", "32",
608          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
609         {"folder_col_size_unread", "32",
610          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
611         {"folder_col_size_total", "32",
612          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
613 #endif
614         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
615          NULL, NULL, NULL},
616         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
617          NULL, NULL, NULL},
618
619         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
620          NULL, NULL, NULL},
621         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
622          NULL, NULL, NULL},
623         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
624          NULL, NULL, NULL},
625         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
626          NULL, NULL, NULL},
627         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
628          NULL, NULL, NULL},
629
630         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
631          NULL, NULL, NULL},
632         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
633          NULL, NULL, NULL},
634         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
635          NULL, NULL, NULL},
636         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
637          NULL, NULL, NULL},
638         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
639          NULL, NULL, NULL},
640         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
641          NULL, NULL, NULL},
642         {"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL,
643          NULL, NULL, NULL},
644         {"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL,
645          NULL, NULL, NULL},
646 #ifndef GENERIC_UMPC
647         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
648          NULL, NULL, NULL},
649         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
650          NULL, NULL, NULL},
651         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
652          NULL, NULL, NULL},
653         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
654          NULL, NULL, NULL},
655         {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
656          NULL, NULL, NULL},      
657         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
658          NULL, NULL, NULL},
659         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
660          NULL, NULL, NULL},
661         {"compose_width", "600", &prefs_common.compose_width, P_INT,
662          NULL, NULL, NULL},
663         {"compose_height", "560", &prefs_common.compose_height, P_INT,
664          NULL, NULL, NULL},
665 #else
666         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
667          NULL, NULL, NULL},
668         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
669          NULL, NULL, NULL},
670         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
671          NULL, NULL, NULL},
672         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
673          NULL, NULL, NULL},
674         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
675          NULL, NULL, NULL},
676         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
677          NULL, NULL, NULL},
678         {"compose_width", "700", &prefs_common.compose_width, P_INT,
679          NULL, NULL, NULL},
680         {"compose_height", "470", &prefs_common.compose_height, P_INT,
681          NULL, NULL, NULL},
682 #endif
683         {"compose_notebook_height", "130", &prefs_common.compose_notebook_height, P_INT,
684          NULL, NULL, NULL},
685         {"compose_x", "0", &prefs_common.compose_x, P_INT,
686          NULL, NULL, NULL},
687         {"compose_y", "0", &prefs_common.compose_y, P_INT,
688          NULL, NULL, NULL},
689         /* Message */
690         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
691          NULL, NULL, NULL},
692
693         {"quote_level1_color", "#0000b3", &prefs_common.quote_level1_col, P_COLOR,
694          NULL, NULL, NULL},
695         {"quote_level2_color", "#0000b3", &prefs_common.quote_level2_col, P_COLOR,
696          NULL, NULL, NULL},
697         {"quote_level3_color", "#0000b3", &prefs_common.quote_level3_col, P_COLOR,
698          NULL, NULL, NULL},
699         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
700          NULL, NULL, NULL},
701         {"quote_level1_bgcolor", "#cccccc", &prefs_common.quote_level1_bgcol, P_COLOR,
702          NULL, NULL, NULL},
703         {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.quote_level2_bgcol, P_COLOR,
704          NULL, NULL, NULL},
705         {"quote_level3_bgcolor", "#dddddd", &prefs_common.quote_level3_bgcol, P_COLOR,
706          NULL, NULL, NULL},
707         {"uri_color", "#007f00", &prefs_common.uri_col, P_COLOR,
708          NULL, NULL, NULL},
709         {"emphasis_color", "#0000cf", &prefs_common.emphasis_col, P_COLOR,
710          NULL, NULL, NULL},
711         {"target_folder_color", "#da1cca", &prefs_common.tgt_folder_col, P_COLOR,
712          NULL, NULL, NULL},
713         {"signature_color", "#797979", &prefs_common.signature_col, P_COLOR,
714          NULL, NULL, NULL},
715         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
716          P_BOOL, NULL, NULL, NULL},
717
718         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
719          P_BOOL, NULL, NULL, NULL},
720         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
721          NULL, NULL, NULL},
722         {"display_xface", "TRUE", &prefs_common.display_xface,
723          P_BOOL, NULL, NULL, NULL},
724         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
725          NULL, NULL, NULL},
726         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
727          NULL, NULL, NULL},
728         {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
729          NULL, NULL, NULL},
730         {"line_space", "2", &prefs_common.line_space, P_INT,
731          NULL, NULL, NULL},
732         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
733          NULL, NULL, NULL},
734
735         {"enable_smooth_scroll", "FALSE",
736          &prefs_common.enable_smooth_scroll, P_BOOL,
737          NULL, NULL, NULL},
738         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
739          NULL, NULL, NULL},
740         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
741          NULL, NULL, NULL},
742         {"hide_quoted", "TRUE",
743          &prefs_common.hide_quoted, P_BOOL,
744          NULL, NULL, NULL},
745         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
746          NULL, NULL, NULL},
747
748         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
749          NULL, NULL, NULL},
750
751         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
752          NULL, NULL, NULL},
753         {"attach_save_directory", NULL,
754          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
755         {"attach_load_directory", NULL,
756          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
757
758         /* MIME viewer */
759         {"mime_textviewer",   NULL,
760          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
761         {"mime_open_command", "gedit '%s'",
762          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
763         {"show_inline_attachments", "TRUE", 
764          &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
765
766         /* Interface */
767 #ifndef GENERIC_UMPC
768         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
769          NULL, NULL, NULL},
770 #else
771         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
772          NULL, NULL, NULL},
773 #endif
774         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
775          NULL, NULL, NULL}, */
776         {"always_show_message_when_selected", "0",
777          &prefs_common.always_show_msg,
778          P_ENUM, NULL, NULL, NULL},
779         {"select_on_entry", "3", &prefs_common.select_on_entry,
780          P_ENUM, NULL, NULL, NULL},
781         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
782          P_BOOL, NULL, NULL, NULL},
783
784         /* do it SUMMARY_OPEN_ACTIONS-1 times */
785         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
786          NULL, NULL, NULL},
787         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
788          NULL, NULL, NULL},
789         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
790          NULL, NULL, NULL},
791         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
792          NULL, NULL, NULL},
793         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
794          NULL, NULL, NULL},
795         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
796          NULL, NULL, NULL},
797         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
798          NULL, NULL, NULL},
799
800         {"mark_as_read_on_new_window", "FALSE",
801          &prefs_common.mark_as_read_on_new_window,
802          P_BOOL, NULL, NULL, NULL},
803         {"mark_as_read_delay", "0",
804          &prefs_common.mark_as_read_delay, P_INT, 
805          NULL, NULL, NULL},
806         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
807          NULL, NULL, NULL},
808         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
809          NULL, NULL, NULL},
810         {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
811          NULL, NULL, NULL},
812
813         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
814          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
815          NULL, NULL, NULL},
816
817         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
818          NULL, NULL, NULL},
819
820         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
821          NULL, NULL, NULL},
822         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
823          NULL, NULL, NULL},
824
825         /* Addressbook */
826         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
827          P_BOOL, NULL, NULL, NULL},
828         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
829          P_INT, NULL, NULL, NULL},
830         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
831          P_INT, NULL, NULL, NULL},
832
833         /* Other */
834 #ifndef G_OS_WIN32
835         {"uri_open_command", DEFAULT_BROWSER_CMD,
836          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
837 #endif
838         {"ext_editor_command", DEFAULT_EDITOR_CMD,
839          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
840         {"cmds_use_system_default", "TRUE",
841          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
842         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
843          P_BOOL, NULL, NULL, NULL},
844         {"session_passwords", "FALSE", &prefs_common.session_passwords,
845          P_BOOL, NULL, NULL, NULL},
846         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
847          NULL, NULL, NULL},
848         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
849          NULL, NULL, NULL},
850         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
851          NULL, NULL, NULL},
852         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
853          P_BOOL, NULL, NULL, NULL},
854         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
855          NULL, NULL, NULL},
856         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
857          NULL, NULL, NULL},
858 #ifndef GENERIC_UMPC
859         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
860          NULL, NULL, NULL},
861 #else
862         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
863          NULL, NULL, NULL},
864 #endif
865
866 #if defined(__OpenBSD__)
867         {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
868          P_INT, NULL, NULL, NULL},
869 #else
870         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
871          P_INT, NULL, NULL, NULL},
872 #endif
873         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
874          NULL, NULL, NULL},
875         {"important_score", "1", &prefs_common.important_score, P_INT,
876          NULL, NULL, NULL},
877
878         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
879          NULL, NULL, NULL},
880         {"log_length", "500", &prefs_common.loglength, P_INT,
881          NULL, NULL, NULL},
882 #ifndef GENERIC_UMPC
883         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
884          NULL, NULL, NULL},
885         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
886          NULL, NULL, NULL},
887         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
888          NULL, NULL, NULL},
889         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
890          NULL, NULL, NULL},
891 #else
892         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
893          NULL, NULL, NULL},
894         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
895          NULL, NULL, NULL},
896         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
897          NULL, NULL, NULL},
898         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
899          NULL, NULL, NULL},
900 #endif
901         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
902          NULL, NULL, NULL},
903         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
904          NULL, NULL, NULL},
905         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
906          NULL, NULL, NULL},
907         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
908          NULL, NULL, NULL},
909         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
910          NULL, NULL, NULL},
911         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
912          NULL, NULL, NULL},
913         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
914          NULL, NULL, NULL},
915         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
916          NULL, NULL, NULL},
917
918     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
919          NULL, NULL, NULL},
920     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
921          NULL, NULL, NULL},
922     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
923          NULL, NULL, NULL},
924     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
925          NULL, NULL, NULL},
926     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
927          NULL, NULL, NULL},
928     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
929          NULL, NULL, NULL},
930     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
931          NULL, NULL, NULL},
932     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
933          NULL, NULL, NULL},
934         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
935          NULL, NULL, NULL},
936
937         {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
938          NULL, NULL, NULL},
939
940         {"color_new", "#0000b3", &prefs_common.color_new, P_COLOR,
941          NULL, NULL, NULL},
942
943         /* Some windows' sizes */
944         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
945          NULL, NULL, NULL},
946         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
947          NULL, NULL, NULL},
948
949         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
950          NULL, NULL, NULL},
951         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
952          NULL, NULL, NULL},
953
954         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
955          NULL, NULL, NULL},
956         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
957          NULL, NULL, NULL},
958
959         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
960          NULL, NULL, NULL},
961         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
962          NULL, NULL, NULL},
963
964         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
965          NULL, NULL, NULL},
966         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
967          NULL, NULL, NULL},
968
969         {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
970          NULL, NULL, NULL},
971         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
972          NULL, NULL, NULL},
973
974         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
975          NULL, NULL, NULL},
976         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
977          NULL, NULL, NULL},
978
979         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
980          NULL, NULL, NULL},
981         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
982          NULL, NULL, NULL},
983
984         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
985          NULL, NULL, NULL},
986         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
987          NULL, NULL, NULL},
988
989         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
990          NULL, NULL, NULL},
991         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
992          NULL, NULL, NULL},
993
994         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
995          NULL, NULL, NULL},
996         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
997          NULL, NULL, NULL},
998
999         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1000          NULL, NULL, NULL},
1001         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1002          NULL, NULL, NULL},
1003
1004         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1005          NULL, NULL, NULL},
1006
1007         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1008          NULL, NULL, NULL},
1009         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1010          NULL, NULL, NULL},
1011
1012         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1013          NULL, NULL, NULL},
1014         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1015          NULL, NULL, NULL},
1016
1017         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1018          NULL, NULL, NULL},
1019         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1020          NULL, NULL, NULL},
1021
1022         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1023          NULL, NULL, NULL},
1024         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1025          NULL, NULL, NULL},
1026
1027         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1028          NULL, NULL, NULL},
1029         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1030          NULL, NULL, NULL},
1031
1032         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1033          NULL, NULL, NULL},
1034         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1035          NULL, NULL, NULL},
1036
1037         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1038          NULL, NULL, NULL},
1039         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1040          NULL, NULL, NULL},
1041
1042         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1043          NULL, NULL, NULL},
1044         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1045          NULL, NULL, NULL},
1046
1047         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1048          NULL, NULL, NULL},
1049         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1050          NULL, NULL, NULL},
1051
1052         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1053          NULL, NULL, NULL},
1054         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1055          NULL, NULL, NULL},
1056
1057         /* Hidden */
1058         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1059          NULL, NULL, NULL},
1060         {"utf8_instead_of_locale_for_broken_mail", "0", 
1061          &prefs_common.broken_are_utf8, P_INT,
1062          NULL, NULL, NULL},
1063         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1064          NULL, NULL, NULL},
1065         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1066          NULL, NULL, NULL},
1067         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1068          NULL, NULL, NULL},
1069         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1070          NULL, NULL, NULL},
1071         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1072          NULL, NULL, NULL},
1073         {"folderview_vscrollbar_policy", "0",
1074          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1075          NULL, NULL, NULL},
1076         {"textview_cursor_visible", "FALSE",
1077          &prefs_common.textview_cursor_visible, P_BOOL,
1078          NULL, NULL, NULL},
1079         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1080          NULL, NULL, NULL},
1081 #ifndef GENERIC_UMPC
1082         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1083          NULL, NULL, NULL},
1084         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1085          NULL, NULL, NULL},
1086 #else
1087         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1088          NULL, NULL, NULL},
1089         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1090          NULL, NULL, NULL},
1091 #endif
1092         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1093         P_INT, NULL, NULL, NULL },
1094         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1095         P_STRING, NULL, NULL, NULL },
1096         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1097         P_BOOL, NULL, NULL, NULL },
1098         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1099          NULL, NULL, NULL},
1100         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1101          NULL, NULL, NULL},
1102         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1103          NULL, NULL, NULL},
1104         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1105          NULL, NULL, NULL},
1106         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1107          NULL, NULL, NULL},
1108         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1109          NULL, NULL, NULL},
1110         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1111          NULL, NULL, NULL},
1112         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1113          NULL, NULL, NULL},
1114         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1115          NULL, NULL, NULL},
1116         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1117          NULL, NULL, NULL},
1118 #ifndef GENERIC_UMPC
1119         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1120          NULL, NULL, NULL},
1121 #else
1122         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1123          NULL, NULL, NULL},
1124 #endif
1125
1126         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1127          NULL, NULL, NULL},
1128         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1129          NULL, NULL, NULL},
1130         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1131          NULL, NULL, NULL},
1132         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1133          NULL, NULL, NULL},
1134         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1135          NULL, NULL, NULL},
1136         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1137          NULL, NULL, NULL},
1138         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1139          NULL, NULL, NULL},
1140         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1141          NULL, NULL, NULL},
1142         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1143          NULL, NULL, NULL},
1144         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1145          NULL, NULL, NULL},
1146         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1147          NULL, NULL, NULL},
1148         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1149          NULL, NULL, NULL},
1150         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1151          NULL, NULL, NULL},
1152         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1153          NULL, NULL, NULL},
1154         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1155          NULL, NULL, NULL},
1156
1157         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1158         P_BOOL, NULL, NULL, NULL },
1159
1160         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1161          NULL, NULL, NULL},
1162
1163         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1164          NULL, NULL, NULL},
1165
1166         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1167 };
1168
1169 /*
1170  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1171  * Fallback to default_list if history file is not found
1172  */
1173 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1174                                                                                                                           GList *default_list)
1175 {
1176         FILE *fp;
1177         gchar *path;
1178         gchar buf[PREFSBUFSIZE];
1179         GList *tmp = NULL;
1180
1181         if (dirname) {
1182                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1183                                    G_DIR_SEPARATOR_S, history,
1184                                    NULL);
1185         } else {
1186         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1187                            NULL);
1188         }
1189         if ((fp = g_fopen(path, "rb")) == NULL) {
1190                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1191                 g_free(path);
1192                 /* returns default list if set, otherwise NULL */
1193                 return default_list;
1194         }
1195         g_free(path);
1196         while (fgets(buf, sizeof(buf), fp) != NULL) {
1197                 g_strstrip(buf);
1198                 if (buf[0] == '\0') continue;
1199                 tmp = add_history(tmp, buf);
1200         }
1201         fclose(fp);
1202
1203         tmp = g_list_reverse(tmp);
1204
1205         return tmp;
1206 }
1207
1208 /*
1209  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1210  */
1211 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1212 {
1213         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1214 }
1215
1216 /*
1217  * Read history list from the specified history file
1218  */
1219 static GList *prefs_common_read_history(const gchar *history) 
1220 {
1221         return prefs_common_read_history_from_dir(NULL, history);
1222 }
1223
1224 void prefs_common_read_config(void)
1225 {
1226         gchar *rcpath;
1227         gchar *tmp;
1228
1229         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1230         prefs_read_config(param, "Common", rcpath, NULL);
1231 #ifdef G_OS_WIN32
1232         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1233 #endif
1234
1235         g_free(rcpath);
1236
1237         tmp = g_strdup(gettext(prefs_common.date_format));
1238         g_free(prefs_common.date_format);
1239         prefs_common.date_format = tmp;
1240
1241         prefs_common.mime_open_cmd_history =
1242                 prefs_common_read_history(COMMAND_HISTORY);
1243         prefs_common.summary_quicksearch_history =
1244                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1245         prefs_common.summary_search_from_history =
1246                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1247         prefs_common.summary_search_to_history =
1248                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1249         prefs_common.summary_search_subject_history =
1250                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1251         prefs_common.summary_search_body_history =
1252                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1253         prefs_common.summary_search_adv_condition_history =
1254                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1255         prefs_common.message_search_history =
1256                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1257         prefs_common.compose_save_to_history =
1258                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1259
1260         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1261
1262         colorlabel_update_colortable_from_prefs();
1263 }
1264
1265 #define TRY(func) \
1266 if (!(func)) \
1267 { \
1268         g_warning("failed to write\n"); \
1269         goto out;                       \
1270 } \
1271
1272 /*
1273  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1274  */
1275 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1276 {
1277         GList *cur;
1278         FILE *fp;
1279         gchar *path, *tmp_path;
1280
1281         if (dirname) {
1282                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1283                                    G_DIR_SEPARATOR_S, history,
1284                                    NULL);
1285         } else {
1286         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1287                            NULL);
1288         }
1289         tmp_path = g_strconcat(path, ".tmp", NULL);
1290
1291         if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1292                 FILE_OP_ERROR(tmp_path, "fopen");
1293                 goto out;
1294         }
1295
1296         for (cur = list; cur != NULL; cur = cur->next) {
1297                 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1298                     fputc('\n', fp) != EOF);
1299         }
1300
1301         if (fclose(fp) == EOF) {
1302                 FILE_OP_ERROR(tmp_path, "fclose");
1303                 fp = NULL;
1304                 goto out;
1305         }
1306         fp = NULL;
1307 #ifdef G_OS_WIN32
1308         claws_unlink(path);
1309 #endif
1310         if (g_rename(tmp_path, path) < 0) {
1311                 FILE_OP_ERROR(path, "rename");
1312                 goto out;
1313         }
1314
1315 out:
1316         if (fp)
1317                 fclose(fp);
1318         g_free(tmp_path);
1319         g_free(path);
1320 }
1321
1322 /*
1323  * Save history list to the specified history file
1324  */
1325 static void prefs_common_save_history(const gchar *history, GList *list)
1326 {
1327         prefs_common_save_history_to_dir(NULL, history, list);
1328 }
1329
1330 #undef TRY
1331
1332 void prefs_common_write_config(void)
1333 {
1334         prefs_write_config(param, "Common", COMMON_RC);
1335 #ifdef G_OS_WIN32
1336         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1337 #endif
1338
1339         prefs_common_save_history(COMMAND_HISTORY, 
1340                 prefs_common.mime_open_cmd_history);
1341         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1342                 prefs_common.summary_quicksearch_history);
1343         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1344                 prefs_common.summary_search_from_history);
1345         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1346                 prefs_common.summary_search_to_history);
1347         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1348                 prefs_common.summary_search_subject_history);
1349         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1350                 prefs_common.summary_search_body_history);
1351         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1352                 prefs_common.summary_search_adv_condition_history);
1353         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1354                 prefs_common.message_search_history);
1355         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1356                 prefs_common.compose_save_to_history);
1357
1358         prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1359                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1360                 prefs_common.addressbook_custom_attributes);
1361 }
1362
1363 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1364    both 'in' and 'out' must be non-NULL.
1365    'out' must be a pointer to a buffer whose size is at least equal
1366    to strlen(txt)+1, this buffer will get cleared. out's contents
1367    will always get set to a valid string, even if it's "".*/
1368 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1369 {
1370         const gchar *i;
1371         gchar *o;
1372
1373         *out = '\0';
1374
1375         cm_return_if_fail( in != NULL );
1376         cm_return_if_fail( out != NULL );
1377
1378         i = in;
1379         o = out;
1380         memset(out, 0, strlen(in)+1);
1381         while (*i != '\0') {
1382                 if (*i == '\\' && *(i+1) == 'n') {
1383                         *o++ = '\n';
1384                         i++;
1385                 } else if (*i == '\\' && *(i+1) == 't') {
1386                         *o++ = '\t';
1387                         i++;
1388                 } else if (*i == '\\' && *(i+1) == '\\') {
1389                         *o++ = '\\';
1390                         i++;
1391                 } else {
1392                         *o++ = *i;
1393                 }
1394                 i++;
1395         }
1396         *o='\0';
1397 }
1398
1399 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1400    both 'in' and 'out' must be non-NULL.
1401    'out' must be a pointer to a buffer whose size is at least equal
1402    to 2*strlen(txt)+1. out's contents will always get set to a valid
1403    string, even if it's "". */
1404 void pref_get_escaped_pref(gchar *out, const gchar *in)
1405 {
1406         const gchar *i;
1407         gchar *o;
1408
1409         *out = '\0';
1410
1411         cm_return_if_fail( in != NULL );
1412         cm_return_if_fail( out != NULL );
1413
1414         i = in;
1415         o = out;
1416         while (*i != '\0') {
1417                 if (*i == '\n') {
1418                         *o++ = '\\';
1419                         *o++ = 'n';
1420                 } else if (*i == '\t') {
1421                         *o++ = '\\';
1422                         *o++ = 't';
1423                 } else if (*i == '\\') {
1424                         *o++ = '\\';
1425                         *o++ = '\\';
1426                 } else {
1427                         *o++ = *i;
1428                 }
1429                 i++;
1430         }
1431         *o = '\0';
1432 }
1433                 
1434 /* set the contents of a textview widget from the internal \-escaped
1435   representation of a pref string. both txt and textview must be non-NULL. */
1436 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1437 {
1438         GtkTextBuffer *buffer;
1439         gchar *out = NULL;
1440
1441         cm_return_if_fail( textview != NULL );
1442
1443         buffer = gtk_text_view_get_buffer(textview);
1444
1445         if (!txt) {
1446                 gtk_text_buffer_set_text(buffer, "", -1);
1447         } else {
1448                 out = g_malloc(strlen(txt)+1);
1449
1450                 pref_get_unescaped_pref(out, txt);
1451
1452                 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1453                 g_free(out);
1454         }
1455 }
1456
1457 /* set the contents of a gtkentry widget from the internal \-escaped
1458   representation of a pref string. both txt and entry must be non-NULL. */
1459 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1460 {
1461         gchar *out = NULL;
1462
1463         cm_return_if_fail( entry != NULL );
1464         if (!txt) {
1465                 gtk_entry_set_text(entry, "");
1466         } else {
1467                 out = g_malloc(strlen(txt)+1);
1468
1469                 pref_get_unescaped_pref(out, txt);
1470
1471                 gtk_entry_set_text(entry, out?out:"");
1472                 g_free(out);
1473         }
1474 }
1475
1476 /* get the \-escaped internal representation of a pref from the contents of
1477    a textview widget. textview must be non-NULL. */
1478 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1479 {
1480         GtkTextBuffer *buffer;
1481         GtkTextIter start, end;
1482         gchar *out, *tmp;
1483         
1484         cm_return_val_if_fail( textview != NULL, "" );
1485
1486         buffer = gtk_text_view_get_buffer(textview);
1487         gtk_text_buffer_get_start_iter(buffer, &start);
1488         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1489         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1490         out = malloc(2*strlen(tmp)+1);
1491         if (out)
1492                 pref_get_escaped_pref(out, tmp);
1493         g_free(tmp);
1494
1495         return out?out:"";
1496 }
1497
1498 /* get the \-escaped internal representation of a pref from the contents of
1499    a gtkentry widget. entry must be non-NULL. */
1500 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1501 {
1502         gchar *out, *tmp;
1503
1504         cm_return_val_if_fail( entry != NULL, "" );
1505
1506         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1507         out = malloc(2*strlen(tmp)+1);
1508         
1509         if (out)
1510                 pref_get_escaped_pref(out, tmp);
1511         g_free(tmp);
1512
1513         return out?out:"";
1514 }
1515
1516 /* ugly hack to be able to get this pref from ssl_certificate.c */
1517 gboolean prefs_common_unsafe_ssl_certs(void)
1518 {
1519         return prefs_common.unsafe_ssl_certs;
1520 }
1521
1522 gboolean prefs_common_enable_log_standard(void)
1523 {
1524         return prefs_common.enable_log_standard;
1525 }
1526
1527 gboolean prefs_common_enable_log_warning(void)
1528 {
1529         return prefs_common.enable_log_warning;
1530 }
1531 gboolean prefs_common_enable_log_error(void)
1532 {
1533         return prefs_common.enable_log_error;
1534 }
1535 gboolean prefs_common_enable_log_status(void)
1536 {
1537         return prefs_common.enable_log_status;
1538 }
1539
1540 #ifdef MAEMO
1541 const gchar *prefs_common_get_data_root(void)
1542 {
1543         if (prefs_common.data_root && *prefs_common.data_root)
1544                 return prefs_common.data_root;
1545         else
1546                 return NULL;
1547 }
1548 #endif
1549 /**
1550    return the translated name of a header, if the translate_header option is
1551    set, otherwise return the untranslated header name (header_name itself).
1552    this function is provided for convenience, it's an interface to
1553    prefs_common.trans_hdr.
1554    works with header names either with or without trailing colon, provided
1555    that gettext found such header name in the sources (they should all be
1556    found in src/gtk/headers.h anyway).
1557 */
1558 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1559 {
1560         if (header_name == NULL || *header_name == '\0')
1561                 return header_name;
1562
1563         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1564 }
1565
1566 const gchar *prefs_common_get_uri_cmd(void)
1567 {
1568 #ifdef G_OS_WIN32
1569         return NULL;
1570 #else
1571         gchar *tmp = NULL;
1572         
1573         if (!prefs_common.cmds_use_system_default)
1574                 return prefs_common.uri_cmd;
1575         
1576         tmp = g_find_program_in_path("xdg-open");
1577         if (!tmp) 
1578                 return prefs_common.uri_cmd;
1579         
1580         g_free(tmp);
1581         return "xdg-open %s";
1582 #endif
1583 }
1584
1585 const gchar *prefs_common_get_ext_editor_cmd(void)
1586 {
1587         return prefs_common.ext_editor_cmd;
1588 #if 0 /* we should do that, but it detaches the editor and breaks
1589          compose.c's external composition. */
1590         gchar *tmp = NULL;
1591         
1592         if (!prefs_common.cmds_use_system_default)
1593                 return prefs_common.ext_editor_cmd;
1594         
1595         tmp = g_find_program_in_path("xdg-open");
1596         if (!tmp) 
1597                 return prefs_common.ext_editor_cmd;
1598         
1599         g_free(tmp);
1600         return "xdg-open %s";
1601 #endif 
1602 }
1603
1604 gboolean prefs_common_get_use_shred(void)
1605 {
1606         return prefs_common.use_shred;
1607 }
1608
1609 gboolean prefs_common_get_flush_metadata (void)
1610 {
1611         return prefs_common.flush_metadata;
1612 }
1613
1614 PrefsCommon *prefs_common_get_prefs(void)
1615 {
1616         return &prefs_common;
1617 }