[evolution-data-server] Add e_book_client_view_ref_client().



commit 9ff43430bef0a2f169f1447a0c8edf68f692543a
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Mar 13 08:39:41 2013 -0400

    Add e_book_client_view_ref_client().
    
    Replaces e_book_client_view_get_client().

 addressbook/libebook/e-book-client-view.c          |  109 +++++++++++++++++--
 addressbook/libebook/e-book-client-view.h          |    7 +-
 .../backends/contacts/e-cal-backend-contacts.c     |   16 +++-
 .../addressbook/libebook/libebook-sections.txt     |    4 +-
 tests/libebook/client/test-client-photo-is-uri.c   |    3 +-
 tests/libebook/client/test-client-revision-view.c  |    8 ++-
 .../client/test-client-suppress-notifications.c    |    8 ++-
 tests/libebook/client/test-client-uid-only-view.c  |    8 ++-
 8 files changed, 143 insertions(+), 20 deletions(-)
---
diff --git a/addressbook/libebook/e-book-client-view.c b/addressbook/libebook/e-book-client-view.c
index dd91607..a06fb4c 100644
--- a/addressbook/libebook/e-book-client-view.c
+++ b/addressbook/libebook/e-book-client-view.c
@@ -227,11 +227,17 @@ book_client_view_emit_objects_added (EBookClientView *client_view,
        GMainContext *main_context;
        SignalClosure *signal_closure;
 
+       client = e_book_client_view_ref_client (client_view);
+
+       /* Suppress any further signal emissions if
+        * our EBookClient has already been finalized. */
+       if (client == NULL)
+               return;
+
        signal_closure = g_slice_new0 (SignalClosure);
        g_weak_ref_set (&signal_closure->client_view, client_view);
        signal_closure->object_list = object_list;  /* takes ownership */
 
-       client = e_book_client_view_get_client (client_view);
        main_context = e_client_ref_main_context (E_CLIENT (client));
 
        idle_source = g_idle_source_new ();
@@ -244,6 +250,8 @@ book_client_view_emit_objects_added (EBookClientView *client_view,
        g_source_unref (idle_source);
 
        g_main_context_unref (main_context);
+
+       g_object_unref (client);
 }
 
 static void
@@ -255,11 +263,17 @@ book_client_view_emit_objects_modified (EBookClientView *client_view,
        GMainContext *main_context;
        SignalClosure *signal_closure;
 
+       client = e_book_client_view_ref_client (client_view);
+
+       /* Suppress any further signal emissions if
+        * our EBookClient has already been finalized. */
+       if (client == NULL)
+               return;
+
        signal_closure = g_slice_new0 (SignalClosure);
        g_weak_ref_set (&signal_closure->client_view, client_view);
        signal_closure->object_list = object_list;  /* takes ownership */
 
-       client = e_book_client_view_get_client (client_view);
        main_context = e_client_ref_main_context (E_CLIENT (client));
 
        idle_source = g_idle_source_new ();
@@ -469,6 +483,13 @@ book_client_view_objects_removed_cb (EGdbusBookView *object,
        if (!client_view->priv->running)
                return;
 
+       client = e_book_client_view_ref_client (client_view);
+
+       /* Suppress any further signal emissions if
+        * our EBookClient has already been finalized. */
+       if (client == NULL)
+               return;
+
        for (ii = 0; ids[ii] != NULL; ii++)
                list = g_slist_prepend (list, g_strdup (ids[ii]));
 
@@ -476,7 +497,6 @@ book_client_view_objects_removed_cb (EGdbusBookView *object,
        g_weak_ref_set (&signal_closure->client_view, client_view);
        signal_closure->string_list = g_slist_reverse (list);
 
-       client = e_book_client_view_get_client (client_view);
        main_context = e_client_ref_main_context (E_CLIENT (client));
 
        idle_source = g_idle_source_new ();
@@ -489,6 +509,8 @@ book_client_view_objects_removed_cb (EGdbusBookView *object,
        g_source_unref (idle_source);
 
        g_main_context_unref (main_context);
+
+       g_object_unref (client);
 }
 
 static void
@@ -505,12 +527,18 @@ book_client_view_progress_cb (EGdbusBookView *object,
        if (!client_view->priv->running)
                return;
 
+       client = e_book_client_view_ref_client (client_view);
+
+       /* Suppress any further signal emissions if
+        * our EBookClient has already been finalized. */
+       if (client == NULL)
+               return;
+
        signal_closure = g_slice_new0 (SignalClosure);
        g_weak_ref_set (&signal_closure->client_view, client_view);
        signal_closure->message = g_strdup (message);
        signal_closure->percent = percent;
 
-       client = e_book_client_view_get_client (client_view);
        main_context = e_client_ref_main_context (E_CLIENT (client));
 
        idle_source = g_idle_source_new ();
@@ -523,6 +551,8 @@ book_client_view_progress_cb (EGdbusBookView *object,
        g_source_unref (idle_source);
 
        g_main_context_unref (main_context);
+
+       g_object_unref (client);
 }
 
 static void
@@ -538,11 +568,17 @@ book_client_view_complete_cb (EGdbusBookView *object,
        if (!client_view->priv->running)
                return;
 
+       client = e_book_client_view_ref_client (client_view);
+
+       /* Suppress any further signal emissions if
+        * our EBookClient has already been finalized. */
+       if (client == NULL)
+               return;
+
        signal_closure = g_slice_new0 (SignalClosure);
        g_weak_ref_set (&signal_closure->client_view, client_view);
        e_gdbus_templates_decode_error (in_error_strv, &signal_closure->error);
 
-       client = e_book_client_view_get_client (client_view);
        main_context = e_client_ref_main_context (E_CLIENT (client));
 
        idle_source = g_idle_source_new ();
@@ -557,6 +593,8 @@ book_client_view_complete_cb (EGdbusBookView *object,
        g_main_context_unref (main_context);
 
        client_view->priv->complete = TRUE;
+
+       g_object_unref (client);
 }
 
 static void
@@ -659,9 +697,9 @@ book_client_view_get_property (GObject *object,
 {
        switch (property_id) {
                case PROP_CLIENT:
-                       g_value_set_object (
+                       g_value_take_object (
                                value,
-                               e_book_client_view_get_client (
+                               e_book_client_view_ref_client (
                                E_BOOK_CLIENT_VIEW (object)));
                        return;
 
@@ -931,12 +969,35 @@ e_book_client_view_init (EBookClientView *view)
 }
 
 /**
+ * e_book_client_view_ref_client:
+ * @view: an #EBookClientView
+ *
+ * Returns the #EBookClientView:client associated with @view.
+ *
+ * The returned #EBookClient is referenced for thread-safety.  Unreference
+ * the #EBookClient with g_object_unref() when finished with it.
+ *
+ * Returns: an #EBookClient
+ *
+ * Since: 3.10
+ **/
+EBookClient *
+e_book_client_view_ref_client (EBookClientView *view)
+{
+       g_return_val_if_fail (E_IS_BOOK_CLIENT_VIEW (view), NULL);
+
+       return g_object_ref (view->priv->client);
+}
+
+/**
  * e_book_client_view_get_client:
  * @view: an #EBookClientView
  *
- * Returns the #EBookClient associated with @view.
+ * Returns the #EBookClientView:client associated with @view.
  *
  * Returns: (transfer none): an #EBookClient
+ *
+ * Deprecated: 3.10: Use e_book_client_view_ref_client() instead.
  **/
 EBookClient *
 e_book_client_view_get_client (EBookClientView *view)
@@ -993,11 +1054,15 @@ void
 e_book_client_view_start (EBookClientView *view,
                           GError **error)
 {
+       EBookClient *client;
        gboolean success;
        GError *local_error = NULL;
 
        g_return_if_fail (E_IS_BOOK_CLIENT_VIEW (view));
 
+       client = e_book_client_view_ref_client (view);
+       g_return_if_fail (client != NULL);
+
        view->priv->running = TRUE;
 
        success = e_gdbus_book_view_call_start_sync (
@@ -1006,7 +1071,9 @@ e_book_client_view_start (EBookClientView *view,
                view->priv->running = FALSE;
 
        e_client_unwrap_dbus_error (
-               E_CLIENT (view->priv->client), local_error, error);
+               E_CLIENT (client), local_error, error);
+
+       g_object_unref (client);
 }
 
 /**
@@ -1020,17 +1087,23 @@ void
 e_book_client_view_stop (EBookClientView *view,
                          GError **error)
 {
+       EBookClient *client;
        GError *local_error = NULL;
 
        g_return_if_fail (E_IS_BOOK_CLIENT_VIEW (view));
 
+       client = e_book_client_view_ref_client (view);
+       g_return_if_fail (client != NULL);
+
        view->priv->running = FALSE;
 
        e_gdbus_book_view_call_stop_sync (
                view->priv->dbus_proxy, NULL, &local_error);
 
        e_client_unwrap_dbus_error (
-               E_CLIENT (view->priv->client), local_error, error);
+               E_CLIENT (client), local_error, error);
+
+       g_object_unref (client);
 }
 
 /**
@@ -1048,15 +1121,21 @@ e_book_client_view_set_flags (EBookClientView *view,
                               EBookClientViewFlags flags,
                               GError **error)
 {
+       EBookClient *client;
        GError *local_error = NULL;
 
        g_return_if_fail (E_IS_BOOK_CLIENT_VIEW (view));
 
+       client = e_book_client_view_ref_client (view);
+       g_return_if_fail (client != NULL);
+
        e_gdbus_book_view_call_set_flags_sync (
                view->priv->dbus_proxy, flags, NULL, &local_error);
 
        e_client_unwrap_dbus_error (
-               E_CLIENT (view->priv->client), local_error, error);
+               E_CLIENT (client), local_error, error);
+
+       g_object_unref (client);
 }
 
 /**
@@ -1082,11 +1161,15 @@ e_book_client_view_set_fields_of_interest (EBookClientView *view,
                                            const GSList *fields_of_interest,
                                            GError **error)
 {
+       EBookClient *client;
        gchar **strv;
        GError *local_error = NULL;
 
        g_return_if_fail (E_IS_BOOK_CLIENT_VIEW (view));
 
+       client = e_book_client_view_ref_client (view);
+       g_return_if_fail (client != NULL);
+
        /* When in direct read access mode, ensure that the
         * backend is configured to only send us UIDs for everything,
         *
@@ -1108,6 +1191,8 @@ e_book_client_view_set_fields_of_interest (EBookClientView *view,
        g_strfreev (strv);
 
        e_client_unwrap_dbus_error (
-               E_CLIENT (view->priv->client), local_error, error);
+               E_CLIENT (client), local_error, error);
+
+       g_object_unref (client);
 }
 
diff --git a/addressbook/libebook/e-book-client-view.h b/addressbook/libebook/e-book-client-view.h
index ad45644..b2b0f88 100644
--- a/addressbook/libebook/e-book-client-view.h
+++ b/addressbook/libebook/e-book-client-view.h
@@ -87,7 +87,7 @@ struct _EBookClientViewClass {
 
 GType          e_book_client_view_get_type     (void) G_GNUC_CONST;
 struct _EBookClient *
-               e_book_client_view_get_client   (EBookClientView *view);
+               e_book_client_view_ref_client   (EBookClientView *view);
 GDBusConnection *
                e_book_client_view_get_connection
                                                (EBookClientView *view);
@@ -106,6 +106,11 @@ void               e_book_client_view_set_flags    (EBookClientView *view,
                                                 EBookClientViewFlags flags,
                                                 GError **error);
 
+#ifndef EDS_DISABLE_DEPRECATED
+struct _EBookClient *
+               e_book_client_view_get_client   (EBookClientView *view);
+#endif /* EDS_DISABLE_DEPRECATED */
+
 G_END_DECLS
 
 #endif /* E_BOOK_CLIENT_VIEW_H */
diff --git a/calendar/backends/contacts/e-cal-backend-contacts.c 
b/calendar/backends/contacts/e-cal-backend-contacts.c
index 5d14659..e17f4ac 100644
--- a/calendar/backends/contacts/e-cal-backend-contacts.c
+++ b/calendar/backends/contacts/e-cal-backend-contacts.c
@@ -538,9 +538,13 @@ contacts_modified_cb (EBookClientView *book_view,
                       gpointer user_data)
 {
        ECalBackendContacts *cbc = E_CAL_BACKEND_CONTACTS (user_data);
-       EBookClient *book_client = e_book_client_view_get_client (book_view);
+       EBookClient *book_client;
        const GSList *ii;
 
+       book_client = e_book_client_view_ref_client (book_view);
+       if (book_client == NULL)
+               return;
+
        g_rec_mutex_lock (&cbc->priv->tracked_contacts_lock);
 
        for (ii = contacts; ii; ii = ii->next) {
@@ -566,6 +570,8 @@ contacts_modified_cb (EBookClientView *book_view,
        }
 
        g_rec_mutex_unlock (&cbc->priv->tracked_contacts_lock);
+
+       g_object_unref (book_client);
 }
 
 static void
@@ -574,9 +580,13 @@ contacts_added_cb (EBookClientView *book_view,
                    gpointer user_data)
 {
        ECalBackendContacts *cbc = E_CAL_BACKEND_CONTACTS (user_data);
-       EBookClient *book_client = e_book_client_view_get_client (book_view);
+       EBookClient *book_client;
        const GSList *ii;
 
+       book_client = e_book_client_view_ref_client (book_view);
+       if (book_client == NULL)
+               return;
+
        g_rec_mutex_lock (&cbc->priv->tracked_contacts_lock);
 
        /* See if any new contacts have BIRTHDAY or ANNIVERSARY fields */
@@ -599,6 +609,8 @@ contacts_added_cb (EBookClientView *book_view,
        }
 
        g_rec_mutex_unlock (&cbc->priv->tracked_contacts_lock);
+
+       g_object_unref (book_client);
 }
 
 static void
diff --git a/docs/reference/addressbook/libebook/libebook-sections.txt 
b/docs/reference/addressbook/libebook/libebook-sections.txt
index e8a9f59..9075713 100644
--- a/docs/reference/addressbook/libebook/libebook-sections.txt
+++ b/docs/reference/addressbook/libebook/libebook-sections.txt
@@ -174,7 +174,7 @@ e_book_client_error_quark
 <FILE>e-book-client-view</FILE>
 <TITLE>EBookClientView</TITLE>
 EBookClientView
-e_book_client_view_get_client
+e_book_client_view_ref_client
 e_book_client_view_get_connection
 e_book_client_view_get_object_path
 e_book_client_view_is_running
@@ -182,6 +182,8 @@ e_book_client_view_set_fields_of_interest
 e_book_client_view_start
 e_book_client_view_stop
 e_book_client_view_set_flags
+<SUBSECTION Deprecated>
+e_book_client_view_get_client
 <SUBSECTION Standard>
 E_BOOK_CLIENT_VIEW
 E_IS_BOOK_CLIENT_VIEW
diff --git a/tests/libebook/client/test-client-photo-is-uri.c 
b/tests/libebook/client/test-client-photo-is-uri.c
index a310b2b..ff591d0 100644
--- a/tests/libebook/client/test-client-photo-is-uri.c
+++ b/tests/libebook/client/test-client-photo-is-uri.c
@@ -184,7 +184,7 @@ static void
 complete (EBookClientView *view,
           const GError *error)
 {
-       EBookClient *book = e_book_client_view_get_client (view);
+       EBookClient *book = e_book_client_view_ref_client (view);
        GError *local_error = NULL;
 
        g_print ("View complete, iteration %d\n", iteration);
@@ -227,6 +227,7 @@ complete (EBookClientView *view,
                break;
        }
 
+       g_object_unref (book);
 }
 
 static void
diff --git a/tests/libebook/client/test-client-revision-view.c 
b/tests/libebook/client/test-client-revision-view.c
index f8f2979..370f15c 100644
--- a/tests/libebook/client/test-client-revision-view.c
+++ b/tests/libebook/client/test-client-revision-view.c
@@ -111,9 +111,15 @@ static void
 complete (EBookClientView *view,
           const GError *error)
 {
+       EBookClient *client;
+
+       client = e_book_client_view_ref_client (view);
+
        /* Now add a contact and assert that we received notification */
        loading_view = FALSE;
-       add_contact (e_book_client_view_get_client (view));
+       add_contact (client);
+
+       g_object_unref (client);
 }
 
 static void
diff --git a/tests/libebook/client/test-client-suppress-notifications.c 
b/tests/libebook/client/test-client-suppress-notifications.c
index ea86fed..5fe0bea 100644
--- a/tests/libebook/client/test-client-suppress-notifications.c
+++ b/tests/libebook/client/test-client-suppress-notifications.c
@@ -77,9 +77,15 @@ static void
 complete (EBookClientView *view,
           const GError *error)
 {
+       EBookClient *client;
+
+       client = e_book_client_view_ref_client (view);
+
        /* Now add a contact and assert that we received notification */
        loading_view = FALSE;
-       add_contact (e_book_client_view_get_client (view));
+       add_contact (client);
+
+       g_object_unref (client);
 }
 
 static void
diff --git a/tests/libebook/client/test-client-uid-only-view.c 
b/tests/libebook/client/test-client-uid-only-view.c
index aab3b4c..807669c 100644
--- a/tests/libebook/client/test-client-uid-only-view.c
+++ b/tests/libebook/client/test-client-uid-only-view.c
@@ -187,9 +187,15 @@ static void
 complete (EBookClientView *view,
           const GError *error)
 {
+       EBookClient *client;
+
+       client = e_book_client_view_ref_client (view);
+
        /* Now add a contact and assert that we received notification */
        loading_view = FALSE;
-       add_contact (e_book_client_view_get_client (view));
+       add_contact (client);
+
+       g_object_unref (client);
 }
 
 static void


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