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