2 * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2016 Hiroyuki Yamamoto and the Claws Mail team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 /* alfons - all folder item specific settings should migrate into
20 * folderlist.xml!!! the old folderitemrc file will only serve for a few
21 * versions (for compatibility) */
25 #include "claws-features.h"
31 #include <glib/gi18n.h>
33 #include "alertpanel.h"
34 #include "prefs_folder_item.h"
35 #include "folderview.h"
37 #include "summaryview.h"
40 #include "prefs_gtk.h"
41 #include "manage_window.h"
43 #include "addr_compl.h"
44 #include "prefs_common.h"
46 #include "filtering.h"
47 #include "folder_item_prefs.h"
48 #include "gtk/colorsel.h"
49 #include "string_match.h"
50 #include "quote_fmt.h"
52 #include "stock_pixmap.h"
55 #include "gtkaspell.h"
58 #define ASSIGN_STRING(string, value) \
64 typedef struct _FolderItemGeneralPage FolderItemGeneralPage
;
65 typedef struct _FolderItemComposePage FolderItemComposePage
;
66 typedef struct _FolderItemTemplatesPage FolderItemTemplatesPage
;
67 static gboolean can_save
= TRUE
;
69 struct _FolderItemGeneralPage
76 GtkWidget
*no_save_warning
;
77 GtkWidget
*folder_type
;
78 GtkWidget
*checkbtn_simplify_subject
;
79 GtkWidget
*entry_simplify_subject
;
80 GtkWidget
*entry_regexp_test_string
;
81 GtkWidget
*entry_regexp_test_result
;
82 GtkWidget
*checkbtn_folder_chmod
;
83 GtkWidget
*entry_folder_chmod
;
84 GtkWidget
*folder_color_btn
;
85 GtkWidget
*checkbtn_enable_processing
;
86 GtkWidget
*checkbtn_enable_processing_when_opening
;
87 GtkWidget
*checkbtn_newmailcheck
;
88 GtkWidget
*checkbtn_offlinesync
;
89 GtkWidget
*label_offlinesync
;
90 GtkWidget
*entry_offlinesync
;
91 GtkWidget
*label_end_offlinesync
;
92 GtkWidget
*checkbtn_remove_old_offlinesync
;
93 GtkWidget
*promote_html_part
;
95 /* apply to sub folders */
96 GtkWidget
*simplify_subject_rec_checkbtn
;
97 GtkWidget
*folder_chmod_rec_checkbtn
;
98 GtkWidget
*folder_color_rec_checkbtn
;
99 GtkWidget
*enable_processing_rec_checkbtn
;
100 GtkWidget
*enable_processing_when_opening_rec_checkbtn
;
101 GtkWidget
*newmailcheck_rec_checkbtn
;
102 GtkWidget
*offlinesync_rec_checkbtn
;
103 GtkWidget
*promote_html_part_rec_checkbtn
;
108 struct _FolderItemComposePage
116 GtkWidget
*no_save_warning
;
117 GtkWidget
*checkbtn_request_return_receipt
;
118 GtkWidget
*checkbtn_save_copy_to_folder
;
119 GtkWidget
*checkbtn_default_to
;
120 GtkWidget
*entry_default_to
;
121 GtkWidget
*checkbtn_default_reply_to
;
122 GtkWidget
*entry_default_reply_to
;
123 GtkWidget
*checkbtn_default_cc
;
124 GtkWidget
*entry_default_cc
;
125 GtkWidget
*checkbtn_default_bcc
;
126 GtkWidget
*entry_default_bcc
;
127 GtkWidget
*checkbtn_default_replyto
;
128 GtkWidget
*entry_default_replyto
;
129 GtkWidget
*checkbtn_enable_default_account
;
130 GtkWidget
*optmenu_default_account
;
132 GtkWidget
*checkbtn_enable_default_dictionary
;
133 GtkWidget
*checkbtn_enable_default_alt_dictionary
;
134 GtkWidget
*combo_default_dictionary
;
135 GtkWidget
*combo_default_alt_dictionary
;
137 GtkWidget
*always_sign
;
138 GtkWidget
*always_encrypt
;
140 /* apply to sub folders */
141 GtkWidget
*request_return_receipt_rec_checkbtn
;
142 GtkWidget
*save_copy_to_folder_rec_checkbtn
;
143 GtkWidget
*default_to_rec_checkbtn
;
144 GtkWidget
*default_reply_to_rec_checkbtn
;
145 GtkWidget
*default_cc_rec_checkbtn
;
146 GtkWidget
*default_bcc_rec_checkbtn
;
147 GtkWidget
*default_replyto_rec_checkbtn
;
148 GtkWidget
*default_account_rec_checkbtn
;
150 GtkWidget
*default_dictionary_rec_checkbtn
;
151 GtkWidget
*default_alt_dictionary_rec_checkbtn
;
153 GtkWidget
*always_sign_rec_checkbtn
;
154 GtkWidget
*always_encrypt_rec_checkbtn
;
157 struct _FolderItemTemplatesPage
165 GtkWidget
*checkbtn_compose_with_format
;
166 GtkWidget
*compose_override_from_format
;
167 GtkWidget
*compose_subject_format
;
168 GtkWidget
*compose_body_format
;
169 GtkWidget
*checkbtn_reply_with_format
;
170 GtkWidget
*reply_quotemark
;
171 GtkWidget
*reply_override_from_format
;
172 GtkWidget
*reply_body_format
;
173 GtkWidget
*checkbtn_forward_with_format
;
174 GtkWidget
*forward_quotemark
;
175 GtkWidget
*forward_override_from_format
;
176 GtkWidget
*forward_body_format
;
178 /* apply to sub folders */
179 GtkWidget
*new_msg_format_rec_checkbtn
;
180 GtkWidget
*reply_format_rec_checkbtn
;
181 GtkWidget
*forward_format_rec_checkbtn
;
185 static void general_save_folder_prefs(FolderItem
*folder
, FolderItemGeneralPage
*page
);
186 static void compose_save_folder_prefs(FolderItem
*folder
, FolderItemComposePage
*page
);
187 static void templates_save_folder_prefs(FolderItem
*folder
, FolderItemTemplatesPage
*page
);
189 static gboolean
general_save_recurse_func(GNode
*node
, gpointer data
);
190 static gboolean
compose_save_recurse_func(GNode
*node
, gpointer data
);
191 static gboolean
templates_save_recurse_func(GNode
*node
, gpointer data
);
193 static gint
prefs_folder_item_chmod_mode (gchar
*folder_chmod
);
195 static void folder_color_set_dialog(GtkWidget
*widget
, gpointer data
);
196 static void clean_cache_cb(GtkWidget
*widget
, gpointer data
);
197 static void folder_regexp_test_cb(GtkWidget
*widget
, gpointer data
);
198 static void folder_regexp_set_subject_example_cb(GtkWidget
*widget
, gpointer data
);
200 #define SAFE_STRING(str) \
203 static GtkWidget
*prefs_folder_no_save_warning_create_widget() {
208 hbox
= gtk_hbox_new(FALSE
, 0);
210 icon
= stock_pixmap_widget(STOCK_PIXMAP_NOTICE_WARN
);
211 gtk_box_pack_start(GTK_BOX(hbox
), icon
, FALSE
, FALSE
, 8);
213 label
= gtk_label_new(g_strconcat("<i>",
214 _("These preferences will not be saved as this folder "
215 "is a top-level folder.\nHowever, you can set them for the "
216 "whole mailbox tree by using \"Apply to subfolders\"."),
218 gtk_label_set_use_markup(GTK_LABEL(label
), TRUE
);
219 gtk_misc_set_alignment(GTK_MISC(label
), 0.0, 0.5);
220 gtk_box_pack_start(GTK_BOX(hbox
), label
, TRUE
, TRUE
, 0);
225 static void prefs_folder_item_general_create_widget_func(PrefsPage
* page_
,
229 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) page_
;
230 FolderItem
*item
= (FolderItem
*) data
;
234 GtkWidget
*hbox
, *hbox2
, *hbox_spc
;
237 GtkListStore
*folder_type_menu
;
238 GtkWidget
*folder_type
;
240 GtkWidget
*dummy_checkbtn
, *clean_cache_btn
;
241 SpecialFolderItemType type
;
242 GtkWidget
*no_save_warning
= NULL
;
244 GtkWidget
*checkbtn_simplify_subject
;
245 GtkWidget
*entry_simplify_subject
;
246 GtkWidget
*label_regexp_test
;
247 GtkWidget
*entry_regexp_test_string
;
248 GtkWidget
*label_regexp_result
;
249 GtkWidget
*entry_regexp_test_result
;
251 GtkWidget
*checkbtn_folder_chmod
;
252 GtkWidget
*entry_folder_chmod
;
253 GtkWidget
*folder_color
;
254 GtkWidget
*folder_color_btn
;
255 GtkWidget
*checkbtn_enable_processing
;
256 GtkWidget
*checkbtn_enable_processing_when_opening
;
257 GtkWidget
*checkbtn_newmailcheck
;
258 GtkWidget
*checkbtn_offlinesync
;
259 GtkWidget
*label_offlinesync
;
260 GtkWidget
*entry_offlinesync
;
261 GtkWidget
*label_end_offlinesync
;
262 GtkWidget
*checkbtn_remove_old_offlinesync
;
263 GtkWidget
*promote_html_part
;
264 GtkListStore
*promote_html_part_menu
;
266 GtkWidget
*simplify_subject_rec_checkbtn
;
268 GtkWidget
*folder_chmod_rec_checkbtn
;
269 GtkWidget
*folder_color_rec_checkbtn
;
270 GtkWidget
*enable_processing_rec_checkbtn
;
271 GtkWidget
*enable_processing_when_opening_rec_checkbtn
;
272 GtkWidget
*newmailcheck_rec_checkbtn
;
273 GtkWidget
*offlinesync_rec_checkbtn
;
274 GtkWidget
*promote_html_part_rec_checkbtn
;
279 table
= gtk_table_new(12, 3, FALSE
);
280 gtk_container_set_border_width (GTK_CONTAINER (table
), VBOX_BORDER
);
281 gtk_table_set_row_spacings(GTK_TABLE(table
), 4);
282 gtk_table_set_col_spacings(GTK_TABLE(table
), 4);
286 no_save_warning
= prefs_folder_no_save_warning_create_widget();
287 gtk_table_attach(GTK_TABLE(table
), no_save_warning
, 0, 3,
288 rowcount
, rowcount
+ 1, GTK_FILL
, 0, 0, 0);
292 /* Apply to subfolders */
293 label
= gtk_label_new(_("Apply to\nsubfolders"));
294 gtk_misc_set_alignment(GTK_MISC(label
), 0.5, 0.5);
295 gtk_table_attach(GTK_TABLE(table
), label
, 2, 3,
296 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
300 folder_type
= gtkut_sc_combobox_create(NULL
, FALSE
);
301 gtk_widget_show (folder_type
);
304 if (item
->stype
== F_INBOX
)
306 else if (folder_has_parent_of_type(item
, F_OUTBOX
))
308 else if (folder_has_parent_of_type(item
, F_DRAFT
))
310 else if (folder_has_parent_of_type(item
, F_QUEUE
))
312 else if (folder_has_parent_of_type(item
, F_TRASH
))
315 folder_type_menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
316 GTK_COMBO_BOX(folder_type
)));
318 COMBOBOX_ADD (folder_type_menu
, _("Normal"), F_NORMAL
);
319 COMBOBOX_ADD (folder_type_menu
, _("Inbox"), F_INBOX
);
320 COMBOBOX_ADD (folder_type_menu
, _("Outbox"), F_OUTBOX
);
321 COMBOBOX_ADD (folder_type_menu
, _("Drafts"), F_DRAFT
);
322 COMBOBOX_ADD (folder_type_menu
, _("Queue"), F_QUEUE
);
323 COMBOBOX_ADD (folder_type_menu
, _("Trash"), F_TRASH
);
325 combobox_select_by_data(GTK_COMBO_BOX(folder_type
), type
);
327 dummy_checkbtn
= gtk_check_button_new();
328 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dummy_checkbtn
), type
!= F_INBOX
);
329 gtk_widget_set_sensitive(dummy_checkbtn
, FALSE
);
331 if (type
== item
->stype
&& type
== F_NORMAL
)
332 gtk_widget_set_sensitive(folder_type
, TRUE
);
334 gtk_widget_set_sensitive(folder_type
, FALSE
);
336 label
= gtk_label_new(_("Folder type"));
337 gtk_misc_set_alignment(GTK_MISC(label
), 0, 0.5);
338 gtk_table_attach(GTK_TABLE(table
), label
, 0, 1,
339 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
340 gtk_table_attach(GTK_TABLE(table
), folder_type
, 1, 2,
341 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
342 gtk_table_attach(GTK_TABLE(table
), dummy_checkbtn
, 2, 3,
343 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
347 /* Simplify Subject */
348 checkbtn_simplify_subject
= gtk_check_button_new_with_label(_("Simplify Subject RegExp"));
349 gtk_table_attach(GTK_TABLE(table
), checkbtn_simplify_subject
, 0, 1,
350 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
351 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_simplify_subject
),
352 item
->prefs
->enable_simplify_subject
);
354 g_signal_connect(G_OBJECT(checkbtn_simplify_subject
), "toggled",
355 G_CALLBACK(folder_regexp_set_subject_example_cb
), page
);
357 entry_simplify_subject
= gtk_entry_new();
358 gtk_table_attach(GTK_TABLE(table
), entry_simplify_subject
, 1, 2,
359 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
360 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_simplify_subject
);
361 gtk_entry_set_text(GTK_ENTRY(entry_simplify_subject
),
362 SAFE_STRING(item
->prefs
->simplify_subject_regexp
));
364 g_signal_connect(G_OBJECT(entry_simplify_subject
), "changed",
365 G_CALLBACK(folder_regexp_test_cb
), page
);
367 simplify_subject_rec_checkbtn
= gtk_check_button_new();
368 gtk_table_attach(GTK_TABLE(table
), simplify_subject_rec_checkbtn
, 2, 3,
369 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
374 label_regexp_test
= gtk_label_new(_("Test string"));
375 gtk_misc_set_alignment(GTK_MISC(label_regexp_test
), 1, 0.5);
376 gtk_table_attach(GTK_TABLE(table
), label_regexp_test
, 0, 1,
377 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
378 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, label_regexp_test
);
380 entry_regexp_test_string
= gtk_entry_new();
381 gtk_table_attach(GTK_TABLE(table
), entry_regexp_test_string
, 1, 2,
382 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
383 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_regexp_test_string
);
385 g_signal_connect(G_OBJECT(entry_regexp_test_string
), "changed",
386 G_CALLBACK(folder_regexp_test_cb
), page
);
391 label_regexp_result
= gtk_label_new(_("Result"));
392 gtk_misc_set_alignment(GTK_MISC(label_regexp_result
), 1, 0.5);
393 gtk_table_attach(GTK_TABLE(table
), label_regexp_result
, 0, 1,
394 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
395 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, label_regexp_result
);
397 entry_regexp_test_result
= gtk_entry_new();
398 gtk_table_attach(GTK_TABLE(table
), entry_regexp_test_result
, 1, 2,
399 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
400 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_regexp_test_result
);
401 gtk_editable_set_editable(GTK_EDITABLE(entry_regexp_test_result
), FALSE
);
406 checkbtn_folder_chmod
= gtk_check_button_new_with_label(_("Folder chmod"));
407 gtk_table_attach(GTK_TABLE(table
), checkbtn_folder_chmod
, 0, 1,
408 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
410 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_chmod
),
411 item
->prefs
->enable_folder_chmod
);
413 entry_folder_chmod
= gtk_entry_new();
414 gtk_table_attach(GTK_TABLE(table
), entry_folder_chmod
, 1, 2,
415 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
416 SET_TOGGLE_SENSITIVITY(checkbtn_folder_chmod
, entry_folder_chmod
);
417 if (item
->prefs
->folder_chmod
) {
420 buf
= g_strdup_printf("%o", item
->prefs
->folder_chmod
);
421 gtk_entry_set_text(GTK_ENTRY(entry_folder_chmod
), buf
);
425 folder_chmod_rec_checkbtn
= gtk_check_button_new();
426 gtk_table_attach(GTK_TABLE(table
), folder_chmod_rec_checkbtn
, 2, 3,
427 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
432 folder_color
= gtk_label_new(_("Folder color"));
433 gtk_misc_set_alignment(GTK_MISC(folder_color
), 0, 0.5);
434 gtk_table_attach(GTK_TABLE(table
), folder_color
, 0, 1,
435 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
437 hbox
= gtk_hbox_new(FALSE
, 0);
438 gtk_table_attach(GTK_TABLE(table
), hbox
, 1, 2,
439 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
441 folder_color_btn
= GTKUT_COLOR_BUTTON();
442 gtk_box_pack_start (GTK_BOX(hbox
), folder_color_btn
, FALSE
, FALSE
, 0);
443 CLAWS_SET_TIP(folder_color_btn
,
444 _("Pick color for folder"));
446 page
->folder_color
= item
->prefs
->color
;
448 g_signal_connect(G_OBJECT(folder_color_btn
), "clicked",
449 G_CALLBACK(folder_color_set_dialog
),
452 gtkut_set_widget_bgcolor_rgb(folder_color_btn
, item
->prefs
->color
);
454 folder_color_rec_checkbtn
= gtk_check_button_new();
455 gtk_table_attach(GTK_TABLE(table
), folder_color_rec_checkbtn
, 2, 3,
456 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
460 /* Enable processing at startup */
461 checkbtn_enable_processing
=
462 gtk_check_button_new_with_label(_("Run Processing rules at start-up"));
463 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_processing
, 0, 2,
464 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
466 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_processing
),
467 item
->prefs
->enable_processing
);
469 enable_processing_rec_checkbtn
= gtk_check_button_new();
470 gtk_table_attach(GTK_TABLE(table
), enable_processing_rec_checkbtn
, 2, 3,
471 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
475 /* Enable processing rules when opening folder */
476 checkbtn_enable_processing_when_opening
=
477 gtk_check_button_new_with_label(_("Run Processing rules when opening"));
478 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_processing_when_opening
, 0, 2,
479 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
481 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_processing_when_opening
),
482 item
->prefs
->enable_processing_when_opening
);
484 enable_processing_when_opening_rec_checkbtn
= gtk_check_button_new();
485 gtk_table_attach(GTK_TABLE(table
), enable_processing_when_opening_rec_checkbtn
, 2, 3,
486 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
490 /* Check folder for new mail */
491 checkbtn_newmailcheck
= gtk_check_button_new_with_label(_("Scan for new mail"));
492 CLAWS_SET_TIP(checkbtn_newmailcheck
,
493 _("Turn this option on if mail is delivered directly "
494 "to this folder by server side filtering on IMAP or "
495 "by an external application"));
496 gtk_table_attach(GTK_TABLE(table
), checkbtn_newmailcheck
, 0, 2,
497 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
499 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmailcheck
),
500 item
->prefs
->newmailcheck
);
501 newmailcheck_rec_checkbtn
= gtk_check_button_new();
502 gtk_table_attach(GTK_TABLE(table
), newmailcheck_rec_checkbtn
, 2, 3,
503 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
507 /* Select HTML part by default? */
508 hbox
= gtk_hbox_new (FALSE
, 2);
509 gtk_widget_show (hbox
);
510 gtk_table_attach (GTK_TABLE(table
), hbox
, 0, 2,
511 rowcount
, rowcount
+1, GTK_FILL
, GTK_FILL
, 0, 0);
513 label
= gtk_label_new(_("Select the HTML part of multipart messages"));
514 gtk_widget_show (label
);
515 gtk_box_pack_start (GTK_BOX(hbox
), label
, FALSE
, FALSE
, 0);
517 promote_html_part
= gtkut_sc_combobox_create (NULL
, FALSE
);
518 gtk_widget_show (promote_html_part
);
519 gtk_box_pack_start (GTK_BOX(hbox
), promote_html_part
, FALSE
, FALSE
, 0);
521 promote_html_part_menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
522 GTK_COMBO_BOX(promote_html_part
)));
523 COMBOBOX_ADD (promote_html_part_menu
, _("Default"), HTML_PROMOTE_DEFAULT
);
524 COMBOBOX_ADD (promote_html_part_menu
, _("No"), HTML_PROMOTE_NEVER
);
525 COMBOBOX_ADD (promote_html_part_menu
, _("Yes"), HTML_PROMOTE_ALWAYS
);
527 combobox_select_by_data(GTK_COMBO_BOX(promote_html_part
),
528 item
->prefs
->promote_html_part
);
530 CLAWS_SET_TIP(hbox
, _("\"Default\" will follow global preference (found in /Preferences/"
531 "Message View/Text Options)"));
533 promote_html_part_rec_checkbtn
= gtk_check_button_new();
534 gtk_widget_show (promote_html_part_rec_checkbtn
);
535 gtk_table_attach(GTK_TABLE(table
), promote_html_part_rec_checkbtn
, 2, 3,
536 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
539 /* Synchronise folder for offline use */
540 checkbtn_offlinesync
= gtk_check_button_new_with_label(_("Synchronise for offline use"));
541 gtk_table_attach(GTK_TABLE(table
), checkbtn_offlinesync
, 0, 2,
542 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
544 offlinesync_rec_checkbtn
= gtk_check_button_new();
545 gtk_table_attach(GTK_TABLE(table
), offlinesync_rec_checkbtn
, 2, 3,
546 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
550 hbox
= gtk_hbox_new (FALSE
, 8);
551 gtk_widget_show (hbox
);
552 gtk_table_attach(GTK_TABLE(table
), hbox
, 0, 3,
553 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
556 hbox_spc
= gtk_hbox_new (FALSE
, 0);
557 gtk_widget_show (hbox_spc
);
558 gtk_box_pack_start (GTK_BOX (hbox
), hbox_spc
, FALSE
, FALSE
, 0);
559 gtk_widget_set_size_request (hbox_spc
, 12, -1);
561 label_offlinesync
= gtk_label_new(_("Fetch message bodies from the last"));
562 gtk_widget_show (label_offlinesync
);
563 gtk_box_pack_start (GTK_BOX (hbox
), label_offlinesync
, FALSE
, FALSE
, 0);
565 entry_offlinesync
= gtk_entry_new();
566 gtk_widget_set_size_request (entry_offlinesync
, 64, -1);
567 gtk_widget_show (entry_offlinesync
);
568 CLAWS_SET_TIP(entry_offlinesync
, _("0: all bodies"));
569 gtk_box_pack_start (GTK_BOX (hbox
), entry_offlinesync
, FALSE
, FALSE
, 0);
571 label_end_offlinesync
= gtk_label_new(_("days"));
572 gtk_widget_show (label_end_offlinesync
);
573 gtk_box_pack_start (GTK_BOX (hbox
), label_end_offlinesync
, FALSE
, FALSE
, 0);
575 checkbtn_remove_old_offlinesync
= gtk_check_button_new_with_label(
576 _("Remove older messages bodies"));
578 hbox2
= gtk_hbox_new (FALSE
, 8);
579 gtk_widget_show (hbox2
);
580 gtk_table_attach(GTK_TABLE(table
), hbox2
, 0, 3,
581 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
584 hbox_spc
= gtk_hbox_new (FALSE
, 0);
585 gtk_widget_show (hbox_spc
);
586 gtk_box_pack_start (GTK_BOX (hbox2
), hbox_spc
, FALSE
, FALSE
, 0);
587 gtk_widget_set_size_request (hbox_spc
, 12, -1);
588 gtk_box_pack_start (GTK_BOX (hbox2
), checkbtn_remove_old_offlinesync
, FALSE
, FALSE
, 0);
590 SET_TOGGLE_SENSITIVITY (checkbtn_offlinesync
, hbox
);
591 SET_TOGGLE_SENSITIVITY (checkbtn_offlinesync
, hbox2
);
593 clean_cache_btn
= gtk_button_new_with_label(_("Discard folder cache"));
594 gtk_widget_show (clean_cache_btn
);
595 gtk_table_attach(GTK_TABLE(table
), clean_cache_btn
, 0, 1,
596 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
597 g_signal_connect(G_OBJECT(clean_cache_btn
), "clicked",
598 G_CALLBACK(clean_cache_cb
),
601 gtk_widget_show_all(table
);
603 if (item
->folder
&& (item
->folder
->klass
->type
!= F_IMAP
&&
604 item
->folder
->klass
->type
!= F_NEWS
)) {
605 item
->prefs
->offlinesync
= TRUE
;
606 item
->prefs
->offlinesync_days
= 0;
607 item
->prefs
->remove_old_bodies
= FALSE
;
609 gtk_widget_set_sensitive(GTK_WIDGET(checkbtn_offlinesync
),
611 gtk_widget_set_sensitive(GTK_WIDGET(offlinesync_rec_checkbtn
),
613 gtk_widget_hide(GTK_WIDGET(checkbtn_offlinesync
));
614 gtk_widget_hide(GTK_WIDGET(hbox
));
615 gtk_widget_hide(GTK_WIDGET(hbox2
));
616 gtk_widget_hide(GTK_WIDGET(offlinesync_rec_checkbtn
));
617 gtk_widget_hide(GTK_WIDGET(clean_cache_btn
));
620 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_offlinesync
),
621 item
->prefs
->offlinesync
);
622 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_remove_old_offlinesync
),
623 item
->prefs
->remove_old_bodies
);
624 gtk_entry_set_text(GTK_ENTRY(entry_offlinesync
), itos(item
->prefs
->offlinesync_days
));
627 page
->folder_type
= folder_type
;
628 page
->no_save_warning
= no_save_warning
;
630 page
->checkbtn_simplify_subject
= checkbtn_simplify_subject
;
631 page
->entry_simplify_subject
= entry_simplify_subject
;
632 page
->entry_regexp_test_string
= entry_regexp_test_string
;
633 page
->entry_regexp_test_result
= entry_regexp_test_result
;
635 page
->checkbtn_folder_chmod
= checkbtn_folder_chmod
;
636 page
->entry_folder_chmod
= entry_folder_chmod
;
637 page
->folder_color_btn
= folder_color_btn
;
638 page
->checkbtn_enable_processing
= checkbtn_enable_processing
;
639 page
->checkbtn_enable_processing_when_opening
= checkbtn_enable_processing_when_opening
;
640 page
->checkbtn_newmailcheck
= checkbtn_newmailcheck
;
641 page
->checkbtn_offlinesync
= checkbtn_offlinesync
;
642 page
->label_offlinesync
= label_offlinesync
;
643 page
->entry_offlinesync
= entry_offlinesync
;
644 page
->label_end_offlinesync
= label_end_offlinesync
;
645 page
->checkbtn_remove_old_offlinesync
= checkbtn_remove_old_offlinesync
;
646 page
->promote_html_part
= promote_html_part
;
649 page
->simplify_subject_rec_checkbtn
= simplify_subject_rec_checkbtn
;
651 page
->folder_chmod_rec_checkbtn
= folder_chmod_rec_checkbtn
;
652 page
->folder_color_rec_checkbtn
= folder_color_rec_checkbtn
;
653 page
->enable_processing_rec_checkbtn
= enable_processing_rec_checkbtn
;
654 page
->enable_processing_when_opening_rec_checkbtn
= enable_processing_when_opening_rec_checkbtn
;
655 page
->newmailcheck_rec_checkbtn
= newmailcheck_rec_checkbtn
;
656 page
->offlinesync_rec_checkbtn
= offlinesync_rec_checkbtn
;
657 page
->promote_html_part_rec_checkbtn
= promote_html_part_rec_checkbtn
;
659 page
->page
.widget
= table
;
661 folder_regexp_set_subject_example_cb(NULL
, page
);
664 static void prefs_folder_item_general_destroy_widget_func(PrefsPage
*page_
)
666 /* FolderItemGeneralPage *page = (FolderItemGeneralPage *) page_; */
669 /** \brief Save the prefs in page to folder.
671 * If the folder is not the one specified in page->item, then only those properties
672 * that have the relevant 'apply to sub folders' button checked are saved
674 static void general_save_folder_prefs(FolderItem
*folder
, FolderItemGeneralPage
*page
)
676 FolderItemPrefs
*prefs
= folder
->prefs
;
678 gboolean all
= FALSE
, summary_update_needed
= FALSE
;
679 SpecialFolderItemType type
= F_NORMAL
;
680 FolderView
*folderview
= mainwindow_get_mainwindow()->folderview
;
681 HTMLPromoteType promote_html_part
= HTML_PROMOTE_DEFAULT
;
683 if (folder
->path
== NULL
)
686 cm_return_if_fail(prefs
!= NULL
);
688 if (page
->item
== folder
)
691 type
= combobox_get_active_data(GTK_COMBO_BOX(page
->folder_type
));
692 if (all
&& folder
->stype
!= type
&& page
->item
->parent_stype
== F_NORMAL
) {
693 folder_item_change_type(folder
, type
);
694 summary_update_needed
= TRUE
;
698 combobox_get_active_data(GTK_COMBO_BOX(page
->promote_html_part
));
699 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->promote_html_part_rec_checkbtn
)))
700 prefs
->promote_html_part
= promote_html_part
;
702 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->simplify_subject_rec_checkbtn
))) {
703 gboolean old_simplify_subject
= prefs
->enable_simplify_subject
;
704 int regexp_diffs
= g_strcmp0(prefs
->simplify_subject_regexp
, gtk_editable_get_chars(
705 GTK_EDITABLE(page
->entry_simplify_subject
), 0, -1));
706 prefs
->enable_simplify_subject
=
707 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_simplify_subject
));
708 ASSIGN_STRING(prefs
->simplify_subject_regexp
,
709 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_simplify_subject
), 0, -1));
710 if (old_simplify_subject
!= prefs
->enable_simplify_subject
|| regexp_diffs
!= 0)
711 summary_update_needed
= TRUE
;
714 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_chmod_rec_checkbtn
))) {
715 prefs
->enable_folder_chmod
=
716 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_folder_chmod
));
717 buf
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_folder_chmod
), 0, -1);
718 prefs
->folder_chmod
= prefs_folder_item_chmod_mode(buf
);
722 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_color_rec_checkbtn
))) {
723 int old_color
= prefs
->color
;
724 prefs
->color
= page
->folder_color
;
726 /* update folder view */
727 if (prefs
->color
!= old_color
)
728 folder_item_update(folder
, F_ITEM_UPDATE_MSGCNT
);
731 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_rec_checkbtn
))) {
732 prefs
->enable_processing
=
733 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_processing
));
736 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_when_opening_rec_checkbtn
))) {
737 prefs
->enable_processing_when_opening
=
738 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_processing_when_opening
));
741 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->newmailcheck_rec_checkbtn
))) {
742 prefs
->newmailcheck
=
743 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_newmailcheck
));
746 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->offlinesync_rec_checkbtn
))) {
748 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_offlinesync
));
749 prefs
->offlinesync_days
=
750 atoi(gtk_entry_get_text(GTK_ENTRY(page
->entry_offlinesync
)));
751 prefs
->remove_old_bodies
=
752 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_remove_old_offlinesync
));
755 folder_item_prefs_save_config(folder
);
757 if (folder
->opened
&& summary_update_needed
) {
758 summary_set_prefs_from_folderitem(folderview
->summaryview
, folder
);
759 summary_show(folderview
->summaryview
, folder
, FALSE
);
763 static gboolean
general_save_recurse_func(GNode
*node
, gpointer data
)
765 FolderItem
*item
= (FolderItem
*) node
->data
;
766 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) data
;
768 cm_return_val_if_fail(item
!= NULL
, TRUE
);
769 cm_return_val_if_fail(page
!= NULL
, TRUE
);
771 general_save_folder_prefs(item
, page
);
773 /* optimise by not continuing if none of the 'apply to sub folders'
774 check boxes are selected - and optimise the checking by only doing
776 if ((node
== page
->item
->node
) &&
778 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->simplify_subject_rec_checkbtn
)) ||
779 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_chmod_rec_checkbtn
)) ||
780 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_color_rec_checkbtn
)) ||
781 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_rec_checkbtn
)) ||
782 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_when_opening_rec_checkbtn
)) ||
783 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->newmailcheck_rec_checkbtn
)) ||
784 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->offlinesync_rec_checkbtn
)) ||
785 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->promote_html_part_rec_checkbtn
))
792 static void prefs_folder_item_general_save_func(PrefsPage
*page_
)
794 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) page_
;
796 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
797 -1, general_save_recurse_func
, page
);
799 main_window_set_menu_sensitive(mainwindow_get_mainwindow());
803 static RecvProtocol
item_protocol(FolderItem
*item
)
809 if (!item
->folder
->account
)
811 return item
->folder
->account
->protocol
;
814 static void prefs_folder_item_compose_create_widget_func(PrefsPage
* page_
,
818 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
819 FolderItem
*item
= (FolderItem
*) data
;
828 GtkWidget
*no_save_warning
= NULL
;
829 GtkWidget
*checkbtn_request_return_receipt
= NULL
;
830 GtkWidget
*checkbtn_save_copy_to_folder
= NULL
;
831 GtkWidget
*checkbtn_default_to
= NULL
;
832 GtkWidget
*entry_default_to
= NULL
;
833 GtkWidget
*checkbtn_default_reply_to
= NULL
;
834 GtkWidget
*entry_default_reply_to
= NULL
;
835 GtkWidget
*checkbtn_default_cc
= NULL
;
836 GtkWidget
*entry_default_cc
= NULL
;
837 GtkWidget
*checkbtn_default_bcc
= NULL
;
838 GtkWidget
*entry_default_bcc
= NULL
;
839 GtkWidget
*checkbtn_default_replyto
= NULL
;
840 GtkWidget
*entry_default_replyto
= NULL
;
841 GtkWidget
*checkbtn_enable_default_account
= NULL
;
842 GtkWidget
*optmenu_default_account
= NULL
;
843 GtkListStore
*optmenu_default_account_menu
= NULL
;
846 GtkWidget
*checkbtn_enable_default_dictionary
= NULL
;
847 GtkWidget
*combo_default_dictionary
= NULL
;
848 GtkWidget
*checkbtn_enable_default_alt_dictionary
= NULL
;
849 GtkWidget
*combo_default_alt_dictionary
= NULL
;
850 GtkWidget
*default_dictionary_rec_checkbtn
= NULL
;
851 GtkWidget
*default_alt_dictionary_rec_checkbtn
= NULL
;
854 GtkWidget
*always_sign
;
855 GtkListStore
*always_sign_menu
;
856 GtkWidget
*always_encrypt
;
857 GtkListStore
*always_encrypt_menu
;
858 GtkWidget
*request_return_receipt_rec_checkbtn
= NULL
;
859 GtkWidget
*save_copy_to_folder_rec_checkbtn
= NULL
;
860 GtkWidget
*default_to_rec_checkbtn
= NULL
;
861 GtkWidget
*default_reply_to_rec_checkbtn
= NULL
;
862 GtkWidget
*default_cc_rec_checkbtn
= NULL
;
863 GtkWidget
*default_bcc_rec_checkbtn
= NULL
;
864 GtkWidget
*default_replyto_rec_checkbtn
= NULL
;
865 GtkWidget
*default_account_rec_checkbtn
= NULL
;
866 GtkWidget
*always_sign_rec_checkbtn
= NULL
;
867 GtkWidget
*always_encrypt_rec_checkbtn
= NULL
;
871 PrefsAccount
*ac_prefs
;
872 gboolean default_account_set
= FALSE
;
878 # define TABLEHEIGHT 7
880 # define TABLEHEIGHT 6
882 table
= gtk_table_new(TABLEHEIGHT
, 3, FALSE
);
883 gtk_container_set_border_width (GTK_CONTAINER (table
), VBOX_BORDER
);
884 gtk_table_set_row_spacings(GTK_TABLE(table
), 4);
885 gtk_table_set_col_spacings(GTK_TABLE(table
), 4);
889 no_save_warning
= prefs_folder_no_save_warning_create_widget();
890 gtk_table_attach(GTK_TABLE(table
), no_save_warning
, 0, 3,
891 rowcount
, rowcount
+ 1, GTK_FILL
, 0, 0, 0);
895 /* Apply to subfolders */
896 label
= gtk_label_new(_("Apply to\nsubfolders"));
897 gtk_misc_set_alignment(GTK_MISC(label
), 0.5, 0.5);
898 gtk_table_attach(GTK_TABLE(table
), label
, 2, 3,
899 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
902 if (item_protocol(item
) != A_NNTP
) {
903 /* Request Return Receipt */
904 checkbtn_request_return_receipt
= gtk_check_button_new_with_label
905 (_("Request Return Receipt"));
906 gtk_table_attach(GTK_TABLE(table
), checkbtn_request_return_receipt
,
907 0, 2, rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
,
909 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_request_return_receipt
),
910 item
->ret_rcpt
? TRUE
: FALSE
);
912 request_return_receipt_rec_checkbtn
= gtk_check_button_new();
913 gtk_table_attach(GTK_TABLE(table
), request_return_receipt_rec_checkbtn
, 2, 3,
914 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
918 /* Save Copy to Folder */
919 checkbtn_save_copy_to_folder
= gtk_check_button_new_with_label
920 (_("Save copy of outgoing messages to this folder instead of Sent"));
921 gtk_table_attach(GTK_TABLE(table
), checkbtn_save_copy_to_folder
, 0, 2,
922 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
923 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_save_copy_to_folder
),
924 item
->prefs
->save_copy_to_folder
? TRUE
: FALSE
);
926 save_copy_to_folder_rec_checkbtn
= gtk_check_button_new();
927 gtk_table_attach(GTK_TABLE(table
), save_copy_to_folder_rec_checkbtn
, 2, 3,
928 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
933 tr
= g_strdup(C_("folder properties: %s stands for a header name",
935 text
= g_strdup_printf(tr
, prefs_common_translated_header_name("To:"));
936 checkbtn_default_to
= gtk_check_button_new_with_label(text
);
937 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_to
, 0, 1,
938 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
939 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_to
),
940 item
->prefs
->enable_default_to
);
944 entry_default_to
= gtk_entry_new();
945 gtk_table_attach(GTK_TABLE(table
), entry_default_to
, 1, 2,
946 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
947 SET_TOGGLE_SENSITIVITY(checkbtn_default_to
, entry_default_to
);
948 gtk_entry_set_text(GTK_ENTRY(entry_default_to
), SAFE_STRING(item
->prefs
->default_to
));
949 address_completion_register_entry(GTK_ENTRY(entry_default_to
),
952 default_to_rec_checkbtn
= gtk_check_button_new();
953 gtk_table_attach(GTK_TABLE(table
), default_to_rec_checkbtn
, 2, 3,
954 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
958 /* Default address to reply to */
959 tr
= g_strdup(C_("folder properties: %s stands for a header name",
960 "Default %s for replies"));
961 text
= g_strdup_printf(tr
, prefs_common_translated_header_name("To:"));
962 checkbtn_default_reply_to
= gtk_check_button_new_with_label(text
);
963 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_reply_to
, 0, 1,
964 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
965 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_reply_to
),
966 item
->prefs
->enable_default_reply_to
);
970 entry_default_reply_to
= gtk_entry_new();
971 gtk_table_attach(GTK_TABLE(table
), entry_default_reply_to
, 1, 2,
972 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
973 SET_TOGGLE_SENSITIVITY(checkbtn_default_reply_to
, entry_default_reply_to
);
974 gtk_entry_set_text(GTK_ENTRY(entry_default_reply_to
), SAFE_STRING(item
->prefs
->default_reply_to
));
975 address_completion_register_entry(
976 GTK_ENTRY(entry_default_reply_to
), TRUE
);
978 default_reply_to_rec_checkbtn
= gtk_check_button_new();
979 gtk_table_attach(GTK_TABLE(table
), default_reply_to_rec_checkbtn
, 2, 3,
980 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
985 tr
= g_strdup(C_("folder properties: %s stands for a header name",
987 text
= g_strdup_printf(tr
, prefs_common_translated_header_name("Cc:"));
988 checkbtn_default_cc
= gtk_check_button_new_with_label(text
);
989 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_cc
, 0, 1,
990 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
991 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_cc
),
992 item
->prefs
->enable_default_cc
);
996 entry_default_cc
= gtk_entry_new();
997 gtk_table_attach(GTK_TABLE(table
), entry_default_cc
, 1, 2,
998 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
999 SET_TOGGLE_SENSITIVITY(checkbtn_default_cc
, entry_default_cc
);
1000 gtk_entry_set_text(GTK_ENTRY(entry_default_cc
), SAFE_STRING(item
->prefs
->default_cc
));
1001 address_completion_register_entry(GTK_ENTRY(entry_default_cc
),
1004 default_cc_rec_checkbtn
= gtk_check_button_new();
1005 gtk_table_attach(GTK_TABLE(table
), default_cc_rec_checkbtn
, 2, 3,
1006 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1011 tr
= g_strdup(C_("folder properties: %s stands for a header name",
1013 text
= g_strdup_printf(tr
, prefs_common_translated_header_name("Bcc:"));
1014 checkbtn_default_bcc
= gtk_check_button_new_with_label(text
);
1015 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_bcc
, 0, 1,
1016 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1017 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_bcc
),
1018 item
->prefs
->enable_default_bcc
);
1022 entry_default_bcc
= gtk_entry_new();
1023 gtk_table_attach(GTK_TABLE(table
), entry_default_bcc
, 1, 2,
1024 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1025 SET_TOGGLE_SENSITIVITY(checkbtn_default_bcc
, entry_default_bcc
);
1026 gtk_entry_set_text(GTK_ENTRY(entry_default_bcc
), SAFE_STRING(item
->prefs
->default_bcc
));
1027 address_completion_register_entry(GTK_ENTRY(entry_default_bcc
),
1030 default_bcc_rec_checkbtn
= gtk_check_button_new();
1031 gtk_table_attach(GTK_TABLE(table
), default_bcc_rec_checkbtn
, 2, 3,
1032 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1036 /* Default Reply-to */
1037 tr
= g_strdup(C_("folder properties: %s stands for a header name",
1039 text
= g_strdup_printf(tr
, prefs_common_translated_header_name("Reply-To:"));
1040 checkbtn_default_replyto
= gtk_check_button_new_with_label(text
);
1041 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_replyto
, 0, 1,
1042 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1043 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_replyto
),
1044 item
->prefs
->enable_default_replyto
);
1048 entry_default_replyto
= gtk_entry_new();
1049 gtk_table_attach(GTK_TABLE(table
), entry_default_replyto
, 1, 2,
1050 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1051 SET_TOGGLE_SENSITIVITY(checkbtn_default_replyto
, entry_default_replyto
);
1052 gtk_entry_set_text(GTK_ENTRY(entry_default_replyto
), SAFE_STRING(item
->prefs
->default_replyto
));
1053 address_completion_register_entry(GTK_ENTRY(entry_default_replyto
),
1056 default_replyto_rec_checkbtn
= gtk_check_button_new();
1057 gtk_table_attach(GTK_TABLE(table
), default_replyto_rec_checkbtn
, 2, 3,
1058 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1062 /* Default account */
1063 checkbtn_enable_default_account
= gtk_check_button_new_with_label(_("Default account"));
1064 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_account
, 0, 1,
1065 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1066 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_account
),
1067 item
->prefs
->enable_default_account
);
1069 optmenu_default_account
= gtkut_sc_combobox_create(NULL
, FALSE
);
1070 gtk_table_attach(GTK_TABLE(table
), optmenu_default_account
, 1, 2,
1071 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1072 optmenu_default_account_menu
= GTK_LIST_STORE(
1073 gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu_default_account
)));
1075 account_list
= account_get_list();
1076 for (cur_ac
= account_list
; cur_ac
!= NULL
; cur_ac
= cur_ac
->next
) {
1077 ac_prefs
= (PrefsAccount
*)cur_ac
->data
;
1078 if (item
->folder
->account
&&
1079 ( (item_protocol(item
) == A_NNTP
&& ac_prefs
->protocol
!= A_NNTP
)
1080 ||(item_protocol(item
) != A_NNTP
&& ac_prefs
->protocol
== A_NNTP
)))
1083 if (item
->folder
->klass
->type
!= F_NEWS
&& ac_prefs
->protocol
== A_NNTP
)
1086 COMBOBOX_ADD_ESCAPED (optmenu_default_account_menu
,
1087 ac_prefs
->account_name
?ac_prefs
->account_name
: _("Untitled"),
1088 ac_prefs
->account_id
);
1090 /* Set combobox to current default account id */
1091 if (ac_prefs
->account_id
== item
->prefs
->default_account
) {
1092 combobox_select_by_data(GTK_COMBO_BOX(optmenu_default_account
),
1093 ac_prefs
->account_id
);
1094 default_account_set
= TRUE
;
1098 /* If nothing has been set (folder doesn't have a default account set),
1099 * pre-select global default account, since that's what actually used
1100 * anyway. We don't want nothing selected in combobox. */
1101 if( !default_account_set
)
1102 combobox_select_by_data(GTK_COMBO_BOX(optmenu_default_account
),
1103 account_get_default()->account_id
);
1105 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_account
, optmenu_default_account
);
1107 default_account_rec_checkbtn
= gtk_check_button_new();
1108 gtk_table_attach(GTK_TABLE(table
), default_account_rec_checkbtn
, 2, 3,
1109 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1113 /* Default dictionary */
1114 checkbtn_enable_default_dictionary
= gtk_check_button_new_with_label(_("Default dictionary"));
1115 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_dictionary
, 0, 1,
1116 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1117 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_dictionary
),
1118 item
->prefs
->enable_default_dictionary
);
1120 combo_default_dictionary
= gtkaspell_dictionary_combo_new(TRUE
);
1121 gtk_table_attach(GTK_TABLE(table
), combo_default_dictionary
, 1, 2,
1122 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1124 dictionary
= item
->prefs
->default_dictionary
;
1125 if (dictionary
&& strrchr(dictionary
, '/')) {
1126 gchar
*tmp
= g_strdup(strrchr(dictionary
, '/')+1);
1127 g_free(item
->prefs
->default_dictionary
);
1128 item
->prefs
->default_dictionary
= tmp
;
1129 dictionary
= item
->prefs
->default_dictionary
;
1131 if (item
->prefs
->default_dictionary
&&
1132 strchr(item
->prefs
->default_dictionary
, '-')) {
1133 *(strchr(item
->prefs
->default_dictionary
, '-')) = '\0';
1136 gtkaspell_set_dictionary_menu_active_item(
1137 GTK_COMBO_BOX(combo_default_dictionary
), dictionary
);
1139 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_dictionary
, combo_default_dictionary
);
1141 default_dictionary_rec_checkbtn
= gtk_check_button_new();
1142 gtk_table_attach(GTK_TABLE(table
), default_dictionary_rec_checkbtn
, 2, 3,
1143 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1147 /* Default alternate dictionary */
1148 checkbtn_enable_default_alt_dictionary
= gtk_check_button_new_with_label(_("Default alternate dictionary"));
1149 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_alt_dictionary
, 0, 1,
1150 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1151 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_alt_dictionary
),
1152 item
->prefs
->enable_default_alt_dictionary
);
1154 combo_default_alt_dictionary
= gtkaspell_dictionary_combo_new(FALSE
);
1155 gtk_table_attach(GTK_TABLE(table
), combo_default_alt_dictionary
, 1, 2,
1156 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
1158 dictionary
= item
->prefs
->default_alt_dictionary
;
1159 if (dictionary
&& strrchr(dictionary
, '/')) {
1160 gchar
*tmp
= g_strdup(strrchr(dictionary
, '/')+1);
1161 g_free(item
->prefs
->default_alt_dictionary
);
1162 item
->prefs
->default_alt_dictionary
= tmp
;
1163 dictionary
= item
->prefs
->default_alt_dictionary
;
1165 if (item
->prefs
->default_alt_dictionary
&&
1166 strchr(item
->prefs
->default_alt_dictionary
, '-')) {
1167 *(strchr(item
->prefs
->default_alt_dictionary
, '-')) = '\0';
1170 gtkaspell_set_dictionary_menu_active_item(
1171 GTK_COMBO_BOX(combo_default_alt_dictionary
), dictionary
);
1173 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_alt_dictionary
, combo_default_alt_dictionary
);
1175 default_alt_dictionary_rec_checkbtn
= gtk_check_button_new();
1176 gtk_table_attach(GTK_TABLE(table
), default_alt_dictionary_rec_checkbtn
, 2, 3,
1177 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1183 hbox
= gtk_hbox_new (FALSE
, 2);
1184 gtk_widget_show (hbox
);
1185 gtk_table_attach (GTK_TABLE(table
), hbox
, 0, 2,
1186 rowcount
, rowcount
+1, GTK_FILL
, GTK_FILL
, 0, 0);
1188 label
= gtk_label_new(_("Always sign messages"));
1189 gtk_widget_show (label
);
1190 gtk_box_pack_start (GTK_BOX(hbox
), label
, FALSE
, FALSE
, 0);
1192 always_sign
= gtkut_sc_combobox_create (NULL
, FALSE
);
1193 gtk_widget_show (always_sign
);
1194 gtk_box_pack_start (GTK_BOX(hbox
), always_sign
, FALSE
, FALSE
, 0);
1196 always_sign_menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
1197 GTK_COMBO_BOX(always_sign
)));
1198 COMBOBOX_ADD (always_sign_menu
, _("Default"), SIGN_OR_ENCRYPT_DEFAULT
);
1199 COMBOBOX_ADD (always_sign_menu
, _("No"), SIGN_OR_ENCRYPT_NEVER
);
1200 COMBOBOX_ADD (always_sign_menu
, _("Yes"), SIGN_OR_ENCRYPT_ALWAYS
);
1202 combobox_select_by_data(GTK_COMBO_BOX(always_sign
),
1203 item
->prefs
->always_sign
);
1205 CLAWS_SET_TIP(hbox
, _("\"Default\" will follow the applicable account preference"));
1207 always_sign_rec_checkbtn
= gtk_check_button_new();
1208 gtk_widget_show (always_sign_rec_checkbtn
);
1209 gtk_table_attach(GTK_TABLE(table
), always_sign_rec_checkbtn
, 2, 3,
1210 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1215 hbox
= gtk_hbox_new (FALSE
, 2);
1216 gtk_widget_show (hbox
);
1217 gtk_table_attach (GTK_TABLE(table
), hbox
, 0, 2,
1218 rowcount
, rowcount
+1, GTK_FILL
, GTK_FILL
, 0, 0);
1220 label
= gtk_label_new(_("Always encrypt messages"));
1221 gtk_widget_show (label
);
1222 gtk_box_pack_start (GTK_BOX(hbox
), label
, FALSE
, FALSE
, 0);
1224 always_encrypt
= gtkut_sc_combobox_create (NULL
, FALSE
);
1225 gtk_widget_show (always_encrypt
);
1226 gtk_box_pack_start (GTK_BOX(hbox
), always_encrypt
, FALSE
, FALSE
, 0);
1228 always_encrypt_menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
1229 GTK_COMBO_BOX(always_encrypt
)));
1230 COMBOBOX_ADD (always_encrypt_menu
, _("Default"), SIGN_OR_ENCRYPT_DEFAULT
);
1231 COMBOBOX_ADD (always_encrypt_menu
, _("No"), SIGN_OR_ENCRYPT_NEVER
);
1232 COMBOBOX_ADD (always_encrypt_menu
, _("Yes"), SIGN_OR_ENCRYPT_ALWAYS
);
1234 combobox_select_by_data(GTK_COMBO_BOX(always_encrypt
),
1235 item
->prefs
->always_encrypt
);
1237 CLAWS_SET_TIP(hbox
, _("\"Default\" will follow the applicable account preference"));
1239 always_encrypt_rec_checkbtn
= gtk_check_button_new();
1240 gtk_widget_show (always_encrypt_rec_checkbtn
);
1241 gtk_table_attach(GTK_TABLE(table
), always_encrypt_rec_checkbtn
, 2, 3,
1242 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1246 gtk_widget_show_all(table
);
1248 page
->window
= GTK_WIDGET(window
);
1249 page
->table
= table
;
1250 page
->no_save_warning
= no_save_warning
;
1251 page
->checkbtn_request_return_receipt
= checkbtn_request_return_receipt
;
1252 page
->checkbtn_save_copy_to_folder
= checkbtn_save_copy_to_folder
;
1253 page
->checkbtn_default_to
= checkbtn_default_to
;
1254 page
->entry_default_to
= entry_default_to
;
1255 page
->checkbtn_default_reply_to
= checkbtn_default_reply_to
;
1256 page
->entry_default_reply_to
= entry_default_reply_to
;
1257 page
->checkbtn_default_cc
= checkbtn_default_cc
;
1258 page
->entry_default_cc
= entry_default_cc
;
1259 page
->checkbtn_default_bcc
= checkbtn_default_bcc
;
1260 page
->entry_default_bcc
= entry_default_bcc
;
1261 page
->checkbtn_default_replyto
= checkbtn_default_replyto
;
1262 page
->entry_default_replyto
= entry_default_replyto
;
1263 page
->checkbtn_enable_default_account
= checkbtn_enable_default_account
;
1264 page
->optmenu_default_account
= optmenu_default_account
;
1266 page
->checkbtn_enable_default_dictionary
= checkbtn_enable_default_dictionary
;
1267 page
->combo_default_dictionary
= combo_default_dictionary
;
1268 page
->checkbtn_enable_default_alt_dictionary
= checkbtn_enable_default_alt_dictionary
;
1269 page
->combo_default_alt_dictionary
= combo_default_alt_dictionary
;
1271 page
->always_sign
= always_sign
;
1272 page
->always_encrypt
= always_encrypt
;
1274 page
->request_return_receipt_rec_checkbtn
= request_return_receipt_rec_checkbtn
;
1275 page
->save_copy_to_folder_rec_checkbtn
= save_copy_to_folder_rec_checkbtn
;
1276 page
->default_to_rec_checkbtn
= default_to_rec_checkbtn
;
1277 page
->default_reply_to_rec_checkbtn
= default_reply_to_rec_checkbtn
;
1278 page
->default_cc_rec_checkbtn
= default_cc_rec_checkbtn
;
1279 page
->default_bcc_rec_checkbtn
= default_bcc_rec_checkbtn
;
1280 page
->default_replyto_rec_checkbtn
= default_replyto_rec_checkbtn
;
1281 page
->default_account_rec_checkbtn
= default_account_rec_checkbtn
;
1283 page
->default_dictionary_rec_checkbtn
= default_dictionary_rec_checkbtn
;
1284 page
->default_alt_dictionary_rec_checkbtn
= default_alt_dictionary_rec_checkbtn
;
1286 page
->always_sign_rec_checkbtn
= always_sign_rec_checkbtn
;
1287 page
->always_encrypt_rec_checkbtn
= always_encrypt_rec_checkbtn
;
1289 page
->page
.widget
= table
;
1292 static void prefs_folder_item_compose_destroy_widget_func(PrefsPage
*page_
)
1294 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
1296 if (page
->entry_default_to
)
1297 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_to
));
1298 if (page
->entry_default_reply_to
)
1299 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_reply_to
));
1300 if (page
->entry_default_cc
)
1301 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_cc
));
1302 if (page
->entry_default_bcc
)
1303 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_bcc
));
1304 if (page
->entry_default_replyto
)
1305 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_replyto
));
1308 /** \brief Save the prefs in page to folder.
1310 * If the folder is not the one specified in page->item, then only those properties
1311 * that have the relevant 'apply to sub folders' button checked are saved
1313 static void compose_save_folder_prefs(FolderItem
*folder
, FolderItemComposePage
*page
)
1315 FolderItemPrefs
*prefs
= folder
->prefs
;
1317 gboolean all
= FALSE
;
1319 if (folder
->path
== NULL
)
1322 if (page
->item
== folder
)
1325 cm_return_if_fail(prefs
!= NULL
);
1327 if (item_protocol(folder
) != A_NNTP
) {
1328 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->request_return_receipt_rec_checkbtn
))) {
1329 prefs
->request_return_receipt
=
1330 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_request_return_receipt
));
1332 folder
->ret_rcpt
= prefs
->request_return_receipt
;
1335 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->save_copy_to_folder_rec_checkbtn
))) {
1336 prefs
->save_copy_to_folder
=
1337 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_save_copy_to_folder
));
1340 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_to_rec_checkbtn
))) {
1342 prefs
->enable_default_to
=
1343 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_to
));
1344 ASSIGN_STRING(prefs
->default_to
,
1345 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_to
), 0, -1));
1348 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_reply_to_rec_checkbtn
))) {
1349 prefs
->enable_default_reply_to
=
1350 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_reply_to
));
1351 ASSIGN_STRING(prefs
->default_reply_to
,
1352 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_reply_to
), 0, -1));
1355 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_cc_rec_checkbtn
))) {
1357 prefs
->enable_default_cc
=
1358 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_cc
));
1359 ASSIGN_STRING(prefs
->default_cc
,
1360 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_cc
), 0, -1));
1363 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_bcc_rec_checkbtn
))) {
1365 prefs
->enable_default_bcc
=
1366 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_bcc
));
1367 ASSIGN_STRING(prefs
->default_bcc
,
1368 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_bcc
), 0, -1));
1371 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_replyto_rec_checkbtn
))) {
1373 prefs
->enable_default_replyto
=
1374 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_replyto
));
1375 ASSIGN_STRING(prefs
->default_replyto
,
1376 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_replyto
), 0, -1));
1380 prefs
->request_return_receipt
= FALSE
;
1381 prefs
->save_copy_to_folder
= FALSE
;
1382 prefs
->enable_default_to
= FALSE
;
1383 prefs
->enable_default_reply_to
= FALSE
;
1384 prefs
->enable_default_cc
= FALSE
;
1385 prefs
->enable_default_bcc
= FALSE
;
1386 prefs
->enable_default_replyto
= FALSE
;
1389 if (all
|| gtk_toggle_button_get_active(
1390 GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
))) {
1391 prefs
->enable_default_account
=
1392 gtk_toggle_button_get_active(
1393 GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_account
));
1394 prefs
->default_account
= combobox_get_active_data(
1395 GTK_COMBO_BOX(page
->optmenu_default_account
));
1399 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
))) {
1400 prefs
->enable_default_dictionary
=
1401 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_dictionary
));
1402 ASSIGN_STRING(prefs
->default_dictionary
,
1403 gtkaspell_get_dictionary_menu_active_item(
1404 GTK_COMBO_BOX(page
->combo_default_dictionary
)));
1406 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
))) {
1407 prefs
->enable_default_alt_dictionary
=
1408 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_alt_dictionary
));
1409 ASSIGN_STRING(prefs
->default_alt_dictionary
,
1410 gtkaspell_get_dictionary_menu_active_item(
1411 GTK_COMBO_BOX(page
->combo_default_alt_dictionary
)));
1414 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_sign_rec_checkbtn
))) {
1415 prefs
->always_sign
=
1416 combobox_get_active_data(GTK_COMBO_BOX(page
->always_sign
));
1418 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_encrypt_rec_checkbtn
))) {
1419 prefs
->always_encrypt
=
1420 combobox_get_active_data(GTK_COMBO_BOX(page
->always_encrypt
));
1423 folder_item_prefs_save_config(folder
);
1426 static gboolean
compose_save_recurse_func(GNode
*node
, gpointer data
)
1428 FolderItem
*item
= (FolderItem
*) node
->data
;
1429 FolderItemComposePage
*page
= (FolderItemComposePage
*) data
;
1431 cm_return_val_if_fail(item
!= NULL
, TRUE
);
1432 cm_return_val_if_fail(page
!= NULL
, TRUE
);
1434 compose_save_folder_prefs(item
, page
);
1436 /* optimise by not continuing if none of the 'apply to sub folders'
1437 check boxes are selected - and optimise the checking by only doing
1439 if ((node
== page
->item
->node
) && item_protocol(item
) != A_NNTP
&&
1440 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->request_return_receipt_rec_checkbtn
)) ||
1441 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->save_copy_to_folder_rec_checkbtn
)) ||
1442 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_to_rec_checkbtn
)) ||
1443 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
)) ||
1444 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_cc_rec_checkbtn
)) ||
1445 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_bcc_rec_checkbtn
)) ||
1446 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_replyto_rec_checkbtn
)) ||
1448 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
)) ||
1449 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
)) ||
1451 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_sign_rec_checkbtn
)) ||
1452 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_encrypt_rec_checkbtn
)) ||
1453 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_reply_to_rec_checkbtn
))
1456 else if ((node
== page
->item
->node
) && item_protocol(item
) == A_NNTP
&&
1457 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
))
1459 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
))
1460 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
))
1462 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_sign_rec_checkbtn
))
1463 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->always_encrypt_rec_checkbtn
))
1470 static void prefs_folder_item_compose_save_func(PrefsPage
*page_
)
1472 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
1474 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
1475 -1, compose_save_recurse_func
, page
);
1479 static void prefs_folder_item_templates_create_widget_func(PrefsPage
* page_
,
1483 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) page_
;
1484 FolderItem
*item
= (FolderItem
*) data
;
1486 GtkWidget
*notebook
;
1488 GtkWidget
*page_vbox
;
1489 GtkWidget
*no_save_warning
;
1490 GtkWidget
*new_msg_format_rec_checkbtn
;
1491 GtkWidget
*reply_format_rec_checkbtn
;
1492 GtkWidget
*forward_format_rec_checkbtn
;
1494 GtkWidget
*vbox_format
;
1498 page_vbox
= gtk_vbox_new (FALSE
, 0);
1499 gtk_container_set_border_width (GTK_CONTAINER (page_vbox
), VBOX_BORDER
);
1500 gtk_widget_show (page_vbox
);
1503 no_save_warning
= prefs_folder_no_save_warning_create_widget();
1504 gtk_box_pack_start(GTK_BOX(page_vbox
),
1505 no_save_warning
, FALSE
, FALSE
, 0);
1509 notebook
= gtk_notebook_new();
1510 gtk_widget_show(notebook
);
1511 gtk_box_pack_start(GTK_BOX(page_vbox
), notebook
, TRUE
, TRUE
, 4);
1513 /* compose format */
1514 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1515 gtk_widget_show (vbox
);
1516 gtk_container_set_border_width (GTK_CONTAINER (vbox
), VBOX_BORDER
);
1518 quotefmt_create_new_msg_fmt_widgets(
1521 &page
->checkbtn_compose_with_format
,
1522 &page
->compose_override_from_format
,
1523 &page
->compose_subject_format
,
1524 &page
->compose_body_format
,
1526 address_completion_register_entry(GTK_ENTRY(page
->compose_override_from_format
),
1529 vbox_format
= gtk_widget_get_parent(
1530 gtk_widget_get_parent(page
->compose_body_format
));
1532 hbox
= gtk_hbox_new (FALSE
, 0);
1533 gtk_box_pack_end (GTK_BOX(vbox_format
), hbox
, FALSE
, FALSE
, 0);
1534 quotefmt_add_info_button(window
, hbox
);
1536 new_msg_format_rec_checkbtn
= gtk_check_button_new_with_label(
1537 _("Apply to subfolders"));
1538 gtk_box_pack_end (GTK_BOX(hbox
), new_msg_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1539 gtk_notebook_append_page(GTK_NOTEBOOK(notebook
), vbox
, gtk_label_new(_("Compose")));
1542 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1543 gtk_widget_show (vbox
);
1544 gtk_container_set_border_width (GTK_CONTAINER (vbox
), VBOX_BORDER
);
1546 quotefmt_create_reply_fmt_widgets(
1549 &page
->checkbtn_reply_with_format
,
1550 &page
->reply_override_from_format
,
1551 &page
->reply_quotemark
,
1552 &page
->reply_body_format
,
1554 address_completion_register_entry(GTK_ENTRY(page
->reply_override_from_format
),
1557 vbox_format
= gtk_widget_get_parent(
1558 gtk_widget_get_parent(page
->reply_body_format
));
1560 hbox
= gtk_hbox_new (FALSE
, 0);
1561 gtk_box_pack_end (GTK_BOX(vbox_format
), hbox
, FALSE
, FALSE
, 0);
1562 quotefmt_add_info_button(window
, hbox
);
1564 reply_format_rec_checkbtn
= gtk_check_button_new_with_label(
1565 _("Apply to subfolders"));
1566 gtk_box_pack_end (GTK_BOX(hbox
), reply_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1567 gtk_notebook_append_page(GTK_NOTEBOOK(notebook
), vbox
, gtk_label_new(_("Reply")));
1569 /* forward format */
1570 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1571 gtk_widget_show (vbox
);
1572 gtk_container_set_border_width (GTK_CONTAINER (vbox
), VBOX_BORDER
);
1574 quotefmt_create_forward_fmt_widgets(
1577 &page
->checkbtn_forward_with_format
,
1578 &page
->forward_override_from_format
,
1579 &page
->forward_quotemark
,
1580 &page
->forward_body_format
,
1582 address_completion_register_entry(GTK_ENTRY(page
->forward_override_from_format
),
1585 vbox_format
= gtk_widget_get_parent(
1586 gtk_widget_get_parent(page
->forward_body_format
));
1588 hbox
= gtk_hbox_new (FALSE
, 0);
1589 gtk_box_pack_end (GTK_BOX(vbox_format
), hbox
, FALSE
, FALSE
, 0);
1590 quotefmt_add_info_button(window
, hbox
);
1592 forward_format_rec_checkbtn
= gtk_check_button_new_with_label(
1593 _("Apply to subfolders"));
1594 gtk_box_pack_end (GTK_BOX(hbox
), forward_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1595 gtk_notebook_append_page(GTK_NOTEBOOK(notebook
), vbox
, gtk_label_new(_("Forward")));
1597 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_compose_with_format
),
1598 item
->prefs
->compose_with_format
);
1599 pref_set_entry_from_pref(GTK_ENTRY(page
->compose_override_from_format
),
1600 item
->prefs
->compose_override_from_format
);
1601 pref_set_entry_from_pref(GTK_ENTRY(page
->compose_subject_format
),
1602 item
->prefs
->compose_subject_format
);
1603 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->compose_body_format
),
1604 item
->prefs
->compose_body_format
);
1606 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_reply_with_format
),
1607 item
->prefs
->reply_with_format
);
1608 pref_set_entry_from_pref(GTK_ENTRY(page
->reply_quotemark
),
1609 item
->prefs
->reply_quotemark
);
1610 pref_set_entry_from_pref(GTK_ENTRY(page
->reply_override_from_format
),
1611 item
->prefs
->reply_override_from_format
);
1612 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->reply_body_format
),
1613 item
->prefs
->reply_body_format
);
1615 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_forward_with_format
),
1616 item
->prefs
->forward_with_format
);
1617 pref_set_entry_from_pref(GTK_ENTRY(page
->forward_quotemark
),
1618 item
->prefs
->forward_quotemark
);
1619 pref_set_entry_from_pref(GTK_ENTRY(page
->forward_override_from_format
),
1620 item
->prefs
->forward_override_from_format
);
1621 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->forward_body_format
),
1622 item
->prefs
->forward_body_format
);
1624 gtk_widget_show_all(page_vbox
);
1626 page
->window
= GTK_WIDGET(window
);
1628 page
->new_msg_format_rec_checkbtn
= new_msg_format_rec_checkbtn
;
1629 page
->reply_format_rec_checkbtn
= reply_format_rec_checkbtn
;
1630 page
->forward_format_rec_checkbtn
= forward_format_rec_checkbtn
;
1632 page
->page
.widget
= page_vbox
;
1635 static void prefs_folder_item_templates_destroy_widget_func(PrefsPage
*page_
)
1637 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) page_
;
1639 if (page
->compose_override_from_format
)
1640 address_completion_unregister_entry(GTK_ENTRY(page
->compose_override_from_format
));
1641 if (page
->reply_override_from_format
)
1642 address_completion_unregister_entry(GTK_ENTRY(page
->reply_override_from_format
));
1643 if (page
->forward_override_from_format
)
1644 address_completion_unregister_entry(GTK_ENTRY(page
->forward_override_from_format
));
1647 /** \brief Save the prefs in page to folder.
1649 * If the folder is not the one specified in page->item, then only those properties
1650 * that have the relevant 'apply to sub folders' button checked are saved
1652 static void templates_save_folder_prefs(FolderItem
*folder
, FolderItemTemplatesPage
*page
)
1654 FolderItemPrefs
*prefs
= folder
->prefs
;
1655 gboolean all
= FALSE
;
1657 if (folder
->path
== NULL
)
1660 if (page
->item
== folder
)
1663 cm_return_if_fail(prefs
!= NULL
);
1665 /* save and check formats */
1667 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->new_msg_format_rec_checkbtn
))) {
1669 prefs
->compose_with_format
=
1670 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_compose_with_format
));
1671 prefs
->compose_override_from_format
= pref_get_pref_from_entry(
1672 GTK_ENTRY(page
->compose_override_from_format
));
1673 prefs
->compose_subject_format
= pref_get_pref_from_entry(
1674 GTK_ENTRY(page
->compose_subject_format
));
1675 prefs
->compose_body_format
= pref_get_pref_from_textview(
1676 GTK_TEXT_VIEW(page
->compose_body_format
));
1677 quotefmt_check_new_msg_formats(prefs
->compose_with_format
,
1678 prefs
->compose_override_from_format
,
1679 prefs
->compose_subject_format
,
1680 prefs
->compose_body_format
);
1683 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->reply_format_rec_checkbtn
))) {
1684 prefs
->reply_with_format
=
1685 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_reply_with_format
));
1686 prefs
->reply_quotemark
= gtk_editable_get_chars(
1687 GTK_EDITABLE(page
->reply_quotemark
), 0, -1);
1688 prefs
->reply_override_from_format
= pref_get_pref_from_entry(
1689 GTK_ENTRY(page
->reply_override_from_format
));
1690 prefs
->reply_body_format
= pref_get_pref_from_textview(
1691 GTK_TEXT_VIEW(page
->reply_body_format
));
1692 quotefmt_check_reply_formats(prefs
->reply_with_format
,
1693 prefs
->reply_override_from_format
,
1694 prefs
->reply_quotemark
,
1695 prefs
->reply_body_format
);
1698 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->forward_format_rec_checkbtn
))) {
1699 prefs
->forward_with_format
=
1700 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_forward_with_format
));
1701 prefs
->forward_quotemark
= gtk_editable_get_chars(
1702 GTK_EDITABLE(page
->forward_quotemark
), 0, -1);
1703 prefs
->forward_override_from_format
= pref_get_pref_from_entry(
1704 GTK_ENTRY(page
->forward_override_from_format
));
1705 prefs
->forward_body_format
= pref_get_pref_from_textview(
1706 GTK_TEXT_VIEW(page
->forward_body_format
));
1707 quotefmt_check_forward_formats(prefs
->forward_with_format
,
1708 prefs
->forward_override_from_format
,
1709 prefs
->forward_quotemark
,
1710 prefs
->forward_body_format
);
1713 folder_item_prefs_save_config(folder
);
1716 static gboolean
templates_save_recurse_func(GNode
*node
, gpointer data
)
1718 FolderItem
*item
= (FolderItem
*) node
->data
;
1719 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) data
;
1721 cm_return_val_if_fail(item
!= NULL
, TRUE
);
1722 cm_return_val_if_fail(page
!= NULL
, TRUE
);
1724 templates_save_folder_prefs(item
, page
);
1726 /* optimise by not continuing if none of the 'apply to sub folders'
1727 check boxes are selected - and optimise the checking by only doing
1729 if ((node
== page
->item
->node
) &&
1730 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->new_msg_format_rec_checkbtn
)) ||
1731 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->reply_format_rec_checkbtn
)) ||
1732 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->forward_format_rec_checkbtn
))))
1740 static void prefs_folder_item_templates_save_func(PrefsPage
*page_
)
1742 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) page_
;
1744 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
1745 -1, templates_save_recurse_func
, page
);
1749 static gint
prefs_folder_item_chmod_mode(gchar
*folder_chmod
)
1755 newmode
= strtol(folder_chmod
, &tmp
, 8);
1756 if (!(*(folder_chmod
) && !(*tmp
)))
1763 static void folder_color_set_dialog(GtkWidget
*widget
, gpointer data
)
1765 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) data
;
1768 rgbcolor
= colorsel_select_color_rgb(_("Pick color for folder"),
1769 page
->folder_color
);
1770 gtkut_set_widget_bgcolor_rgb(page
->folder_color_btn
, rgbcolor
);
1771 page
->folder_color
= rgbcolor
;
1774 static void clean_cache_cb(GtkWidget
*widget
, gpointer data
)
1776 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) data
;
1777 FolderItem
*item
= page
->item
;
1778 gboolean was_open
= FALSE
;
1779 FolderView
*folderview
= NULL
;
1781 if (alertpanel_full(_("Discard cache"),
1782 _("Do you really want to discard the local cached "
1783 "data for this folder?"),
1784 GTK_STOCK_CANCEL
, _("Discard"), NULL
, ALERTFOCUS_SECOND
,
1785 FALSE
, NULL
, ALERT_WARNING
)
1786 != G_ALERTALTERNATE
)
1789 if (mainwindow_get_mainwindow())
1790 folderview
= mainwindow_get_mainwindow()->folderview
;
1792 if (folderview
&& item
->opened
) {
1793 folderview_close_opened(folderview
, FALSE
);
1796 folder_item_discard_cache(item
);
1798 folderview_select(folderview
,item
);
1801 static regex_t
*summary_compile_simplify_regexp(gchar
*simplify_subject_regexp
)
1804 gchar buf
[BUFFSIZE
];
1805 regex_t
*preg
= NULL
;
1807 preg
= g_new0(regex_t
, 1);
1809 err
= string_match_precompile(simplify_subject_regexp
,
1810 preg
, REG_EXTENDED
);
1812 regerror(err
, preg
, buf
, BUFFSIZE
);
1820 static void folder_regexp_test_cb(GtkWidget
*widget
, gpointer data
)
1822 static GdkColor red
;
1823 static gboolean colors_initialised
= FALSE
;
1824 static gchar buf
[BUFFSIZE
];
1825 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*)data
;
1826 gchar
*test_string
, *regexp
;
1829 regexp
= g_strdup(gtk_entry_get_text(GTK_ENTRY(page
->entry_simplify_subject
)));
1830 test_string
= g_strdup(gtk_entry_get_text(GTK_ENTRY(page
->entry_regexp_test_string
)));
1832 if (!regexp
|| !regexp
[0]) {
1833 gtk_widget_modify_base(page
->entry_simplify_subject
,
1834 GTK_STATE_NORMAL
, NULL
);
1836 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_result
), test_string
);
1838 g_free(test_string
);
1843 if (!test_string
|| !test_string
[0]) {
1844 g_free(test_string
);
1849 if (!colors_initialised
) {
1850 if (!gdk_color_parse("#ff7070", &red
)) {
1851 g_warning("color parse failed: red");
1854 colors_initialised
= gdk_colormap_alloc_color(
1855 gdk_colormap_get_system(), &red
, FALSE
, TRUE
);
1858 preg
= summary_compile_simplify_regexp(regexp
);
1859 if (colors_initialised
)
1860 gtk_widget_modify_base(page
->entry_simplify_subject
,
1861 GTK_STATE_NORMAL
, preg
? NULL
: &red
);
1864 string_remove_match(buf
, BUFFSIZE
, test_string
, preg
);
1866 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_result
), buf
);
1872 g_free(test_string
);
1876 static gchar
*folder_regexp_get_subject_example(void)
1878 MsgInfo
*msginfo_selected
;
1879 SummaryView
*summaryview
= NULL
;
1881 if (!mainwindow_get_mainwindow())
1883 summaryview
= mainwindow_get_mainwindow()->summaryview
;
1885 msginfo_selected
= summary_get_selected_msg(summaryview
);
1886 return msginfo_selected
? g_strdup(msginfo_selected
->subject
) : NULL
;
1889 static void folder_regexp_set_subject_example_cb(GtkWidget
*widget
, gpointer data
)
1891 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*)data
;
1893 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_simplify_subject
))) {
1894 gchar
*subject
= folder_regexp_get_subject_example();
1896 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_string
), subject
);
1902 static void register_general_page()
1904 static gchar
*pfi_general_path
[2];
1905 static FolderItemGeneralPage folder_item_general_page
;
1907 pfi_general_path
[0] = _("General");
1908 pfi_general_path
[1] = NULL
;
1910 folder_item_general_page
.page
.path
= pfi_general_path
;
1911 folder_item_general_page
.page
.create_widget
= prefs_folder_item_general_create_widget_func
;
1912 folder_item_general_page
.page
.destroy_widget
= prefs_folder_item_general_destroy_widget_func
;
1913 folder_item_general_page
.page
.save_page
= prefs_folder_item_general_save_func
;
1915 prefs_folder_item_register_page((PrefsPage
*) &folder_item_general_page
, NULL
);
1919 static void register_compose_page(void)
1921 static gchar
*pfi_compose_path
[2];
1922 static FolderItemComposePage folder_item_compose_page
;
1924 pfi_compose_path
[0] = _("Compose");
1925 pfi_compose_path
[1] = NULL
;
1927 folder_item_compose_page
.page
.path
= pfi_compose_path
;
1928 folder_item_compose_page
.page
.create_widget
= prefs_folder_item_compose_create_widget_func
;
1929 folder_item_compose_page
.page
.destroy_widget
= prefs_folder_item_compose_destroy_widget_func
;
1930 folder_item_compose_page
.page
.save_page
= prefs_folder_item_compose_save_func
;
1932 prefs_folder_item_register_page((PrefsPage
*) &folder_item_compose_page
, NULL
);
1935 static void register_templates_page(void)
1937 static gchar
*pfi_templates_path
[2];
1938 static FolderItemTemplatesPage folder_item_templates_page
;
1940 pfi_templates_path
[0] = _("Templates");
1941 pfi_templates_path
[1] = NULL
;
1943 folder_item_templates_page
.page
.path
= pfi_templates_path
;
1944 folder_item_templates_page
.page
.create_widget
= prefs_folder_item_templates_create_widget_func
;
1945 folder_item_templates_page
.page
.destroy_widget
= prefs_folder_item_templates_destroy_widget_func
;
1946 folder_item_templates_page
.page
.save_page
= prefs_folder_item_templates_save_func
;
1948 prefs_folder_item_register_page((PrefsPage
*) &folder_item_templates_page
, NULL
);
1951 static GSList
*prefs_pages
= NULL
;
1953 static void prefs_folder_item_address_completion_start(PrefsWindow
*window
)
1955 address_completion_start(window
->window
);
1958 static void prefs_folder_item_address_completion_end(PrefsWindow
*window
)
1960 address_completion_end(window
->window
);
1963 void prefs_folder_item_open(FolderItem
*item
)
1968 if (prefs_pages
== NULL
) {
1969 register_general_page();
1970 register_compose_page();
1971 register_templates_page();
1975 id
= folder_item_get_identifier (item
);
1978 id
= g_strdup(item
->name
);
1982 pages
= g_slist_concat(
1983 g_slist_copy(prefs_pages
),
1984 g_slist_copy(item
->folder
->klass
->prefs_pages
));
1986 title
= g_strdup_printf (_("Properties for folder %s"), id
);
1988 prefswindow_open(title
, pages
, item
,
1989 &prefs_common
.folderitemwin_width
, &prefs_common
.folderitemwin_height
,
1990 prefs_folder_item_address_completion_start
,
1992 prefs_folder_item_address_completion_end
);
1994 g_slist_free(pages
);
1998 void prefs_folder_item_register_page(PrefsPage
*page
, FolderClass
*klass
)
2001 klass
->prefs_pages
= g_slist_append(klass
->prefs_pages
, page
);
2003 prefs_pages
= g_slist_append(prefs_pages
, page
);
2006 void prefs_folder_item_unregister_page(PrefsPage
*page
, FolderClass
*klass
)
2009 klass
->prefs_pages
= g_slist_remove(klass
->prefs_pages
, page
);
2011 prefs_pages
= g_slist_remove(prefs_pages
, page
);