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