[evolution-data-server] Add e_cal_client_view_ref_client().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add e_cal_client_view_ref_client().
- Date: Sun, 17 Mar 2013 13:43:14 +0000 (UTC)
commit fd2980fcfd1b6421b430664d41d36d4b0c87dbef
Author: Matthew Barnes <mbarnes redhat com>
Date: Wed Mar 13 09:17:18 2013 -0400
Add e_cal_client_view_ref_client().
Replaces e_cal_client_view_get_client().
calendar/libecal/e-cal-client-view.c | 112 +++++++++++++++++---
calendar/libecal/e-cal-client-view.h | 7 +-
.../calendar/libecal/libecal-sections.txt | 4 +-
3 files changed, 108 insertions(+), 15 deletions(-)
---
diff --git a/calendar/libecal/e-cal-client-view.c b/calendar/libecal/e-cal-client-view.c
index f4773ce..a02780f 100644
--- a/calendar/libecal/e-cal-client-view.c
+++ b/calendar/libecal/e-cal-client-view.c
@@ -270,11 +270,17 @@ cal_client_view_objects_added_cb (EGdbusCalView *dbus_proxy,
if (!client_view->priv->running)
return;
+ client = e_cal_client_view_ref_client (client_view);
+
+ /* Suppress any further signal emissions if
+ * our ECalClient 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->component_list = build_object_list (objects);
- client = e_cal_client_view_get_client (client_view);
main_context = e_client_ref_main_context (E_CLIENT (client));
idle_source = g_idle_source_new ();
@@ -287,6 +293,8 @@ cal_client_view_objects_added_cb (EGdbusCalView *dbus_proxy,
g_source_unref (idle_source);
g_main_context_unref (main_context);
+
+ g_object_unref (client);
}
static void
@@ -302,11 +310,17 @@ cal_client_view_objects_modified_cb (EGdbusCalView *dbus_proxy,
if (!client_view->priv->running)
return;
+ client = e_cal_client_view_ref_client (client_view);
+
+ /* Suppress any further signal emissions if
+ * our ECalClient 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->component_list = build_object_list (objects);
- client = e_cal_client_view_get_client (client_view);
main_context = e_client_ref_main_context (E_CLIENT (client));
idle_source = g_idle_source_new ();
@@ -319,6 +333,8 @@ cal_client_view_objects_modified_cb (EGdbusCalView *dbus_proxy,
g_source_unref (idle_source);
g_main_context_unref (main_context);
+
+ g_object_unref (client);
}
static void
@@ -334,11 +350,17 @@ cal_client_view_objects_removed_cb (EGdbusCalView *dbus_proxy,
if (!client_view->priv->running)
return;
+ client = e_cal_client_view_ref_client (client_view);
+
+ /* Suppress any further signal emissions if
+ * our ECalClient 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->component_id_list = build_id_list (uids);
- client = e_cal_client_view_get_client (client_view);
main_context = e_client_ref_main_context (E_CLIENT (client));
idle_source = g_idle_source_new ();
@@ -351,6 +373,8 @@ cal_client_view_objects_removed_cb (EGdbusCalView *dbus_proxy,
g_source_unref (idle_source);
g_main_context_unref (main_context);
+
+ g_object_unref (client);
}
static void
@@ -367,12 +391,18 @@ cal_client_view_progress_cb (EGdbusCalView *dbus_proxy,
if (!client_view->priv->running)
return;
+ client = e_cal_client_view_ref_client (client_view);
+
+ /* Suppress any further signal emissions if
+ * our ECalClient 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_cal_client_view_get_client (client_view);
main_context = e_client_ref_main_context (E_CLIENT (client));
idle_source = g_idle_source_new ();
@@ -385,6 +415,8 @@ cal_client_view_progress_cb (EGdbusCalView *dbus_proxy,
g_source_unref (idle_source);
g_main_context_unref (main_context);
+
+ g_object_unref (client);
}
static void
@@ -400,11 +432,17 @@ cal_client_view_complete_cb (EGdbusCalView *dbus_proxy,
if (!client_view->priv->running)
return;
+ client = e_cal_client_view_ref_client (client_view);
+
+ /* Suppress any further signal emissions if
+ * our ECalClient 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 (arg_error, &signal_closure->error);
- client = e_cal_client_view_get_client (client_view);
main_context = e_client_ref_main_context (E_CLIENT (client));
idle_source = g_idle_source_new ();
@@ -417,6 +455,8 @@ cal_client_view_complete_cb (EGdbusCalView *dbus_proxy,
g_source_unref (idle_source);
g_main_context_unref (main_context);
+
+ g_object_unref (client);
}
static void
@@ -502,9 +542,9 @@ cal_client_view_get_property (GObject *object,
{
switch (property_id) {
case PROP_CLIENT:
- g_value_set_object (
+ g_value_take_object (
value,
- e_cal_client_view_get_client (
+ e_cal_client_view_ref_client (
E_CAL_CLIENT_VIEW (object)));
return;
@@ -763,12 +803,35 @@ e_cal_client_view_init (ECalClientView *view)
}
/**
+ * e_cal_client_view_ref_client:
+ * @view: an #ECalClientView
+ *
+ * Returns the #ECalClientView:client associated with @view.
+ *
+ * The returned #ECalClient is referenced for thread-safety. Unreference
+ * the #ECalClient with g_object_unref() when finished with it.
+ *
+ * Returns: an #ECalClient
+ *
+ * Since: 3.10
+ **/
+ECalClient *
+e_cal_client_view_ref_client (ECalClientView *view)
+{
+ g_return_val_if_fail (E_IS_CAL_CLIENT_VIEW (view), NULL);
+
+ return g_object_ref (view->priv->client);
+}
+
+/**
* e_cal_client_view_get_client:
* @view: an #ECalClientView
*
- * Returns the #ECalClient associated with @view.
+ * Returns the #ECalClientView:client associated with @view.
+ *
+ * Returns: (transfer none): an #ECalClient
*
- * Returns: (transfer none): the associated client.
+ * Deprecated: 3.10: Use e_cal_client_view_ref_client() instead.
*
* Since: 3.2
**/
@@ -846,11 +909,15 @@ void
e_cal_client_view_start (ECalClientView *view,
GError **error)
{
+ ECalClient *client;
gboolean success;
GError *local_error = NULL;
g_return_if_fail (E_IS_CAL_CLIENT_VIEW (view));
+ client = e_cal_client_view_ref_client (view);
+ g_return_if_fail (client != NULL);
+
view->priv->running = TRUE;
success = e_gdbus_cal_view_call_start_sync (
@@ -859,7 +926,9 @@ e_cal_client_view_start (ECalClientView *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);
}
/**
@@ -875,17 +944,23 @@ void
e_cal_client_view_stop (ECalClientView *view,
GError **error)
{
+ ECalClient *client;
GError *local_error = NULL;
g_return_if_fail (E_IS_CAL_CLIENT_VIEW (view));
+ client = e_cal_client_view_ref_client (view);
+ g_return_if_fail (client != NULL);
+
view->priv->running = FALSE;
e_gdbus_cal_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);
}
/**
@@ -912,11 +987,15 @@ e_cal_client_view_set_fields_of_interest (ECalClientView *view,
const GSList *fields_of_interest,
GError **error)
{
+ ECalClient *client;
gchar **strv;
GError *local_error = NULL;
g_return_if_fail (E_IS_CAL_CLIENT_VIEW (view));
+ client = e_cal_client_view_ref_client (view);
+ g_return_if_fail (client != NULL);
+
strv = e_client_util_slist_to_strv (fields_of_interest);
e_gdbus_cal_view_call_set_fields_of_interest_sync (
view->priv->dbus_proxy,
@@ -925,7 +1004,9 @@ e_cal_client_view_set_fields_of_interest (ECalClientView *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);
}
/**
@@ -943,13 +1024,18 @@ e_cal_client_view_set_flags (ECalClientView *view,
ECalClientViewFlags flags,
GError **error)
{
+ ECalClient *client;
GError *local_error = NULL;
g_return_if_fail (E_IS_CAL_CLIENT_VIEW (view));
+ client = e_cal_client_view_ref_client (view);
+
e_gdbus_cal_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);
}
diff --git a/calendar/libecal/e-cal-client-view.h b/calendar/libecal/e-cal-client-view.h
index 1b39513..e66eabb 100644
--- a/calendar/libecal/e-cal-client-view.h
+++ b/calendar/libecal/e-cal-client-view.h
@@ -104,7 +104,7 @@ struct _ECalClientViewClass {
GType e_cal_client_view_get_type (void) G_GNUC_CONST;
struct _ECalClient *
- e_cal_client_view_get_client (ECalClientView *view);
+ e_cal_client_view_ref_client (ECalClientView *view);
GDBusConnection *
e_cal_client_view_get_connection
(ECalClientView *view);
@@ -123,6 +123,11 @@ void e_cal_client_view_set_flags (ECalClientView *view,
ECalClientViewFlags flags,
GError **error);
+#ifndef EDS_DISABLE_DEPRECATED
+struct _ECalClient *
+ e_cal_client_view_get_client (ECalClientView *view);
+#endif /* EDS_DISABLE_DEPRECATED */
+
G_END_DECLS
#endif /* E_CAL_CLIENT_VIEW_H */
diff --git a/docs/reference/calendar/libecal/libecal-sections.txt
b/docs/reference/calendar/libecal/libecal-sections.txt
index 86d933b..022b976 100644
--- a/docs/reference/calendar/libecal/libecal-sections.txt
+++ b/docs/reference/calendar/libecal/libecal-sections.txt
@@ -199,7 +199,7 @@ e_cal_client_error_quark
<FILE>e-cal-client-view</FILE>
<TITLE>ECalClientView</TITLE>
ECalClientView
-e_cal_client_view_get_client
+e_cal_client_view_ref_client
e_cal_client_view_get_connection
e_cal_client_view_get_object_path
e_cal_client_view_is_running
@@ -208,6 +208,8 @@ e_cal_client_view_start
e_cal_client_view_stop
ECalClientViewFlags
e_cal_client_view_set_flags
+<SUBSECTION Deprecated>
+e_cal_client_view_get_client
<SUBSECTION Standard>
E_CAL_CLIENT_VIEW
E_IS_CAL_CLIENT_VIEW
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]