diff options
| author | Matthew Barnes <mbarnes@redhat.com> | 2013-11-17 02:10:04 +0800 |
|---|---|---|
| committer | Matthew Barnes <mbarnes@redhat.com> | 2013-11-17 08:24:02 +0800 |
| commit | 19708882803f5dbd763b202da297c8cbf8f6b7f7 (patch) | |
| tree | 741846881e718abd3a9f32b79d2aaa74f559ca1a | |
| parent | a1f9e24189fac8a8420936f08311f535c7c94ccd (diff) | |
| download | gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar.gz gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar.bz2 gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar.lz gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar.xz gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.tar.zst gsoc2013-evolution-19708882803f5dbd763b202da297c8cbf8f6b7f7.zip | |
Add em_folder_tree_ref_selected_store().
Replaces em_folder_tree_get_selected_store().
Same as before, but adds a reference to the returned CamelStore.
| -rw-r--r-- | mail/em-folder-tree.c | 16 | ||||
| -rw-r--r-- | mail/em-folder-tree.h | 2 | ||||
| -rw-r--r-- | modules/mail/e-mail-shell-view-actions.c | 19 |
3 files changed, 30 insertions, 7 deletions
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index aaf3488307..9add844e0b 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -3432,8 +3432,20 @@ em_folder_tree_get_selected_uri (EMFolderTree *folder_tree) return folder_uri; } +/** + * em_folder_tree_ref_selected_store: + * @folder_tree: an #EMFolderTree + * + * Returns the #CamelStore for the selected row in @folder_tree, or %NULL + * if no row is selected. + * + * The returned #CamelStore is referenced for thread-safety and must be + * unreferenced with g_object_unref() when finished with it. + * + * Returns: a #CamelStore, or %NULL + **/ CamelStore * -em_folder_tree_get_selected_store (EMFolderTree *folder_tree) +em_folder_tree_ref_selected_store (EMFolderTree *folder_tree) { GtkTreeView *tree_view; GtkTreeSelection *selection; @@ -3454,7 +3466,7 @@ em_folder_tree_get_selected_store (EMFolderTree *folder_tree) model, &iter, COL_POINTER_CAMEL_STORE, &store, -1); - return CAMEL_IS_STORE (store) ? store : NULL; + return (store != NULL) ? g_object_ref (store) : NULL; } void diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h index adf4528c35..ae54133e8c 100644 --- a/mail/em-folder-tree.h +++ b/mail/em-folder-tree.h @@ -133,7 +133,7 @@ gboolean em_folder_tree_store_root_selected (EMFolderTree *folder_tree, CamelStore **out_store); gchar * em_folder_tree_get_selected_uri (EMFolderTree *folder_tree); -CamelStore * em_folder_tree_get_selected_store +CamelStore * em_folder_tree_ref_selected_store (EMFolderTree *folder_tree); gboolean em_folder_tree_create_folder (EMFolderTree *folder_tree, const gchar *full_name, diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c index b7dc6c78ca..26f04b3649 100644 --- a/modules/mail/e-mail-shell-view-actions.c +++ b/modules/mail/e-mail-shell-view-actions.c @@ -51,7 +51,7 @@ action_mail_account_disable_cb (GtkAction *action, E_MAIL_UI_SESSION (session)); folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); - store = em_folder_tree_get_selected_store (folder_tree); + store = em_folder_tree_ref_selected_store (folder_tree); g_return_if_fail (store != NULL); e_mail_account_store_disable_service ( @@ -60,6 +60,8 @@ action_mail_account_disable_cb (GtkAction *action, CAMEL_SERVICE (store)); e_shell_view_update_actions (shell_view); + + g_object_unref (store); } static void @@ -86,7 +88,7 @@ action_mail_account_properties_cb (GtkAction *action, shell = e_shell_backend_get_shell (shell_backend); folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); - store = em_folder_tree_get_selected_store (folder_tree); + store = em_folder_tree_ref_selected_store (folder_tree); g_return_if_fail (store != NULL); service = CAMEL_SERVICE (store); @@ -100,6 +102,7 @@ action_mail_account_properties_cb (GtkAction *action, GTK_WINDOW (shell_window), source); g_object_unref (source); + g_object_unref (store); } static void @@ -148,7 +151,7 @@ action_mail_account_refresh_cb (GtkAction *action, mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar; folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); - store = em_folder_tree_get_selected_store (folder_tree); + store = em_folder_tree_ref_selected_store (folder_tree); g_return_if_fail (store != NULL); mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); @@ -160,6 +163,8 @@ action_mail_account_refresh_cb (GtkAction *action, CAMEL_STORE_FOLDER_INFO_RECURSIVE, G_PRIORITY_DEFAULT, cancellable, account_refresh_folder_info_received_cb, activity); + + g_object_unref (store); } static void @@ -1468,11 +1473,17 @@ action_mail_tools_subscriptions_cb (GtkAction *action, mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar; folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); - store = em_folder_tree_get_selected_store (folder_tree); session = em_folder_tree_get_session (folder_tree); + /* The subscription editor's initial store can be NULL. */ + store = em_folder_tree_ref_selected_store (folder_tree); + dialog = em_subscription_editor_new ( GTK_WINDOW (shell_window), session, store); + + if (store != NULL) + g_object_unref (store); + gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } |
