2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 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/>.
20 /* alfons - all folder item specific settings should migrate into
21 * folderlist.xml!!! the old folderitemrc file will only serve for a few
22 * versions (for compatibility) */
31 #include <glib/gi18n.h>
33 #include "prefs_folder_item.h"
34 #include "folderview.h"
36 #include "summaryview.h"
39 #include "prefs_gtk.h"
40 #include "manage_window.h"
42 #include "addr_compl.h"
43 #include "prefs_common.h"
45 #include "filtering.h"
46 #include "folder_item_prefs.h"
47 #include "gtk/colorsel.h"
48 #include "string_match.h"
49 #include "quote_fmt.h"
53 #include "gtkaspell.h"
56 #define ASSIGN_STRING(string, value) \
62 typedef struct _FolderItemGeneralPage FolderItemGeneralPage
;
63 typedef struct _FolderItemComposePage FolderItemComposePage
;
64 typedef struct _FolderItemTemplatesPage FolderItemTemplatesPage
;
65 static gboolean can_save
= TRUE
;
67 struct _FolderItemGeneralPage
74 GtkWidget
*no_save_warning
;
75 GtkWidget
*folder_type
;
76 GtkWidget
*checkbtn_simplify_subject
;
77 GtkWidget
*entry_simplify_subject
;
78 GtkWidget
*entry_regexp_test_string
;
79 GtkWidget
*entry_regexp_test_result
;
80 GtkWidget
*checkbtn_folder_chmod
;
81 GtkWidget
*entry_folder_chmod
;
82 GtkWidget
*folder_color_btn
;
83 GtkWidget
*checkbtn_enable_processing
;
84 GtkWidget
*checkbtn_newmailcheck
;
85 GtkWidget
*checkbtn_offlinesync
;
86 GtkWidget
*label_offlinesync
;
87 GtkWidget
*entry_offlinesync
;
88 GtkWidget
*label_end_offlinesync
;
89 GtkWidget
*checkbtn_remove_old_offlinesync
;
91 /* apply to sub folders */
92 GtkWidget
*simplify_subject_rec_checkbtn
;
93 GtkWidget
*folder_chmod_rec_checkbtn
;
94 GtkWidget
*folder_color_rec_checkbtn
;
95 GtkWidget
*enable_processing_rec_checkbtn
;
96 GtkWidget
*newmailcheck_rec_checkbtn
;
97 GtkWidget
*offlinesync_rec_checkbtn
;
102 struct _FolderItemComposePage
110 GtkWidget
*no_save_warning
;
111 GtkWidget
*checkbtn_request_return_receipt
;
112 GtkWidget
*checkbtn_save_copy_to_folder
;
113 GtkWidget
*checkbtn_default_to
;
114 GtkWidget
*entry_default_to
;
115 GtkWidget
*checkbtn_default_reply_to
;
116 GtkWidget
*entry_default_reply_to
;
117 GtkWidget
*checkbtn_enable_default_account
;
118 GtkWidget
*optmenu_default_account
;
120 GtkWidget
*checkbtn_enable_default_dictionary
;
121 GtkWidget
*checkbtn_enable_default_alt_dictionary
;
122 GtkWidget
*optmenu_default_dictionary
;
123 GtkWidget
*optmenu_default_alt_dictionary
;
126 /* apply to sub folders */
127 GtkWidget
*request_return_receipt_rec_checkbtn
;
128 GtkWidget
*save_copy_to_folder_rec_checkbtn
;
129 GtkWidget
*default_to_rec_checkbtn
;
130 GtkWidget
*default_reply_to_rec_checkbtn
;
131 GtkWidget
*default_account_rec_checkbtn
;
133 GtkWidget
*default_dictionary_rec_checkbtn
;
134 GtkWidget
*default_alt_dictionary_rec_checkbtn
;
138 struct _FolderItemTemplatesPage
146 GtkWidget
*checkbtn_compose_with_format
;
147 GtkWidget
*compose_subject_format
;
148 GtkWidget
*compose_body_format
;
149 GtkWidget
*checkbtn_reply_with_format
;
150 GtkWidget
*reply_quotemark
;
151 GtkWidget
*reply_body_format
;
152 GtkWidget
*checkbtn_forward_with_format
;
153 GtkWidget
*forward_quotemark
;
154 GtkWidget
*forward_body_format
;
156 /* apply to sub folders */
157 GtkWidget
*new_msg_format_rec_checkbtn
;
158 GtkWidget
*reply_format_rec_checkbtn
;
159 GtkWidget
*forward_format_rec_checkbtn
;
163 static void general_save_folder_prefs(FolderItem
*folder
, FolderItemGeneralPage
*page
);
164 static void compose_save_folder_prefs(FolderItem
*folder
, FolderItemComposePage
*page
);
165 static void templates_save_folder_prefs(FolderItem
*folder
, FolderItemTemplatesPage
*page
);
167 static gboolean
general_save_recurse_func(GNode
*node
, gpointer data
);
168 static gboolean
compose_save_recurse_func(GNode
*node
, gpointer data
);
169 static gboolean
templates_save_recurse_func(GNode
*node
, gpointer data
);
171 static gint
prefs_folder_item_chmod_mode (gchar
*folder_chmod
);
173 static void folder_color_set_dialog(GtkWidget
*widget
, gpointer data
);
174 static void folder_regexp_test_cb(GtkWidget
*widget
, gpointer data
);
175 static void folder_regexp_set_subject_example_cb(GtkWidget
*widget
, gpointer data
);
177 #define SAFE_STRING(str) \
180 static void prefs_folder_item_general_create_widget_func(PrefsPage
* page_
,
184 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) page_
;
185 FolderItem
*item
= (FolderItem
*) data
;
189 GtkWidget
*hbox
, *hbox2
, *hbox_spc
;
192 GtkListStore
*folder_type_menu
;
193 GtkWidget
*folder_type
;
195 GtkWidget
*dummy_checkbtn
;
196 SpecialFolderItemType type
;
198 GtkWidget
*no_save_warning
= NULL
;
199 GtkWidget
*checkbtn_simplify_subject
;
200 GtkWidget
*entry_simplify_subject
;
201 GtkWidget
*hbox_regexp
;
202 GtkWidget
*label_regexp_test
;
203 GtkWidget
*entry_regexp_test_string
;
204 GtkWidget
*left_arrow
;
205 GtkWidget
*entry_regexp_test_result
;
207 GtkWidget
*checkbtn_folder_chmod
;
208 GtkWidget
*entry_folder_chmod
;
209 GtkWidget
*folder_color
;
210 GtkWidget
*folder_color_btn
;
211 GtkWidget
*checkbtn_enable_processing
;
212 GtkWidget
*checkbtn_newmailcheck
;
213 GtkWidget
*checkbtn_offlinesync
;
214 GtkWidget
*label_offlinesync
;
215 GtkWidget
*entry_offlinesync
;
216 GtkWidget
*label_end_offlinesync
;
217 GtkWidget
*checkbtn_remove_old_offlinesync
;
219 GtkWidget
*simplify_subject_rec_checkbtn
;
220 GtkWidget
*folder_chmod_rec_checkbtn
;
221 GtkWidget
*folder_color_rec_checkbtn
;
222 GtkWidget
*enable_processing_rec_checkbtn
;
223 GtkWidget
*newmailcheck_rec_checkbtn
;
224 GtkWidget
*offlinesync_rec_checkbtn
;
225 GtkTooltips
*tooltips
;
227 tooltips
= gtk_tooltips_new();
231 table
= gtk_table_new(9, 4, FALSE
);
232 gtk_container_set_border_width (GTK_CONTAINER (table
), VBOX_BORDER
);
233 gtk_table_set_row_spacings(GTK_TABLE(table
), 4);
234 gtk_table_set_col_spacings(GTK_TABLE(table
), 4);
238 no_save_warning
= gtk_label_new(
239 _("<i>These preferences will not be saved as this folder "
240 "is a top-level one. However you can use them to set them "
241 "to the whole mailbox tree using \"Apply to subfolders\".</i>"));
242 gtk_label_set_use_markup(GTK_LABEL(no_save_warning
), TRUE
);
243 gtk_label_set_line_wrap(GTK_LABEL(no_save_warning
), TRUE
);
244 gtk_misc_set_alignment(GTK_MISC(no_save_warning
), 0.0, 0.5);
245 gtk_table_attach(GTK_TABLE(table
), no_save_warning
, 0, 4,
246 rowcount
, rowcount
+ 1, GTK_FILL
, 0, 0, 0);
250 /* Apply to subfolders */
251 label
= gtk_label_new(_("Apply to\nsubfolders"));
252 gtk_misc_set_alignment(GTK_MISC(label
), 0.5, 0.5);
253 gtk_table_attach(GTK_TABLE(table
), label
, 3, 4,
254 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
258 folder_type
= gtkut_sc_combobox_create(NULL
, FALSE
);
259 gtk_widget_show (folder_type
);
262 if (item
->stype
== F_INBOX
)
264 else if (folder_has_parent_of_type(item
, F_OUTBOX
))
266 else if (folder_has_parent_of_type(item
, F_DRAFT
))
268 else if (folder_has_parent_of_type(item
, F_QUEUE
))
270 else if (folder_has_parent_of_type(item
, F_TRASH
))
273 folder_type_menu
= GTK_LIST_STORE(gtk_combo_box_get_model(
274 GTK_COMBO_BOX(folder_type
)));
276 COMBOBOX_ADD (folder_type_menu
, _("Normal"), F_NORMAL
);
277 COMBOBOX_ADD (folder_type_menu
, _("Inbox"), F_INBOX
);
278 COMBOBOX_ADD (folder_type_menu
, _("Outbox"), F_OUTBOX
);
279 COMBOBOX_ADD (folder_type_menu
, _("Drafts"), F_DRAFT
);
280 COMBOBOX_ADD (folder_type_menu
, _("Queue"), F_QUEUE
);
281 COMBOBOX_ADD (folder_type_menu
, _("Trash"), F_TRASH
);
283 combobox_select_by_data(GTK_COMBO_BOX(folder_type
), type
);
285 dummy_checkbtn
= gtk_check_button_new();
286 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dummy_checkbtn
), type
!= F_INBOX
);
287 gtk_widget_set_sensitive(dummy_checkbtn
, FALSE
);
289 if (type
== item
->stype
&& type
== F_NORMAL
)
290 gtk_widget_set_sensitive(folder_type
, TRUE
);
292 gtk_widget_set_sensitive(folder_type
, FALSE
);
294 label
= gtk_label_new(_("Folder type"));
295 gtk_misc_set_alignment(GTK_MISC(label
), 0, 0.5);
296 gtk_table_attach(GTK_TABLE(table
), label
, 0, 1,
297 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
298 gtk_table_attach(GTK_TABLE(table
), folder_type
, 1, 2,
299 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
300 gtk_table_attach(GTK_TABLE(table
), dummy_checkbtn
, 3, 4,
301 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
305 /* Simplify Subject */
306 checkbtn_simplify_subject
= gtk_check_button_new_with_label(_("Simplify Subject RegExp"));
307 gtk_table_attach(GTK_TABLE(table
), checkbtn_simplify_subject
, 0, 1,
308 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
309 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_simplify_subject
),
310 item
->prefs
->enable_simplify_subject
);
312 g_signal_connect(G_OBJECT(checkbtn_simplify_subject
), "toggled",
313 G_CALLBACK(folder_regexp_set_subject_example_cb
), page
);
315 entry_simplify_subject
= gtk_entry_new();
316 gtk_table_attach(GTK_TABLE(table
), entry_simplify_subject
, 1, 3,
317 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
318 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_simplify_subject
);
319 gtk_entry_set_text(GTK_ENTRY(entry_simplify_subject
),
320 SAFE_STRING(item
->prefs
->simplify_subject_regexp
));
322 g_signal_connect(G_OBJECT(entry_simplify_subject
), "changed",
323 G_CALLBACK(folder_regexp_test_cb
), page
);
325 simplify_subject_rec_checkbtn
= gtk_check_button_new();
326 gtk_table_attach(GTK_TABLE(table
), simplify_subject_rec_checkbtn
, 3, 4,
327 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
332 label_regexp_test
= gtk_label_new(_("Test RegExp"));
333 gtk_misc_set_alignment(GTK_MISC(label_regexp_test
), 0, 0.5);
334 gtk_table_attach(GTK_TABLE(table
), label_regexp_test
, 0, 1,
335 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
336 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, label_regexp_test
);
338 entry_regexp_test_string
= gtk_entry_new();
339 gtk_table_attach(GTK_TABLE(table
), entry_regexp_test_string
, 1, 2,
340 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
341 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_regexp_test_string
);
343 g_signal_connect(G_OBJECT(entry_regexp_test_string
), "changed",
344 G_CALLBACK(folder_regexp_test_cb
), page
);
346 hbox_regexp
= gtk_hbox_new (FALSE
, 4);
347 gtk_widget_show (hbox_regexp
);
348 gtk_table_attach(GTK_TABLE(table
), hbox_regexp
, 2, 3,
349 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
351 left_arrow
= gtk_arrow_new(GTK_ARROW_RIGHT
, GTK_SHADOW_OUT
);
352 gtk_widget_show(left_arrow
);
353 gtk_box_pack_start (GTK_BOX(hbox_regexp
), left_arrow
, FALSE
, FALSE
, 0);
354 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, left_arrow
);
356 entry_regexp_test_result
= gtk_entry_new();
357 gtk_box_pack_end (GTK_BOX(hbox_regexp
), entry_regexp_test_result
, TRUE
, TRUE
, 0);
358 SET_TOGGLE_SENSITIVITY(checkbtn_simplify_subject
, entry_regexp_test_result
);
359 gtk_entry_set_editable(GTK_ENTRY(entry_regexp_test_result
), FALSE
);
364 checkbtn_folder_chmod
= gtk_check_button_new_with_label(_("Folder chmod"));
365 gtk_table_attach(GTK_TABLE(table
), checkbtn_folder_chmod
, 0, 1,
366 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
368 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_folder_chmod
),
369 item
->prefs
->enable_folder_chmod
);
371 entry_folder_chmod
= gtk_entry_new();
372 gtk_table_attach(GTK_TABLE(table
), entry_folder_chmod
, 1, 2,
373 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
374 SET_TOGGLE_SENSITIVITY(checkbtn_folder_chmod
, entry_folder_chmod
);
375 if (item
->prefs
->folder_chmod
) {
378 buf
= g_strdup_printf("%o", item
->prefs
->folder_chmod
);
379 gtk_entry_set_text(GTK_ENTRY(entry_folder_chmod
), buf
);
383 folder_chmod_rec_checkbtn
= gtk_check_button_new();
384 gtk_table_attach(GTK_TABLE(table
), folder_chmod_rec_checkbtn
, 3, 4,
385 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
390 folder_color
= gtk_label_new(_("Folder color"));
391 gtk_misc_set_alignment(GTK_MISC(folder_color
), 0, 0.5);
392 gtk_table_attach(GTK_TABLE(table
), folder_color
, 0, 1,
393 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
395 hbox
= gtk_hbox_new(FALSE
, 0);
396 gtk_table_attach(GTK_TABLE(table
), hbox
, 1, 2,
397 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
399 folder_color_btn
= gtk_button_new_with_label("");
400 gtk_widget_set_size_request(folder_color_btn
, 36, 26);
401 gtk_box_pack_start (GTK_BOX(hbox
), folder_color_btn
, FALSE
, FALSE
, 0);
402 gtk_tooltips_set_tip(tooltips
, folder_color_btn
,
403 _("Pick color for folder"), NULL
);
405 page
->folder_color
= item
->prefs
->color
;
407 g_signal_connect(G_OBJECT(folder_color_btn
), "clicked",
408 G_CALLBACK(folder_color_set_dialog
),
411 gtkut_set_widget_bgcolor_rgb(folder_color_btn
, item
->prefs
->color
);
413 folder_color_rec_checkbtn
= gtk_check_button_new();
414 gtk_table_attach(GTK_TABLE(table
), folder_color_rec_checkbtn
, 3, 4,
415 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
419 /* Enable processing at startup */
420 checkbtn_enable_processing
= gtk_check_button_new_with_label(_("Process at start-up"));
421 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_processing
, 0, 2,
422 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
424 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_processing
),
425 item
->prefs
->enable_processing
);
427 enable_processing_rec_checkbtn
= gtk_check_button_new();
428 gtk_table_attach(GTK_TABLE(table
), enable_processing_rec_checkbtn
, 3, 4,
429 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
433 /* Check folder for new mail */
434 checkbtn_newmailcheck
= gtk_check_button_new_with_label(_("Scan for new mail"));
435 gtk_tooltips_set_tip(tooltips
, checkbtn_newmailcheck
,
436 _("Turn this option on if mail is delivered directly "
437 "to this folder by server side filtering on IMAP or "
438 "by an external application"), NULL
);
439 gtk_table_attach(GTK_TABLE(table
), checkbtn_newmailcheck
, 0, 2,
440 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
442 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmailcheck
),
443 item
->prefs
->newmailcheck
);
444 newmailcheck_rec_checkbtn
= gtk_check_button_new();
445 gtk_table_attach(GTK_TABLE(table
), newmailcheck_rec_checkbtn
, 3, 4,
446 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
450 /* Synchronise folder for offline use */
451 checkbtn_offlinesync
= gtk_check_button_new_with_label(_("Synchronise for offline use"));
452 gtk_table_attach(GTK_TABLE(table
), checkbtn_offlinesync
, 0, 2,
453 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
455 offlinesync_rec_checkbtn
= gtk_check_button_new();
456 gtk_table_attach(GTK_TABLE(table
), offlinesync_rec_checkbtn
, 3, 4,
457 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
461 hbox
= gtk_hbox_new (FALSE
, 8);
462 gtk_widget_show (hbox
);
463 gtk_table_attach(GTK_TABLE(table
), hbox
, 0, 4,
464 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
467 hbox_spc
= gtk_hbox_new (FALSE
, 0);
468 gtk_widget_show (hbox_spc
);
469 gtk_box_pack_start (GTK_BOX (hbox
), hbox_spc
, FALSE
, FALSE
, 0);
470 gtk_widget_set_size_request (hbox_spc
, 12, -1);
472 label_offlinesync
= gtk_label_new(_("Fetch message bodies from the last"));
473 gtk_widget_show (label_offlinesync
);
474 gtk_box_pack_start (GTK_BOX (hbox
), label_offlinesync
, FALSE
, FALSE
, 0);
476 entry_offlinesync
= gtk_entry_new();
477 gtk_widget_set_size_request (entry_offlinesync
, 64, -1);
478 gtk_widget_show (entry_offlinesync
);
479 gtk_tooltips_set_tip(tooltips
, entry_offlinesync
, _("0: all bodies"), NULL
);
480 gtk_box_pack_start (GTK_BOX (hbox
), entry_offlinesync
, FALSE
, FALSE
, 0);
482 label_end_offlinesync
= gtk_label_new(_("days"));
483 gtk_widget_show (label_end_offlinesync
);
484 gtk_box_pack_start (GTK_BOX (hbox
), label_end_offlinesync
, FALSE
, FALSE
, 0);
486 checkbtn_remove_old_offlinesync
= gtk_check_button_new_with_label(
487 _("Remove older messages bodies"));
489 hbox2
= gtk_hbox_new (FALSE
, 8);
490 gtk_widget_show (hbox2
);
491 gtk_table_attach(GTK_TABLE(table
), hbox2
, 0, 4,
492 rowcount
, rowcount
+1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
495 hbox_spc
= gtk_hbox_new (FALSE
, 0);
496 gtk_widget_show (hbox_spc
);
497 gtk_box_pack_start (GTK_BOX (hbox2
), hbox_spc
, FALSE
, FALSE
, 0);
498 gtk_widget_set_size_request (hbox_spc
, 12, -1);
499 gtk_box_pack_start (GTK_BOX (hbox2
), checkbtn_remove_old_offlinesync
, FALSE
, FALSE
, 0);
501 SET_TOGGLE_SENSITIVITY (checkbtn_offlinesync
, hbox
);
502 SET_TOGGLE_SENSITIVITY (checkbtn_offlinesync
, hbox2
);
504 gtk_widget_show_all(table
);
506 if (item
->folder
&& (item
->folder
->klass
->type
!= F_IMAP
&&
507 item
->folder
->klass
->type
!= F_NEWS
)) {
508 item
->prefs
->offlinesync
= TRUE
;
509 item
->prefs
->offlinesync_days
= 0;
510 item
->prefs
->remove_old_bodies
= FALSE
;
512 gtk_widget_set_sensitive(GTK_WIDGET(checkbtn_offlinesync
),
514 gtk_widget_set_sensitive(GTK_WIDGET(offlinesync_rec_checkbtn
),
516 gtk_widget_hide(GTK_WIDGET(checkbtn_offlinesync
));
517 gtk_widget_hide(GTK_WIDGET(hbox
));
518 gtk_widget_hide(GTK_WIDGET(hbox2
));
519 gtk_widget_hide(GTK_WIDGET(offlinesync_rec_checkbtn
));
522 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_offlinesync
),
523 item
->prefs
->offlinesync
);
524 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_remove_old_offlinesync
),
525 item
->prefs
->remove_old_bodies
);
526 gtk_entry_set_text(GTK_ENTRY(entry_offlinesync
), itos(item
->prefs
->offlinesync_days
));
529 page
->folder_type
= folder_type
;
530 page
->no_save_warning
= no_save_warning
;
531 page
->checkbtn_simplify_subject
= checkbtn_simplify_subject
;
532 page
->entry_simplify_subject
= entry_simplify_subject
;
533 page
->entry_regexp_test_string
= entry_regexp_test_string
;
534 page
->entry_regexp_test_result
= entry_regexp_test_result
;
535 page
->checkbtn_folder_chmod
= checkbtn_folder_chmod
;
536 page
->entry_folder_chmod
= entry_folder_chmod
;
537 page
->folder_color_btn
= folder_color_btn
;
538 page
->checkbtn_enable_processing
= checkbtn_enable_processing
;
539 page
->checkbtn_newmailcheck
= checkbtn_newmailcheck
;
540 page
->checkbtn_offlinesync
= checkbtn_offlinesync
;
541 page
->label_offlinesync
= label_offlinesync
;
542 page
->entry_offlinesync
= entry_offlinesync
;
543 page
->label_end_offlinesync
= label_end_offlinesync
;
544 page
->checkbtn_remove_old_offlinesync
= checkbtn_remove_old_offlinesync
;
546 page
->simplify_subject_rec_checkbtn
= simplify_subject_rec_checkbtn
;
547 page
->folder_chmod_rec_checkbtn
= folder_chmod_rec_checkbtn
;
548 page
->folder_color_rec_checkbtn
= folder_color_rec_checkbtn
;
549 page
->enable_processing_rec_checkbtn
= enable_processing_rec_checkbtn
;
550 page
->newmailcheck_rec_checkbtn
= newmailcheck_rec_checkbtn
;
551 page
->offlinesync_rec_checkbtn
= offlinesync_rec_checkbtn
;
553 page
->page
.widget
= table
;
555 folder_regexp_set_subject_example_cb(NULL
, page
);
558 static void prefs_folder_item_general_destroy_widget_func(PrefsPage
*page_
)
560 /* FolderItemGeneralPage *page = (FolderItemGeneralPage *) page_; */
563 /** \brief Save the prefs in page to folder.
565 * If the folder is not the one specified in page->item, then only those properties
566 * that have the relevant 'apply to sub folders' button checked are saved
568 static void general_save_folder_prefs(FolderItem
*folder
, FolderItemGeneralPage
*page
)
570 FolderItemPrefs
*prefs
= folder
->prefs
;
572 gboolean all
= FALSE
;
573 SpecialFolderItemType type
= F_NORMAL
;
575 if (folder
->path
== NULL
)
578 g_return_if_fail(prefs
!= NULL
);
580 if (page
->item
== folder
)
583 type
= combobox_get_active_data(GTK_COMBO_BOX(page
->folder_type
));
584 if (all
&& folder
->stype
!= type
) {
585 folder_item_change_type(folder
, type
);
588 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->simplify_subject_rec_checkbtn
))) {
589 prefs
->enable_simplify_subject
=
590 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_simplify_subject
));
591 ASSIGN_STRING(prefs
->simplify_subject_regexp
,
592 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_simplify_subject
), 0, -1));
595 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_chmod_rec_checkbtn
))) {
596 prefs
->enable_folder_chmod
=
597 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_folder_chmod
));
598 buf
= gtk_editable_get_chars(GTK_EDITABLE(page
->entry_folder_chmod
), 0, -1);
599 prefs
->folder_chmod
= prefs_folder_item_chmod_mode(buf
);
603 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_color_rec_checkbtn
))) {
604 int old_color
= prefs
->color
;
605 prefs
->color
= page
->folder_color
;
607 /* update folder view */
608 if (prefs
->color
!= old_color
)
609 folder_item_update(folder
, F_ITEM_UPDATE_MSGCNT
);
612 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_rec_checkbtn
))) {
613 prefs
->enable_processing
=
614 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_processing
));
617 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->newmailcheck_rec_checkbtn
))) {
618 prefs
->newmailcheck
=
619 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_newmailcheck
));
622 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->offlinesync_rec_checkbtn
))) {
624 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_offlinesync
));
625 prefs
->offlinesync_days
=
626 atoi(gtk_entry_get_text(GTK_ENTRY(page
->entry_offlinesync
)));
627 prefs
->remove_old_bodies
=
628 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_remove_old_offlinesync
));
631 folder_item_prefs_save_config(folder
);
634 static gboolean
general_save_recurse_func(GNode
*node
, gpointer data
)
636 FolderItem
*item
= (FolderItem
*) node
->data
;
637 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) data
;
639 g_return_val_if_fail(item
!= NULL
, TRUE
);
640 g_return_val_if_fail(page
!= NULL
, TRUE
);
642 general_save_folder_prefs(item
, page
);
644 /* optimise by not continuing if none of the 'apply to sub folders'
645 check boxes are selected - and optimise the checking by only doing
647 if ((node
== page
->item
->node
) &&
648 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->simplify_subject_rec_checkbtn
)) ||
649 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_chmod_rec_checkbtn
)) ||
650 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->folder_color_rec_checkbtn
)) ||
651 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->enable_processing_rec_checkbtn
)) ||
652 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->newmailcheck_rec_checkbtn
)) ||
653 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->offlinesync_rec_checkbtn
))))
659 static void prefs_folder_item_general_save_func(PrefsPage
*page_
)
661 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) page_
;
663 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
664 -1, general_save_recurse_func
, page
);
666 main_window_set_menu_sensitive(mainwindow_get_mainwindow());
670 static RecvProtocol
item_protocol(FolderItem
*item
)
676 if (!item
->folder
->account
)
678 return item
->folder
->account
->protocol
;
681 static void prefs_folder_item_compose_create_widget_func(PrefsPage
* page_
,
685 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
686 FolderItem
*item
= (FolderItem
*) data
;
692 GtkWidget
*no_save_warning
= NULL
;
693 GtkWidget
*checkbtn_request_return_receipt
= NULL
;
694 GtkWidget
*checkbtn_save_copy_to_folder
= NULL
;
695 GtkWidget
*checkbtn_default_to
= NULL
;
696 GtkWidget
*entry_default_to
= NULL
;
697 GtkWidget
*checkbtn_default_reply_to
= NULL
;
698 GtkWidget
*entry_default_reply_to
= NULL
;
699 GtkWidget
*checkbtn_enable_default_account
= NULL
;
700 GtkWidget
*optmenu_default_account
= NULL
;
701 GtkListStore
*optmenu_default_account_menu
= NULL
;
704 GtkWidget
*checkbtn_enable_default_dictionary
= NULL
;
705 GtkWidget
*optmenu_default_dictionary
= NULL
;
706 GtkWidget
*checkbtn_enable_default_alt_dictionary
= NULL
;
707 GtkWidget
*optmenu_default_alt_dictionary
= NULL
;
708 GtkWidget
*default_dictionary_rec_checkbtn
= NULL
;
709 GtkWidget
*default_alt_dictionary_rec_checkbtn
= NULL
;
711 GtkOptionMenu
*optmenu
;
715 GtkWidget
*request_return_receipt_rec_checkbtn
= NULL
;
716 GtkWidget
*save_copy_to_folder_rec_checkbtn
= NULL
;
717 GtkWidget
*default_to_rec_checkbtn
= NULL
;
718 GtkWidget
*default_reply_to_rec_checkbtn
= NULL
;
719 GtkWidget
*default_account_rec_checkbtn
= NULL
;
723 PrefsAccount
*ac_prefs
;
724 gboolean default_account_set
= FALSE
;
730 # define TABLEHEIGHT 7
732 # define TABLEHEIGHT 6
734 table
= gtk_table_new(TABLEHEIGHT
, 3, FALSE
);
735 gtk_container_set_border_width (GTK_CONTAINER (table
), VBOX_BORDER
);
736 gtk_table_set_row_spacings(GTK_TABLE(table
), 4);
737 gtk_table_set_col_spacings(GTK_TABLE(table
), 4);
741 no_save_warning
= gtk_label_new(
742 _("<i>These preferences will not be saved as this folder "
743 "is a top-level one. However you can use them to set them "
744 "to the whole mailbox tree using \"Apply to subfolders\".</i>"));
745 gtk_label_set_use_markup(GTK_LABEL(no_save_warning
), TRUE
);
746 gtk_label_set_line_wrap(GTK_LABEL(no_save_warning
), TRUE
);
747 gtk_misc_set_alignment(GTK_MISC(no_save_warning
), 0.0, 0.5);
748 gtk_table_attach(GTK_TABLE(table
), no_save_warning
, 0, 3,
749 rowcount
, rowcount
+ 1, GTK_FILL
, 0, 0, 0);
753 /* Apply to subfolders */
754 label
= gtk_label_new(_("Apply to\nsubfolders"));
755 gtk_misc_set_alignment(GTK_MISC(label
), 0.5, 0.5);
756 gtk_table_attach(GTK_TABLE(table
), label
, 2, 3,
757 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
760 if (item_protocol(item
) != A_NNTP
) {
761 /* Request Return Receipt */
762 checkbtn_request_return_receipt
= gtk_check_button_new_with_label
763 (_("Request Return Receipt"));
764 gtk_table_attach(GTK_TABLE(table
), checkbtn_request_return_receipt
,
765 0, 2, rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
,
767 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_request_return_receipt
),
768 item
->ret_rcpt
? TRUE
: FALSE
);
770 request_return_receipt_rec_checkbtn
= gtk_check_button_new();
771 gtk_table_attach(GTK_TABLE(table
), request_return_receipt_rec_checkbtn
, 2, 3,
772 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
776 /* Save Copy to Folder */
777 checkbtn_save_copy_to_folder
= gtk_check_button_new_with_label
778 (_("Save copy of outgoing messages to this folder instead of Sent"));
779 gtk_table_attach(GTK_TABLE(table
), checkbtn_save_copy_to_folder
, 0, 2,
780 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_FILL
, 0, 0);
781 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_save_copy_to_folder
),
782 item
->prefs
->save_copy_to_folder
? TRUE
: FALSE
);
784 save_copy_to_folder_rec_checkbtn
= gtk_check_button_new();
785 gtk_table_attach(GTK_TABLE(table
), save_copy_to_folder_rec_checkbtn
, 2, 3,
786 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
791 checkbtn_default_to
= gtk_check_button_new_with_label(_("Default To:"));
792 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_to
, 0, 1,
793 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
794 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_to
),
795 item
->prefs
->enable_default_to
);
797 entry_default_to
= gtk_entry_new();
798 gtk_table_attach(GTK_TABLE(table
), entry_default_to
, 1, 2,
799 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
800 SET_TOGGLE_SENSITIVITY(checkbtn_default_to
, entry_default_to
);
801 gtk_entry_set_text(GTK_ENTRY(entry_default_to
), SAFE_STRING(item
->prefs
->default_to
));
802 address_completion_register_entry(GTK_ENTRY(entry_default_to
),
805 default_to_rec_checkbtn
= gtk_check_button_new();
806 gtk_table_attach(GTK_TABLE(table
), default_to_rec_checkbtn
, 2, 3,
807 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
811 /* Default address to reply to */
812 checkbtn_default_reply_to
= gtk_check_button_new_with_label(_("Default To: for replies"));
813 gtk_table_attach(GTK_TABLE(table
), checkbtn_default_reply_to
, 0, 1,
814 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
815 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_default_reply_to
),
816 item
->prefs
->enable_default_reply_to
);
818 entry_default_reply_to
= gtk_entry_new();
819 gtk_table_attach(GTK_TABLE(table
), entry_default_reply_to
, 1, 2,
820 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
821 SET_TOGGLE_SENSITIVITY(checkbtn_default_reply_to
, entry_default_reply_to
);
822 gtk_entry_set_text(GTK_ENTRY(entry_default_reply_to
), SAFE_STRING(item
->prefs
->default_reply_to
));
823 address_completion_register_entry(
824 GTK_ENTRY(entry_default_reply_to
), TRUE
);
826 default_reply_to_rec_checkbtn
= gtk_check_button_new();
827 gtk_table_attach(GTK_TABLE(table
), default_reply_to_rec_checkbtn
, 2, 3,
828 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
832 /* Default account */
833 checkbtn_enable_default_account
= gtk_check_button_new_with_label(_("Default account"));
834 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_account
, 0, 1,
835 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
836 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_account
),
837 item
->prefs
->enable_default_account
);
839 optmenu_default_account
= gtkut_sc_combobox_create(NULL
, FALSE
);
840 gtk_table_attach(GTK_TABLE(table
), optmenu_default_account
, 1, 2,
841 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
842 optmenu_default_account_menu
= GTK_LIST_STORE(
843 gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu_default_account
)));
845 account_list
= account_get_list();
846 for (cur_ac
= account_list
; cur_ac
!= NULL
; cur_ac
= cur_ac
->next
) {
847 ac_prefs
= (PrefsAccount
*)cur_ac
->data
;
848 if (item
->folder
->account
&&
849 ( (item_protocol(item
) == A_NNTP
&& ac_prefs
->protocol
!= A_NNTP
)
850 ||(item_protocol(item
) != A_NNTP
&& ac_prefs
->protocol
== A_NNTP
)))
853 if (item
->folder
->klass
->type
!= F_NEWS
&& ac_prefs
->protocol
== A_NNTP
)
856 COMBOBOX_ADD (optmenu_default_account_menu
,
857 ac_prefs
->account_name
?ac_prefs
->account_name
: _("Untitled"),
858 ac_prefs
->account_id
);
860 /* Set combobox to current default account id */
861 if (ac_prefs
->account_id
== item
->prefs
->default_account
) {
862 combobox_select_by_data(GTK_COMBO_BOX(optmenu_default_account
),
863 ac_prefs
->account_id
);
864 default_account_set
= TRUE
;
868 /* If nothing has been set (folder doesn't have a default account set),
869 * pre-select global default account, since that's what actually used
870 * anyway. We don't want nothing selected in combobox. */
871 if( !default_account_set
)
872 combobox_select_by_data(GTK_COMBO_BOX(optmenu_default_account
),
873 account_get_default()->account_id
);
875 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_account
, optmenu_default_account
);
877 default_account_rec_checkbtn
= gtk_check_button_new();
878 gtk_table_attach(GTK_TABLE(table
), default_account_rec_checkbtn
, 2, 3,
879 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
883 /* Default dictionary */
884 checkbtn_enable_default_dictionary
= gtk_check_button_new_with_label(_("Default dictionary"));
885 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_dictionary
, 0, 1,
886 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
887 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_dictionary
),
888 item
->prefs
->enable_default_dictionary
);
890 optmenu_default_dictionary
= gtk_option_menu_new();
891 gtk_table_attach(GTK_TABLE(table
), optmenu_default_dictionary
, 1, 2,
892 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
894 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_default_dictionary
),
895 gtkaspell_dictionary_option_menu_new(
896 prefs_common
.aspell_path
));
898 dictionary
= item
->prefs
->default_dictionary
;
900 optmenu
= GTK_OPTION_MENU(optmenu_default_dictionary
);
902 menu
= gtk_option_menu_get_menu(optmenu
);
904 gtkaspell_set_dictionary_menu_active_item(optmenu_default_dictionary
, dictionary
);
905 menuitem
= gtk_menu_get_active(GTK_MENU(menu
));
906 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem
));
908 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_dictionary
, optmenu_default_dictionary
);
910 default_dictionary_rec_checkbtn
= gtk_check_button_new();
911 gtk_table_attach(GTK_TABLE(table
), default_dictionary_rec_checkbtn
, 2, 3,
912 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
916 /* Default dictionary */
917 checkbtn_enable_default_alt_dictionary
= gtk_check_button_new_with_label(_("Default alternate dictionary"));
918 gtk_table_attach(GTK_TABLE(table
), checkbtn_enable_default_alt_dictionary
, 0, 1,
919 rowcount
, rowcount
+ 1, GTK_SHRINK
| GTK_FILL
, GTK_SHRINK
, 0, 0);
920 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_enable_default_alt_dictionary
),
921 item
->prefs
->enable_default_alt_dictionary
);
923 optmenu_default_alt_dictionary
= gtk_option_menu_new();
924 gtk_table_attach(GTK_TABLE(table
), optmenu_default_alt_dictionary
, 1, 2,
925 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_SHRINK
, 0, 0);
927 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu_default_alt_dictionary
),
928 gtkaspell_dictionary_option_menu_new_with_refresh(
929 prefs_common
.aspell_path
, FALSE
));
931 dictionary
= item
->prefs
->default_alt_dictionary
;
933 optmenu
= GTK_OPTION_MENU(optmenu_default_alt_dictionary
);
935 menu
= gtk_option_menu_get_menu(optmenu
);
937 gtkaspell_set_dictionary_menu_active_item(optmenu_default_alt_dictionary
, dictionary
);
938 menuitem
= gtk_menu_get_active(GTK_MENU(menu
));
939 gtk_menu_item_activate(GTK_MENU_ITEM(menuitem
));
941 SET_TOGGLE_SENSITIVITY(checkbtn_enable_default_alt_dictionary
, optmenu_default_alt_dictionary
);
943 default_alt_dictionary_rec_checkbtn
= gtk_check_button_new();
944 gtk_table_attach(GTK_TABLE(table
), default_alt_dictionary_rec_checkbtn
, 2, 3,
945 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
950 gtk_widget_show_all(table
);
952 page
->window
= GTK_WIDGET(window
);
954 page
->no_save_warning
= no_save_warning
;
955 page
->checkbtn_request_return_receipt
= checkbtn_request_return_receipt
;
956 page
->checkbtn_save_copy_to_folder
= checkbtn_save_copy_to_folder
;
957 page
->checkbtn_default_to
= checkbtn_default_to
;
958 page
->entry_default_to
= entry_default_to
;
959 page
->checkbtn_default_reply_to
= checkbtn_default_reply_to
;
960 page
->entry_default_reply_to
= entry_default_reply_to
;
961 page
->checkbtn_enable_default_account
= checkbtn_enable_default_account
;
962 page
->optmenu_default_account
= optmenu_default_account
;
964 page
->checkbtn_enable_default_dictionary
= checkbtn_enable_default_dictionary
;
965 page
->optmenu_default_dictionary
= optmenu_default_dictionary
;
966 page
->checkbtn_enable_default_alt_dictionary
= checkbtn_enable_default_alt_dictionary
;
967 page
->optmenu_default_alt_dictionary
= optmenu_default_alt_dictionary
;
970 page
->request_return_receipt_rec_checkbtn
= request_return_receipt_rec_checkbtn
;
971 page
->save_copy_to_folder_rec_checkbtn
= save_copy_to_folder_rec_checkbtn
;
972 page
->default_to_rec_checkbtn
= default_to_rec_checkbtn
;
973 page
->default_reply_to_rec_checkbtn
= default_reply_to_rec_checkbtn
;
974 page
->default_account_rec_checkbtn
= default_account_rec_checkbtn
;
976 page
->default_dictionary_rec_checkbtn
= default_dictionary_rec_checkbtn
;
977 page
->default_alt_dictionary_rec_checkbtn
= default_alt_dictionary_rec_checkbtn
;
980 address_completion_start(page
->window
);
982 page
->page
.widget
= table
;
985 static void prefs_folder_item_compose_destroy_widget_func(PrefsPage
*page_
)
987 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
989 if (page
->entry_default_to
)
990 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_to
));
991 if (page
->entry_default_reply_to
)
992 address_completion_unregister_entry(GTK_ENTRY(page
->entry_default_reply_to
));
993 address_completion_end(page
->window
);
996 /** \brief Save the prefs in page to folder.
998 * If the folder is not the one specified in page->item, then only those properties
999 * that have the relevant 'apply to sub folders' button checked are saved
1001 static void compose_save_folder_prefs(FolderItem
*folder
, FolderItemComposePage
*page
)
1003 FolderItemPrefs
*prefs
= folder
->prefs
;
1007 gboolean all
= FALSE
;
1009 if (folder
->path
== NULL
)
1012 if (page
->item
== folder
)
1015 g_return_if_fail(prefs
!= NULL
);
1017 if (item_protocol(folder
) != A_NNTP
) {
1018 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->request_return_receipt_rec_checkbtn
))) {
1019 prefs
->request_return_receipt
=
1020 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_request_return_receipt
));
1022 folder
->ret_rcpt
= prefs
->request_return_receipt
;
1025 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->save_copy_to_folder_rec_checkbtn
))) {
1026 prefs
->save_copy_to_folder
=
1027 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_save_copy_to_folder
));
1030 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_to_rec_checkbtn
))) {
1032 prefs
->enable_default_to
=
1033 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_to
));
1034 ASSIGN_STRING(prefs
->default_to
,
1035 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_to
), 0, -1));
1038 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_reply_to_rec_checkbtn
))) {
1039 prefs
->enable_default_reply_to
=
1040 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_default_reply_to
));
1041 ASSIGN_STRING(prefs
->default_reply_to
,
1042 gtk_editable_get_chars(GTK_EDITABLE(page
->entry_default_reply_to
), 0, -1));
1045 prefs
->request_return_receipt
= FALSE
;
1046 prefs
->save_copy_to_folder
= FALSE
;
1047 prefs
->enable_default_to
= FALSE
;
1048 prefs
->enable_default_reply_to
= FALSE
;
1051 if (all
|| gtk_toggle_button_get_active(
1052 GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
))) {
1053 prefs
->enable_default_account
=
1054 gtk_toggle_button_get_active(
1055 GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_account
));
1056 prefs
->default_account
= combobox_get_active_data(
1057 GTK_COMBO_BOX(page
->optmenu_default_account
));
1061 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
))) {
1062 prefs
->enable_default_dictionary
=
1063 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_dictionary
));
1064 menu
= gtk_option_menu_get_menu(GTK_OPTION_MENU(page
->optmenu_default_dictionary
));
1065 ASSIGN_STRING(prefs
->default_dictionary
,
1066 gtkaspell_get_dictionary_menu_active_item(menu
));
1068 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
))) {
1069 prefs
->enable_default_alt_dictionary
=
1070 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_enable_default_alt_dictionary
));
1071 menu
= gtk_option_menu_get_menu(GTK_OPTION_MENU(page
->optmenu_default_alt_dictionary
));
1072 ASSIGN_STRING(prefs
->default_alt_dictionary
,
1073 gtkaspell_get_dictionary_menu_active_item(menu
));
1077 folder_item_prefs_save_config(folder
);
1080 static gboolean
compose_save_recurse_func(GNode
*node
, gpointer data
)
1082 FolderItem
*item
= (FolderItem
*) node
->data
;
1083 FolderItemComposePage
*page
= (FolderItemComposePage
*) data
;
1085 g_return_val_if_fail(item
!= NULL
, TRUE
);
1086 g_return_val_if_fail(page
!= NULL
, TRUE
);
1088 compose_save_folder_prefs(item
, page
);
1090 /* optimise by not continuing if none of the 'apply to sub folders'
1091 check boxes are selected - and optimise the checking by only doing
1093 if ((node
== page
->item
->node
) && item_protocol(item
) != A_NNTP
&&
1094 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->request_return_receipt_rec_checkbtn
)) ||
1095 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->save_copy_to_folder_rec_checkbtn
)) ||
1096 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_to_rec_checkbtn
)) ||
1097 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
)) ||
1099 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
)) ||
1100 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
)) ||
1102 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_reply_to_rec_checkbtn
))))
1104 else if ((node
== page
->item
->node
) && item_protocol(item
) == A_NNTP
&&
1105 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_account_rec_checkbtn
))
1107 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_dictionary_rec_checkbtn
))
1108 || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->default_alt_dictionary_rec_checkbtn
))
1116 static void prefs_folder_item_compose_save_func(PrefsPage
*page_
)
1118 FolderItemComposePage
*page
= (FolderItemComposePage
*) page_
;
1120 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
1121 -1, compose_save_recurse_func
, page
);
1125 static void prefs_folder_item_templates_create_widget_func(PrefsPage
* page_
,
1129 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) page_
;
1130 FolderItem
*item
= (FolderItem
*) data
;
1136 GtkWidget
*alignment
;
1137 GtkWidget
*new_msg_format_rec_checkbtn
;
1138 GtkWidget
*reply_format_rec_checkbtn
;
1139 GtkWidget
*forward_format_rec_checkbtn
;
1144 table
= gtk_table_new(5, 3, FALSE
);
1145 gtk_container_set_border_width (GTK_CONTAINER (table
), VBOX_BORDER
);
1146 gtk_table_set_row_spacings(GTK_TABLE(table
), 4);
1147 gtk_table_set_col_spacings(GTK_TABLE(table
), 4);
1150 /* Apply to subfolders */
1151 label
= gtk_label_new(_("Apply to\nsubfolders"));
1152 gtk_misc_set_alignment(GTK_MISC(label
), 0.5, 0.5);
1153 gtk_table_attach(GTK_TABLE(table
), label
, 2, 3,
1154 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_SHRINK
, 0, 0);
1157 /* compose format */
1158 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1159 gtk_widget_show (vbox
);
1160 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1161 gtk_table_attach(GTK_TABLE(table
), vbox
, 1, 2,
1162 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
1164 quotefmt_create_new_msg_fmt_widgets(
1167 &page
->checkbtn_compose_with_format
,
1168 _("Use a specific format for new messages"),
1169 &page
->compose_subject_format
,
1170 &page
->compose_body_format
,
1173 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1174 gtk_widget_show (vbox
);
1175 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1176 gtk_table_attach(GTK_TABLE(table
), vbox
, 2, 3,
1177 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_FILL
, 0, 0);
1179 new_msg_format_rec_checkbtn
= gtk_check_button_new();
1180 gtk_box_pack_start (GTK_BOX(vbox
), new_msg_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1181 alignment
= gtk_alignment_new(0, 1, 0, 0);
1182 gtk_box_pack_start (GTK_BOX(vbox
), alignment
, FALSE
, FALSE
, 0);
1187 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1188 gtk_widget_show (vbox
);
1189 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1190 gtk_table_attach(GTK_TABLE(table
), vbox
, 1, 2,
1191 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
1193 quotefmt_create_reply_fmt_widgets(
1196 &page
->checkbtn_reply_with_format
,
1197 _("Use a specific reply quote format"),
1198 &page
->reply_quotemark
,
1199 &page
->reply_body_format
,
1202 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1203 gtk_widget_show (vbox
);
1204 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1205 gtk_table_attach(GTK_TABLE(table
), vbox
, 2, 3,
1206 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_FILL
, 0, 0);
1208 reply_format_rec_checkbtn
= gtk_check_button_new();
1209 gtk_box_pack_start (GTK_BOX(vbox
), reply_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1210 alignment
= gtk_alignment_new(0, 1, 0, 0);
1211 gtk_box_pack_start (GTK_BOX(vbox
), alignment
, FALSE
, FALSE
, 0);
1215 /* forward format */
1216 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1217 gtk_widget_show (vbox
);
1218 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1219 gtk_table_attach(GTK_TABLE(table
), vbox
, 1, 2,
1220 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
1222 quotefmt_create_forward_fmt_widgets(
1225 &page
->checkbtn_forward_with_format
,
1226 _("Use a specific forward quote format"),
1227 &page
->forward_quotemark
,
1228 &page
->forward_body_format
,
1231 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1232 gtk_widget_show (vbox
);
1233 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1234 gtk_table_attach(GTK_TABLE(table
), vbox
, 2, 3,
1235 rowcount
, rowcount
+ 1, GTK_SHRINK
, GTK_FILL
, 0, 0);
1237 forward_format_rec_checkbtn
= gtk_check_button_new();
1238 gtk_box_pack_start (GTK_BOX(vbox
), forward_format_rec_checkbtn
, FALSE
, FALSE
, 0);
1239 alignment
= gtk_alignment_new(0, 1, 0, 0);
1240 gtk_box_pack_start (GTK_BOX(vbox
), alignment
, FALSE
, FALSE
, 0);
1244 /* information button */
1245 vbox
= gtk_vbox_new (FALSE
, VSPACING
);
1246 gtk_widget_show (vbox
);
1247 gtk_container_set_border_width (GTK_CONTAINER (vbox
), 0);
1248 gtk_table_attach(GTK_TABLE(table
), vbox
, 1, 2,
1249 rowcount
, rowcount
+ 1, GTK_EXPAND
| GTK_FILL
, GTK_FILL
, 0, 0);
1251 quotefmt_add_info_button(window
, vbox
);
1254 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_compose_with_format
),
1255 item
->prefs
->compose_with_format
);
1256 pref_set_entry_from_pref(GTK_ENTRY(page
->compose_subject_format
),
1257 item
->prefs
->compose_subject_format
);
1258 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->compose_body_format
),
1259 item
->prefs
->compose_body_format
);
1261 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_reply_with_format
),
1262 item
->prefs
->reply_with_format
);
1263 pref_set_entry_from_pref(GTK_ENTRY(page
->reply_quotemark
),
1264 item
->prefs
->reply_quotemark
);
1265 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->reply_body_format
),
1266 item
->prefs
->reply_body_format
);
1268 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(page
->checkbtn_forward_with_format
),
1269 item
->prefs
->forward_with_format
);
1270 pref_set_entry_from_pref(GTK_ENTRY(page
->forward_quotemark
),
1271 item
->prefs
->forward_quotemark
);
1272 pref_set_textview_from_pref(GTK_TEXT_VIEW(page
->forward_body_format
),
1273 item
->prefs
->forward_body_format
);
1275 gtk_widget_show_all(table
);
1277 page
->window
= GTK_WIDGET(window
);
1278 page
->table
= table
;
1280 page
->new_msg_format_rec_checkbtn
= new_msg_format_rec_checkbtn
;
1281 page
->reply_format_rec_checkbtn
= reply_format_rec_checkbtn
;
1282 page
->forward_format_rec_checkbtn
= forward_format_rec_checkbtn
;
1284 page
->page
.widget
= table
;
1287 static void prefs_folder_item_templates_destroy_widget_func(PrefsPage
*page_
)
1289 /* FolderItemTemplatesPage *page = (FolderItemTemplatesPage *) page_; */
1292 /** \brief Save the prefs in page to folder.
1294 * If the folder is not the one specified in page->item, then only those properties
1295 * that have the relevant 'apply to sub folders' button checked are saved
1297 static void templates_save_folder_prefs(FolderItem
*folder
, FolderItemTemplatesPage
*page
)
1299 FolderItemPrefs
*prefs
= folder
->prefs
;
1300 gboolean all
= FALSE
;
1302 if (folder
->path
== NULL
)
1305 if (page
->item
== folder
)
1308 g_return_if_fail(prefs
!= NULL
);
1310 /* save and check formats */
1312 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->new_msg_format_rec_checkbtn
))) {
1313 prefs
->compose_with_format
=
1314 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_compose_with_format
));
1315 prefs
->compose_subject_format
= pref_get_pref_from_entry(
1316 GTK_ENTRY(page
->compose_subject_format
));
1317 prefs
->compose_body_format
= pref_get_pref_from_textview(
1318 GTK_TEXT_VIEW(page
->compose_body_format
));
1319 quotefmt_check_new_msg_formats(prefs
->compose_with_format
,
1320 prefs
->compose_subject_format
,
1321 prefs
->compose_body_format
);
1324 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->reply_format_rec_checkbtn
))) {
1325 prefs
->reply_with_format
=
1326 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_reply_with_format
));
1327 prefs
->reply_quotemark
= gtk_editable_get_chars(
1328 GTK_EDITABLE(page
->reply_quotemark
), 0, -1);
1329 prefs
->reply_body_format
= pref_get_pref_from_textview(
1330 GTK_TEXT_VIEW(page
->reply_body_format
));
1331 quotefmt_check_reply_formats(prefs
->reply_with_format
,
1332 prefs
->reply_quotemark
,
1333 prefs
->reply_body_format
);
1336 if (all
|| gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->forward_format_rec_checkbtn
))) {
1337 prefs
->forward_with_format
=
1338 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_forward_with_format
));
1339 prefs
->forward_quotemark
= gtk_editable_get_chars(
1340 GTK_EDITABLE(page
->forward_quotemark
), 0, -1);
1341 prefs
->forward_body_format
= pref_get_pref_from_textview(
1342 GTK_TEXT_VIEW(page
->forward_body_format
));
1343 quotefmt_check_forward_formats(prefs
->forward_with_format
,
1344 prefs
->forward_quotemark
,
1345 prefs
->forward_body_format
);
1348 folder_item_prefs_save_config(folder
);
1351 static gboolean
templates_save_recurse_func(GNode
*node
, gpointer data
)
1353 FolderItem
*item
= (FolderItem
*) node
->data
;
1354 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) data
;
1356 g_return_val_if_fail(item
!= NULL
, TRUE
);
1357 g_return_val_if_fail(page
!= NULL
, TRUE
);
1359 templates_save_folder_prefs(item
, page
);
1361 /* optimise by not continuing if none of the 'apply to sub folders'
1362 check boxes are selected - and optimise the checking by only doing
1364 if ((node
== page
->item
->node
) &&
1365 !(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->new_msg_format_rec_checkbtn
)) ||
1366 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->reply_format_rec_checkbtn
)) ||
1367 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->forward_format_rec_checkbtn
))))
1375 static void prefs_folder_item_templates_save_func(PrefsPage
*page_
)
1377 FolderItemTemplatesPage
*page
= (FolderItemTemplatesPage
*) page_
;
1379 g_node_traverse(page
->item
->node
, G_PRE_ORDER
, G_TRAVERSE_ALL
,
1380 -1, templates_save_recurse_func
, page
);
1384 static gint
prefs_folder_item_chmod_mode(gchar
*folder_chmod
)
1390 newmode
= strtol(folder_chmod
, &tmp
, 8);
1391 if (!(*(folder_chmod
) && !(*tmp
)))
1398 static void folder_color_set_dialog(GtkWidget
*widget
, gpointer data
)
1400 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*) data
;
1403 rgbcolor
= colorsel_select_color_rgb(_("Pick color for folder"),
1404 page
->folder_color
);
1405 gtkut_set_widget_bgcolor_rgb(page
->folder_color_btn
, rgbcolor
);
1406 page
->folder_color
= rgbcolor
;
1409 static regex_t
*summary_compile_simplify_regexp(gchar
*simplify_subject_regexp
)
1412 gchar buf
[BUFFSIZE
];
1413 regex_t
*preg
= NULL
;
1415 preg
= g_new0(regex_t
, 1);
1417 err
= string_match_precompile(simplify_subject_regexp
,
1418 preg
, REG_EXTENDED
);
1420 regerror(err
, preg
, buf
, BUFFSIZE
);
1428 static void folder_regexp_test_cb(GtkWidget
*widget
, gpointer data
)
1430 static GdkColor red
;
1431 static gboolean colors_initialised
= FALSE
;
1432 static gchar buf
[BUFFSIZE
];
1433 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*)data
;
1434 gchar
*test_string
, *regexp
;
1437 regexp
= g_strdup(gtk_entry_get_text(GTK_ENTRY(page
->entry_simplify_subject
)));
1438 test_string
= g_strdup(gtk_entry_get_text(GTK_ENTRY(page
->entry_regexp_test_string
)));
1440 if (!regexp
|| !regexp
[0]) {
1441 gtk_widget_modify_base(page
->entry_simplify_subject
,
1442 GTK_STATE_NORMAL
, NULL
);
1444 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_result
), test_string
);
1445 g_free(test_string
);
1450 if (!test_string
|| !test_string
[0]) {
1455 if (!colors_initialised
) {
1456 gdk_color_parse("#ff7070", &red
);
1457 colors_initialised
= gdk_colormap_alloc_color(
1458 gdk_colormap_get_system(), &red
, FALSE
, TRUE
);
1461 preg
= summary_compile_simplify_regexp(regexp
);
1462 if (colors_initialised
) {
1463 gtk_widget_modify_base(page
->entry_simplify_subject
,
1464 GTK_STATE_NORMAL
, preg
? NULL
: &red
);
1468 string_remove_match(buf
, BUFFSIZE
, test_string
, preg
);
1470 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_result
), buf
);
1476 g_free(test_string
);
1480 static gchar
*folder_regexp_get_subject_example(void)
1482 MsgInfo
*msginfo_selected
;
1483 SummaryView
*summaryview
= NULL
;
1485 if (!mainwindow_get_mainwindow())
1487 summaryview
= mainwindow_get_mainwindow()->summaryview
;
1489 msginfo_selected
= summary_get_selected_msg(summaryview
);
1490 return msginfo_selected
? g_strdup(msginfo_selected
->subject
) : NULL
;
1493 static void folder_regexp_set_subject_example_cb(GtkWidget
*widget
, gpointer data
)
1495 FolderItemGeneralPage
*page
= (FolderItemGeneralPage
*)data
;
1497 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page
->checkbtn_simplify_subject
))) {
1498 gchar
*subject
= folder_regexp_get_subject_example();
1500 gtk_entry_set_text(GTK_ENTRY(page
->entry_regexp_test_string
), subject
);
1506 static void register_general_page()
1508 static gchar
*pfi_general_path
[2];
1509 static FolderItemGeneralPage folder_item_general_page
;
1511 pfi_general_path
[0] = _("General");
1512 pfi_general_path
[1] = NULL
;
1514 folder_item_general_page
.page
.path
= pfi_general_path
;
1515 folder_item_general_page
.page
.create_widget
= prefs_folder_item_general_create_widget_func
;
1516 folder_item_general_page
.page
.destroy_widget
= prefs_folder_item_general_destroy_widget_func
;
1517 folder_item_general_page
.page
.save_page
= prefs_folder_item_general_save_func
;
1519 prefs_folder_item_register_page((PrefsPage
*) &folder_item_general_page
);
1523 static void register_compose_page(void)
1525 static gchar
*pfi_compose_path
[2];
1526 static FolderItemComposePage folder_item_compose_page
;
1528 pfi_compose_path
[0] = _("Compose");
1529 pfi_compose_path
[1] = NULL
;
1531 folder_item_compose_page
.page
.path
= pfi_compose_path
;
1532 folder_item_compose_page
.page
.create_widget
= prefs_folder_item_compose_create_widget_func
;
1533 folder_item_compose_page
.page
.destroy_widget
= prefs_folder_item_compose_destroy_widget_func
;
1534 folder_item_compose_page
.page
.save_page
= prefs_folder_item_compose_save_func
;
1536 prefs_folder_item_register_page((PrefsPage
*) &folder_item_compose_page
);
1539 static void register_templates_page(void)
1541 static gchar
*pfi_templates_path
[2];
1542 static FolderItemTemplatesPage folder_item_templates_page
;
1544 pfi_templates_path
[0] = _("Templates");
1545 pfi_templates_path
[1] = NULL
;
1547 folder_item_templates_page
.page
.path
= pfi_templates_path
;
1548 folder_item_templates_page
.page
.create_widget
= prefs_folder_item_templates_create_widget_func
;
1549 folder_item_templates_page
.page
.destroy_widget
= prefs_folder_item_templates_destroy_widget_func
;
1550 folder_item_templates_page
.page
.save_page
= prefs_folder_item_templates_save_func
;
1552 prefs_folder_item_register_page((PrefsPage
*) &folder_item_templates_page
);
1555 static GSList
*prefs_pages
= NULL
;
1557 void prefs_folder_item_open(FolderItem
*item
)
1560 if (prefs_pages
== NULL
) {
1561 register_general_page();
1562 register_compose_page();
1563 register_templates_page();
1567 id
= folder_item_get_identifier (item
);
1570 id
= g_strdup(item
->name
);
1573 title
= g_strdup_printf (_("Properties for folder %s"), id
);
1575 prefswindow_open(title
, prefs_pages
, item
,
1576 &prefs_common
.folderitemwin_width
, &prefs_common
.folderitemwin_height
);
1581 void prefs_folder_item_register_page(PrefsPage
*page
)
1583 prefs_pages
= g_slist_append(prefs_pages
, page
);
1586 void prefs_folder_item_unregister_page(PrefsPage
*page
)
1588 prefs_pages
= g_slist_remove(prefs_pages
, page
);