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