[evolution-data-server] Add e_book_client_view_ref_client().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add e_book_client_view_ref_client().
- Date: Sun, 17 Mar 2013 13:43:04 +0000 (UTC)
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]