From: Matthew Barnes Date: Fri, 12 Oct 2012 23:15:44 +0000 (-0400) Subject: Remove e_data_cal_view_register_gdbus_object(). X-Git-Tag: upstream/3.7.4~337 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8bdefa87db7d0ec3f113273fbccfd864391d40f4;p=platform%2Fupstream%2Fevolution-data-server.git Remove e_data_cal_view_register_gdbus_object(). Similar to EDataCal, the first thing we do after creating a new EDataCalView is export its D-Bus interface. This was a separate and failable operation. If the export fails, the EDataCalView is useless. Perfect use case for GInitable. Now we pass the GDBusConnection and object path directly to e_data_cal_view_new(), and if exporting fails the function sets a GError and returns NULL. This also introduces a couple accessor functions: e_data_cal_view_get_connection() e_data_cal_view_get_object_path() --- diff --git a/calendar/libedata-cal/e-data-cal-view.c b/calendar/libedata-cal/e-data-cal-view.c index 86917a9..f23d6c4 100644 --- a/calendar/libedata-cal/e-data-cal-view.c +++ b/calendar/libedata-cal/e-data-cal-view.c @@ -42,7 +42,9 @@ #define THRESHOLD_SECONDS 2 struct _EDataCalViewPrivate { + GDBusConnection *connection; EGdbusCalView *gdbus_object; + gchar *object_path; /* The backend we are monitoring */ ECalBackend *backend; @@ -73,10 +75,21 @@ struct _EDataCalViewPrivate { enum { PROP_0, PROP_BACKEND, + PROP_CONNECTION, + PROP_OBJECT_PATH, PROP_SEXP }; -G_DEFINE_TYPE (EDataCalView, e_data_cal_view, G_TYPE_OBJECT); +/* Forward Declarations */ +static void e_data_cal_view_initable_init (GInitableIface *interface); + +G_DEFINE_TYPE_WITH_CODE ( + EDataCalView, + e_data_cal_view, + G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE ( + G_TYPE_INITABLE, + e_data_cal_view_initable_init)) static guint str_ic_hash (gconstpointer key) @@ -296,6 +309,26 @@ data_cal_view_set_backend (EDataCalView *view, } static void +data_cal_view_set_connection (EDataCalView *view, + GDBusConnection *connection) +{ + g_return_if_fail (G_IS_DBUS_CONNECTION (connection)); + g_return_if_fail (view->priv->connection == NULL); + + view->priv->connection = g_object_ref (connection); +} + +static void +data_cal_view_set_object_path (EDataCalView *view, + const gchar *object_path) +{ + g_return_if_fail (object_path != NULL); + g_return_if_fail (view->priv->object_path == NULL); + + view->priv->object_path = g_strdup (object_path); +} + +static void data_cal_view_set_sexp (EDataCalView *view, ECalBackendSExp *sexp) { @@ -318,6 +351,18 @@ data_cal_view_set_property (GObject *object, g_value_get_object (value)); return; + case PROP_CONNECTION: + data_cal_view_set_connection ( + E_DATA_CAL_VIEW (object), + g_value_get_object (value)); + return; + + case PROP_OBJECT_PATH: + data_cal_view_set_object_path ( + E_DATA_CAL_VIEW (object), + g_value_get_string (value)); + return; + case PROP_SEXP: data_cal_view_set_sexp ( E_DATA_CAL_VIEW (object), @@ -342,6 +387,20 @@ data_cal_view_get_property (GObject *object, E_DATA_CAL_VIEW (object))); return; + case PROP_CONNECTION: + g_value_set_object ( + value, + e_data_cal_view_get_connection ( + E_DATA_CAL_VIEW (object))); + return; + + case PROP_OBJECT_PATH: + g_value_set_string ( + value, + e_data_cal_view_get_object_path ( + E_DATA_CAL_VIEW (object))); + return; + case PROP_SEXP: g_value_set_object ( value, @@ -368,6 +427,11 @@ data_cal_view_dispose (GObject *object) priv->backend = NULL; } + if (priv->connection != NULL) { + g_object_unref (priv->connection); + priv->connection = NULL; + } + if (priv->sexp != NULL) { g_object_unref (priv->sexp); priv->sexp = NULL; @@ -393,6 +457,8 @@ data_cal_view_finalize (GObject *object) priv = E_DATA_CAL_VIEW_GET_PRIVATE (object); + g_free (priv->object_path); + reset_array (priv->adds); reset_array (priv->changes); reset_array (priv->removes); @@ -412,6 +478,22 @@ data_cal_view_finalize (GObject *object) G_OBJECT_CLASS (e_data_cal_view_parent_class)->finalize (object); } +static gboolean +data_cal_view_initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) +{ + EDataCalView *view; + + view = E_DATA_CAL_VIEW (initable); + + return e_gdbus_cal_view_register_object ( + view->priv->gdbus_object, + view->priv->connection, + view->priv->object_path, + error); +} + static void e_data_cal_view_class_init (EDataCalViewClass *class) { @@ -439,6 +521,32 @@ e_data_cal_view_class_init (EDataCalViewClass *class) g_object_class_install_property ( object_class, + PROP_CONNECTION, + g_param_spec_object ( + "connection", + "Connection", + "The GDBusConnection on which " + "to export the view interface", + G_TYPE_DBUS_CONNECTION, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property ( + object_class, + PROP_OBJECT_PATH, + g_param_spec_string ( + "object-path", + "Object Path", + "The object path at which to " + "export the view interface", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property ( + object_class, PROP_SEXP, g_param_spec_object ( "sexp", @@ -451,6 +559,12 @@ e_data_cal_view_class_init (EDataCalViewClass *class) } static void +e_data_cal_view_initable_init (GInitableIface *interface) +{ + interface->init = data_cal_view_initable_init; +} + +static void e_data_cal_view_init (EDataCalView *view) { view->priv = E_DATA_CAL_VIEW_GET_PRIVATE (view); @@ -500,33 +614,23 @@ e_data_cal_view_init (EDataCalView *view) EDataCalView * e_data_cal_view_new (ECalBackend *backend, - ECalBackendSExp *sexp) + ECalBackendSExp *sexp, + GDBusConnection *connection, + const gchar *object_path, + GError **error) { g_return_val_if_fail (E_IS_CAL_BACKEND (backend), NULL); g_return_val_if_fail (E_IS_CAL_BACKEND_SEXP (sexp), NULL); - - return g_object_new ( - E_TYPE_DATA_CAL_VIEW, - "backend", backend, "sexp", sexp, NULL); -} - -/** - * e_data_cal_view_register_gdbus_object: - * - * Since: 2.32 - **/ -guint -e_data_cal_view_register_gdbus_object (EDataCalView *view, - GDBusConnection *connection, - const gchar *object_path, - GError **error) -{ - g_return_val_if_fail (E_IS_DATA_CAL_VIEW (view), 0); - g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), 0); - g_return_val_if_fail (object_path != NULL, 0); - - return e_gdbus_cal_view_register_object ( - view->priv->gdbus_object, connection, object_path, error); + g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); + g_return_val_if_fail (object_path != NULL, NULL); + + return g_initable_new ( + E_TYPE_DATA_CAL_VIEW, NULL, error, + "backend", backend, + "connection", connection, + "object-path", object_path, + "sexp", sexp, + NULL); } static void @@ -751,6 +855,44 @@ e_data_cal_view_get_backend (EDataCalView *view) } /** + * e_data_cal_view_get_connection: + * @view: an #EDataCalView + * + * Returns the #GDBusConnection on which the CalendarView D-Bus + * interface is exported. + * + * Returns: the #GDBusConnection + * + * Since: 3.8 + **/ +GDBusConnection * +e_data_cal_view_get_connection (EDataCalView *view) +{ + g_return_val_if_fail (E_IS_DATA_CAL_VIEW (view), NULL); + + return view->priv->connection; +} + +/** + * e_data_cal_view_get_object_path: + * @view: an #EDataCalView + * + * Return the object path at which the CalendarView D-Bus inteface is + * exported. + * + * Returns: the object path + * + * Since: 3.8 + **/ +const gchar * +e_data_cal_view_get_object_path (EDataCalView *view) +{ + g_return_val_if_fail (E_IS_DATA_CAL_VIEW (view), NULL); + + return view->priv->object_path; +} + +/** * e_data_cal_view_get_sexp: * @view: an #EDataCalView * diff --git a/calendar/libedata-cal/e-data-cal-view.h b/calendar/libedata-cal/e-data-cal-view.h index d04e71c..c992615 100644 --- a/calendar/libedata-cal/e-data-cal-view.h +++ b/calendar/libedata-cal/e-data-cal-view.h @@ -66,14 +66,15 @@ struct _EDataCalViewClass { GType e_data_cal_view_get_type (void) G_GNUC_CONST; EDataCalView * e_data_cal_view_new (struct _ECalBackend *backend, - struct _ECalBackendSExp *sexp); -guint e_data_cal_view_register_gdbus_object - (EDataCalView *view, + struct _ECalBackendSExp *sexp, GDBusConnection *connection, const gchar *object_path, GError **error); struct _ECalBackend * e_data_cal_view_get_backend (EDataCalView *view); +GDBusConnection * + e_data_cal_view_get_connection (EDataCalView *view); +const gchar * e_data_cal_view_get_object_path (EDataCalView *view); struct _ECalBackendSExp * e_data_cal_view_get_sexp (EDataCalView *view); gboolean e_data_cal_view_object_matches (EDataCalView *view, diff --git a/calendar/libedata-cal/e-data-cal.c b/calendar/libedata-cal/e-data-cal.c index 2a2e038..7a0a6dc 100644 --- a/calendar/libedata-cal/e-data-cal.c +++ b/calendar/libedata-cal/e-data-cal.c @@ -254,7 +254,8 @@ operation_thread (gpointer data, if (op->d.sexp) { EDataCalView *view; ECalBackendSExp *obj_sexp; - gchar *path; + GDBusConnection *connection; + gchar *object_path; GError *error = NULL; /* we handle this entirely here, since it doesn't require any @@ -268,32 +269,34 @@ operation_thread (gpointer data, break; } - view = e_data_cal_view_new (backend, obj_sexp); + object_path = construct_calview_path (); + connection = e_gdbus_cal_stub_get_connection ( + op->cal->priv->gdbus_object); + + view = e_data_cal_view_new ( + backend, obj_sexp, + connection, object_path, &error); + g_object_unref (obj_sexp); - if (!view) { - g_free (op->d.sexp); - e_data_cal_respond_get_view (op->cal, op->id, EDC_ERROR (OtherError), NULL); - break; - } - path = construct_calview_path (); - e_data_cal_view_register_gdbus_object (view, e_gdbus_cal_stub_get_connection (op->cal->priv->gdbus_object), path, &error); + /* Sanity check. */ + g_return_if_fail ( + ((view != NULL) && (error == NULL)) || + ((view == NULL) && (error != NULL))); - if (error) { - g_object_unref (view); + if (error != NULL) { g_free (op->d.sexp); e_data_cal_respond_get_view (op->cal, op->id, EDC_ERROR_EX (OtherError, error->message), NULL); g_error_free (error); - g_free (path); - + g_free (object_path); break; } e_cal_backend_add_view (backend, view); - e_data_cal_respond_get_view (op->cal, op->id, EDC_ERROR (Success), path); + e_data_cal_respond_get_view (op->cal, op->id, EDC_ERROR (Success), object_path); - g_free (path); + g_free (object_path); } g_free (op->d.sexp); break; diff --git a/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt b/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt index 4fff930..5c15a73 100644 --- a/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt +++ b/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt @@ -339,8 +339,9 @@ e_data_cal_factory_get_type e-data-cal-view EDataCalView e_data_cal_view_new -e_data_cal_view_register_gdbus_object e_data_cal_view_get_backend +e_data_cal_view_get_connection +e_data_cal_view_get_object_path e_data_cal_view_get_sexp e_data_cal_view_object_matches e_data_cal_view_component_matches