From 39be7e3d9cc8d42b63ec88aecb7756440d0b96ae Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 7 Jan 2008 12:12:13 +0000 Subject: ** Fix for bug #300336 2008-01-07 Milan Crha ** Fix for bug #300336 * plugins/groupwise-features/share-folder-common.c: (users_dialog_response): Ensure vfolder is running. * mail/mail-vfolder.h: (vfolder_loaded): * mail/mail-vfolder.c: (vfolder_loaded): New helper function. * mail/em-folder-utils.c: (emfu_popup_new_folder_response): * mail/mail-vfolder.c: (vfolder_gui_add_rule), (vfolder_gui_add_from_message), (vfolder_gui_add_from_address): * mail/em-folder-browser.c: (emfb_search_menu_activated): * mail/em-folder-view.c: (emp_uri_popup_vfolder_sender), (emp_uri_popup_vfolder_recipient), (vfolder_type_current): Ensure vfolder is running. * mail/mail-component.c: (mc_startup): Do not start vfolder when disabled by option '/apps/evolution/mail/display/enable_vfolders'. * mail/evolution-mail.schemas.in: Added schema for new option. * mail/mail-config.glade: * mail/em-mailer-prefs.h: * mail/em-mailer-prefs.c: Added checkbox for "Enable Search Folders" option. Note: if your schema failed to install, then the search folders will be hidden. Enable by hand then. svn path=/trunk/; revision=34775 --- mail/ChangeLog | 20 +++++++++++++++ mail/em-folder-browser.c | 7 +++++- mail/em-folder-utils.c | 4 +++ mail/em-folder-view.c | 15 ++++++++++- mail/em-mailer-prefs.c | 5 ++++ mail/em-mailer-prefs.h | 1 + mail/evolution-mail.schemas.in | 14 +++++++++++ mail/mail-component.c | 7 +++++- mail/mail-config.glade | 56 ++++++++++++++++++++++++++++++++++++++++++ mail/mail-vfolder.c | 23 +++++++++++++++++ mail/mail-vfolder.h | 1 + 11 files changed, 150 insertions(+), 3 deletions(-) (limited to 'mail') diff --git a/mail/ChangeLog b/mail/ChangeLog index 6652c98483..1ae6c58b6c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,23 @@ +2008-01-07 Milan Crha + + ** Fix for bug #300336 + + * mail-vfolder.h: (vfolder_loaded): + * mail-vfolder.c: (vfolder_loaded): New helper function. + * em-folder-utils.c: (emfu_popup_new_folder_response): + * mail-vfolder.c: (vfolder_gui_add_rule), + (vfolder_gui_add_from_message), (vfolder_gui_add_from_address): + * em-folder-browser.c: (emfb_search_menu_activated): + * em-folder-view.c: (emp_uri_popup_vfolder_sender), + (emp_uri_popup_vfolder_recipient), (vfolder_type_current): + Ensure vfolder is running. + * mail-component.c: (mc_startup): Do not start vfolder when + disabled by option '/apps/evolution/mail/display/enable_vfolders'. + * evolution-mail.schemas.in: Added schema for new option. + * mail-config.glade: + * em-mailer-prefs.h: + * em-mailer-prefs.c: Added checkbox for "Enable Search Folders" option. + 2008-01-06 Gilles Dartiguelongue ** Fix bug #497914 diff --git a/mail/em-folder-browser.c b/mail/em-folder-browser.c index 521f7df518..5b11c11a18 100644 --- a/mail/em-folder-browser.c +++ b/mail/em-folder-browser.c @@ -757,9 +757,14 @@ emfb_search_menu_activated(ESearchBar *esb, int id, EMFolderBrowser *emfb) case ESB_SAVE: d(printf("Save vfolder\n")); if (efb->current_query) { - FilterRule *rule = vfolder_clone_rule(efb->current_query); + FilterRule *rule; char *name, *text; + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + + rule = vfolder_clone_rule (efb->current_query); text = e_search_bar_get_text(esb); name = g_strdup_printf("%s %s", rule->name, (text&&text[0])?text:"''"); g_free (text); diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c index a12b758f82..e32efee827 100644 --- a/mail/em-folder-utils.c +++ b/mail/em-folder-utils.c @@ -707,6 +707,10 @@ emfu_popup_new_folder_response (EMFolderSelector *emfs, int response, gpointer d if (CAMEL_IS_VEE_STORE(store)) { EMVFolderRule *rule; + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + rule = em_vfolder_rule_new(); filter_rule_set_name((FilterRule *)rule, path); vfolder_gui_add_rule(rule); diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c index 1758735ab3..914f335063 100644 --- a/mail/em-folder-view.c +++ b/mail/em-folder-view.c @@ -1940,6 +1940,10 @@ emp_uri_popup_vfolder_sender(EPopup *ep, EPopupItem *pitem, void *data) } if (url->path && url->path[0]) { + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), url->path); vfolder_gui_add_from_address (addr, AUTO_FROM, emfv->folder_uri); @@ -1966,6 +1970,10 @@ emp_uri_popup_vfolder_recipient(EPopup *ep, EPopupItem *pitem, void *data) } if (url->path && url->path[0]) { + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), url->path); vfolder_gui_add_from_address (addr, AUTO_TO, emfv->folder_uri); @@ -1994,8 +2002,13 @@ vfolder_type_current (EMFolderView *emfv, int type) uids = message_list_get_selected (emfv->list); - if (uids->len == 1) + if (uids->len == 1) { + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + vfolder_type_uid (emfv->folder, (char *) uids->pdata[0], emfv->folder_uri, type); + } em_utils_uids_free (uids); } diff --git a/mail/em-mailer-prefs.c b/mail/em-mailer-prefs.c index 5a29b54456..ef4a6d64c8 100644 --- a/mail/em-mailer-prefs.c +++ b/mail/em-mailer-prefs.c @@ -1128,6 +1128,11 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs) gtk_widget_set_sensitive ((GtkWidget *) prefs->citation_color, FALSE); g_free (buf); + prefs->enable_search_folders = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEnableSearchFolders")); + toggle_button_init (prefs, prefs->enable_search_folders, FALSE, + "/apps/evolution/mail/display/enable_vfolders", + G_CALLBACK (toggle_button_toggled)); + /* Deleting Mail */ prefs->empty_trash = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkEmptyTrashOnExit")); prefs->empty_trash_days = GTK_OPTION_MENU (glade_xml_get_widget (gui, "omenuEmptyTrashDays")); diff --git a/mail/em-mailer-prefs.h b/mail/em-mailer-prefs.h index 8c25be69f0..a9a4327cb7 100644 --- a/mail/em-mailer-prefs.h +++ b/mail/em-mailer-prefs.h @@ -80,6 +80,7 @@ struct _EMMailerPrefs { struct _GtkOptionMenu *charset; struct _GtkToggleButton *citation_highlight; struct _GtkColorButton *citation_color; + struct _GtkToggleButton *enable_search_folders; struct _GtkToggleButton *magic_spacebar; /* Deleting Mail */ diff --git a/mail/evolution-mail.schemas.in b/mail/evolution-mail.schemas.in index 381fdd5a71..5e712bb805 100644 --- a/mail/evolution-mail.schemas.in +++ b/mail/evolution-mail.schemas.in @@ -427,6 +427,20 @@ + + /schemas/apps/evolution/mail/display/enable_vfolders + /apps/evolution/mail/display/enable_vfolders + evolution-mail + bool + true + + Enable Search Folders + + Enable Search Folders on startup. + + + + /schemas/apps/evolution/mail/display/safe_list /apps/evolution/mail/display/safe_list diff --git a/mail/mail-component.c b/mail/mail-component.c index e4e2cbb6c5..036ad0a667 100644 --- a/mail/mail-component.c +++ b/mail/mail-component.c @@ -368,6 +368,7 @@ static void mc_startup(MailComponent *mc) { static int started = 0; + GConfClient *gconf; if (started) return; @@ -375,7 +376,11 @@ mc_startup(MailComponent *mc) mc_setup_local_store(mc); load_accounts(mc, mail_config_get_accounts()); - vfolder_load_storage(); + + gconf = mail_config_get_gconf_client(); + + if (gconf_client_get_bool (gconf, "/apps/evolution/mail/display/enable_vfolders", NULL)) + vfolder_load_storage(); } static void diff --git a/mail/mail-config.glade b/mail/mail-config.glade index be14dc151f..be41d9fb59 100644 --- a/mail/mail-config.glade +++ b/mail/mail-config.glade @@ -5268,6 +5268,62 @@ For example: "Work" or "Personal" True + + + True + False + 6 + + + + True + True + Enable Sea_rch Folders + True + GTK_RELIEF_NORMAL + True + True + False + True + + + 0 + False + False + + + + + + True + (Note: Requires restart) + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 0 + True + True + + 0 diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 6397ca772a..6a959a2280 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -948,6 +948,17 @@ vfolder_load_storage(void) g_free(storeuri); } +/** + * vfolder_loaded + * Test if we have vfolder already inited or not. + * @return Whether was vfolder inited or not (by call of @ref vfolder_load_storage). + **/ +gboolean +vfolder_loaded (void) +{ + return vfolder_hash != NULL; +} + void vfolder_revert(void) { @@ -1113,6 +1124,10 @@ vfolder_gui_add_rule(EMVFolderRule *rule) GtkWidget *w; GtkDialog *gd; + /* this should be done before we call this function */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + w = filter_rule_get_widget((FilterRule *)rule, (RuleContext *)context); gd = (GtkDialog *)gtk_dialog_new_with_buttons(_("New Search Folder"), @@ -1142,6 +1157,10 @@ vfolder_gui_add_from_message(CamelMimeMessage *msg, int flags, const char *sourc g_return_if_fail (msg != NULL); + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + rule = (EMVFolderRule*)em_vfolder_rule_from_message(context, msg, flags, source); vfolder_gui_add_rule(rule); } @@ -1153,6 +1172,10 @@ vfolder_gui_add_from_address(CamelInternetAddress *addr, int flags, const char * g_return_if_fail (addr != NULL); + /* ensures vfolder is running */ + if (!vfolder_loaded ()) + vfolder_load_storage (); + rule = (EMVFolderRule*)em_vfolder_rule_from_address(context, addr, flags, source); vfolder_gui_add_rule(rule); } diff --git a/mail/mail-vfolder.h b/mail/mail-vfolder.h index 651ace301b..557dbbb340 100644 --- a/mail/mail-vfolder.h +++ b/mail/mail-vfolder.h @@ -10,6 +10,7 @@ struct _EMVFolderRule; struct _CamelInternetAddress; void vfolder_load_storage(void); +gboolean vfolder_loaded (void); void vfolder_revert(void); void vfolder_edit (void); -- cgit