[evolution] Add em_folder_tree_ref_selected_store().



commit 19708882803f5dbd763b202da297c8cbf8f6b7f7
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Nov 16 13:10:04 2013 -0500

    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.

 mail/em-folder-tree.c                    |   16 ++++++++++++++--
 mail/em-folder-tree.h                    |    2 +-
 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 aaf3488..9add844 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 adf4528..ae54133 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 b7dc6c7..26f04b3 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);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]