diff options
-rw-r--r-- | mail/ChangeLog | 16 | ||||
-rw-r--r-- | mail/em-folder-browser.c | 3 | ||||
-rw-r--r-- | mail/em-folder-utils.c | 3 | ||||
-rw-r--r-- | mail/em-folder-view.c | 9 | ||||
-rw-r--r-- | mail/mail-vfolder.c | 36 | ||||
-rw-r--r-- | mail/mail-vfolder.h | 1 | ||||
-rw-r--r-- | plugins/groupwise-features/ChangeLog | 7 | ||||
-rw-r--r-- | plugins/groupwise-features/share-folder-common.c | 3 |
8 files changed, 46 insertions, 32 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 9ef98523fc..3c1d1685c4 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,19 @@ +2008-01-24 Milan Crha <mcrha@redhat.com> + + ** Part of bug #511488 + + * mail-vfolder.h: + * mail-vfolder.c: (vfolder_loaded): Function dropped. + * mail-vfolder.c: (vfolder_load_storage): Allow to call this function + more than once, but do load the storage only once. + * em-folder-utils.c: (emfu_popup_new_folder_response): + * mail-vfolder.c: (vfolder_edit), (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. + 2008-01-24 Srinivasa Ragavan <sragavan@novell.com> ** Fix for bug #510779 diff --git a/mail/em-folder-browser.c b/mail/em-folder-browser.c index 716235a203..0ef7be078b 100644 --- a/mail/em-folder-browser.c +++ b/mail/em-folder-browser.c @@ -761,8 +761,7 @@ emfb_search_menu_activated(ESearchBar *esb, int id, EMFolderBrowser *emfb) char *name, *text; /* ensures vfolder is running */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); rule = vfolder_clone_rule (efb->current_query); text = e_search_bar_get_text(esb); diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c index e66213f9d6..d030731a90 100644 --- a/mail/em-folder-utils.c +++ b/mail/em-folder-utils.c @@ -711,8 +711,7 @@ emfu_popup_new_folder_response (EMFolderSelector *emfs, int response, gpointer d EMVFolderRule *rule; /* ensures vfolder is running */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); rule = em_vfolder_rule_new(); filter_rule_set_name((FilterRule *)rule, path); diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c index e9f798ca2d..6fdafc0dcf 100644 --- a/mail/em-folder-view.c +++ b/mail/em-folder-view.c @@ -1958,8 +1958,7 @@ 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 (); + vfolder_load_storage (); addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), url->path); @@ -1988,8 +1987,7 @@ 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 (); + vfolder_load_storage (); addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (addr), url->path); @@ -2021,8 +2019,7 @@ vfolder_type_current (EMFolderView *emfv, int type) if (uids->len == 1) { /* ensures vfolder is running */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); vfolder_type_uid (emfv->folder, (char *) uids->pdata[0], emfv->folder_uri, type); } diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c index 14655a769f..75e0dc11f8 100644 --- a/mail/mail-vfolder.c +++ b/mail/mail-vfolder.c @@ -896,12 +896,25 @@ store_folder_renamed(CamelObject *o, void *event_data, void *data) void vfolder_load_storage(void) { + /* lock for loading storage, it is safe to call it more than once */ + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; + char *user, *storeuri; FilterRule *rule; char *xmlfile; + pthread_mutex_lock (&lock); + + if (vfolder_hash) { + /* we have already initialized */ + pthread_mutex_unlock (&lock); + return; + } + vfolder_hash = g_hash_table_new(g_str_hash, g_str_equal); + pthread_mutex_unlock (&lock); + /* first, create the vfolder store, and set it up */ storeuri = g_strdup_printf("vfolder:%s/mail/vfolder", mail_component_peek_base_directory (mail_component_peek ())); vfolder_store = camel_session_get_store(session, storeuri, NULL); @@ -947,17 +960,6 @@ 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) { @@ -1002,8 +1004,7 @@ vfolder_edit (void) } /* ensures vfolder is running */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); vfolder_editor = GTK_WIDGET (em_vfolder_editor_new (context)); gtk_window_set_title (GTK_WINDOW (vfolder_editor), _("Search Folders")); @@ -1130,8 +1131,7 @@ vfolder_gui_add_rule(EMVFolderRule *rule) GtkDialog *gd; /* this should be done before we call this function */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); w = filter_rule_get_widget((FilterRule *)rule, (RuleContext *)context); @@ -1163,8 +1163,7 @@ 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 (); + vfolder_load_storage (); rule = (EMVFolderRule*)em_vfolder_rule_from_message(context, msg, flags, source); vfolder_gui_add_rule(rule); @@ -1178,8 +1177,7 @@ 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 (); + 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 557dbbb340..651ace301b 100644 --- a/mail/mail-vfolder.h +++ b/mail/mail-vfolder.h @@ -10,7 +10,6 @@ struct _EMVFolderRule; struct _CamelInternetAddress; void vfolder_load_storage(void); -gboolean vfolder_loaded (void); void vfolder_revert(void); void vfolder_edit (void); diff --git a/plugins/groupwise-features/ChangeLog b/plugins/groupwise-features/ChangeLog index b11ca999c1..77d14ff61f 100644 --- a/plugins/groupwise-features/ChangeLog +++ b/plugins/groupwise-features/ChangeLog @@ -1,3 +1,10 @@ +2008-01-24 Milan Crha <mcrha@redhat.com> + + ** Part of bug #511488 + + * share-folder-common.c: (users_dialog_response): The logic to check + if vfolder is running has been changed, so reflect it here too. + 2008-01-07 Milan Crha <mcrha@redhat.com> ** Fix for bug #300336 diff --git a/plugins/groupwise-features/share-folder-common.c b/plugins/groupwise-features/share-folder-common.c index 9427788de3..36b2d15449 100644 --- a/plugins/groupwise-features/share-folder-common.c +++ b/plugins/groupwise-features/share-folder-common.c @@ -274,8 +274,7 @@ users_dialog_response(GtkWidget *dialog, int response, struct ShareInfo *ssi) EMVFolderRule *rule; /* ensures vfolder is running */ - if (!vfolder_loaded ()) - vfolder_load_storage (); + vfolder_load_storage (); rule = em_vfolder_rule_new(); filter_rule_set_name((FilterRule *)rule, path); |