diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-05-12 15:17:28 +0200 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-09-17 14:15:16 +0100 |
commit | 75df253e7b8f0e18b34b4f0c7eacfea6b5101619 (patch) | |
tree | 0d61ba6a4a80f4a6aa737ddfa94a40756b138bc2 | |
parent | 6b1eb20092053fa40b548c2cf703ce895ba3c3fc (diff) | |
download | telepathy-glib-75df253e7b8f0e18b34b4f0c7eacfea6b5101619.tar.gz |
base-client: don't create skeletons more than once
The client can be registered more than once if user manually unregister it
first. We don't want to create different skeleton objects in that case.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77882
Reviewed-by: Simon McVittie
-rw-r--r-- | telepathy-glib/base-client.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c index f4d289422..d7fa99ec5 100644 --- a/telepathy-glib/base-client.c +++ b/telepathy-glib/base-client.c @@ -1713,10 +1713,18 @@ observer_skeleton_init (TpBaseClient *self) GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self); gboolean delay_approvers, recover; - self->priv->observer_skeleton = _tp_gdbus_client_observer_skeleton_new (); + if (self->priv->observer_skeleton == NULL) + { + self->priv->observer_skeleton = _tp_gdbus_client_observer_skeleton_new (); - g_dbus_object_skeleton_add_interface (skel, - G_DBUS_INTERFACE_SKELETON (self->priv->observer_skeleton)); + g_dbus_object_skeleton_add_interface (skel, + G_DBUS_INTERFACE_SKELETON (self->priv->observer_skeleton)); + + /* Method */ + g_signal_connect_object (self->priv->observer_skeleton, + "handle-observe-channel", + G_CALLBACK (_tp_base_client_observe_channel), self, 0); + } /* Properties */ delay_approvers = ((self->priv->flags & CLIENT_OBSERVER_DELAYS_APPROVERS) @@ -1732,11 +1740,6 @@ observer_skeleton_init (TpBaseClient *self) _tp_gdbus_client_observer_set_observer_channel_filter ( self->priv->observer_skeleton, g_variant_builder_end (self->priv->observer_filters)); - - /* Method */ - g_signal_connect_object (self->priv->observer_skeleton, - "handle-observe-channel", G_CALLBACK (_tp_base_client_observe_channel), - self, 0); } static void @@ -1907,20 +1910,23 @@ approver_skeleton_init (TpBaseClient *self) { GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self); - self->priv->approver_skeleton = _tp_gdbus_client_approver_skeleton_new (); + if (self->priv->approver_skeleton == NULL) + { + self->priv->approver_skeleton = _tp_gdbus_client_approver_skeleton_new (); - g_dbus_object_skeleton_add_interface (skel, - G_DBUS_INTERFACE_SKELETON (self->priv->approver_skeleton)); + g_dbus_object_skeleton_add_interface (skel, + G_DBUS_INTERFACE_SKELETON (self->priv->approver_skeleton)); + + /* Method */ + g_signal_connect_object (self->priv->approver_skeleton, + "handle-add-dispatch-operation", + G_CALLBACK (_tp_base_client_add_dispatch_operation), self, 0); + } /* Property */ _tp_gdbus_client_approver_set_approver_channel_filter ( self->priv->approver_skeleton, g_variant_builder_end (self->priv->approver_filters)); - - /* Method */ - g_signal_connect_object (self->priv->approver_skeleton, - "handle-add-dispatch-operation", - G_CALLBACK (_tp_base_client_add_dispatch_operation), self, 0); } static void @@ -2209,10 +2215,18 @@ handler_skeleton_init (TpBaseClient *self) GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self); gboolean bypass; - self->priv->handler_skeleton = _tp_gdbus_client_handler_skeleton_new (); + if (self->priv->handler_skeleton == NULL) + { + self->priv->handler_skeleton = _tp_gdbus_client_handler_skeleton_new (); - g_dbus_object_skeleton_add_interface (skel, - G_DBUS_INTERFACE_SKELETON (self->priv->handler_skeleton)); + g_dbus_object_skeleton_add_interface (skel, + G_DBUS_INTERFACE_SKELETON (self->priv->handler_skeleton)); + + /* Method */ + g_signal_connect_object (self->priv->handler_skeleton, + "handle-handle-channel", G_CALLBACK (_tp_base_client_handle_channel), + self, 0); + } /* Properties */ _tp_gdbus_client_handler_set_handler_channel_filter ( @@ -2228,11 +2242,6 @@ handler_skeleton_init (TpBaseClient *self) (const gchar * const *) self->priv->handler_caps->pdata); update_handled_channels_prop (self); - - /* Method */ - g_signal_connect_object (self->priv->handler_skeleton, - "handle-handle-channel", G_CALLBACK (_tp_base_client_handle_channel), - self, 0); } typedef struct |