diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2014-05-14 11:08:09 +0200 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-09-17 14:15:39 +0100 |
commit | 654962f11dd1d89f96ad4a0f47dff8cbab2f45bf (patch) | |
tree | 040fa69f88f6bcafaf9cef4a114b2940758d24f7 | |
parent | b4bd1d43cd0f4b02290c98b3ba434d4926e58733 (diff) | |
download | telepathy-glib-654962f11dd1d89f96ad4a0f47dff8cbab2f45bf.tar.gz |
base-client: warn if user try to add/remove iface when registered
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77882
Reviewed-by: Simon McVittie
-rw-r--r-- | telepathy-glib/base-client.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c index a604a9d06..13102c427 100644 --- a/telepathy-glib/base-client.c +++ b/telepathy-glib/base-client.c @@ -1258,6 +1258,30 @@ tp_base_client_set_property (GObject *object, } } +/* User data for interface-added and interface-removed signals, with vaguely + * mnemonic values */ +#define INTERFACE_ADDED (GINT_TO_POINTER(1)) +#define INTERFACE_REMOVED (GINT_TO_POINTER(-1)) + +static void +tp_base_client_interface_changed_cb (TpBaseClient *self, + GDBusInterface *interface, + gpointer user_data) +{ + GDBusInterfaceInfo *info = g_dbus_interface_get_info (interface); + const gchar *verb = (user_data == INTERFACE_ADDED ? "add" : "remove"); + + g_assert (user_data == INTERFACE_ADDED || user_data == INTERFACE_REMOVED); + + if (self->priv->registered) + { + WARNING ("Adding or removing Client interfaces after the client " + "has been registered is not supported. " + "(Tried to %s %s %p, \"%s\")", + verb, G_OBJECT_TYPE_NAME (interface), interface, info->name); + } +} + static void tp_base_client_constructed (GObject *object) { @@ -1307,6 +1331,13 @@ tp_base_client_constructed (GObject *object) g_strdelimit (self->priv->object_path, ".", '/'); self->priv->bus_name = g_string_free (string, FALSE); + + g_signal_connect (self, "interface-added", + G_CALLBACK (tp_base_client_interface_changed_cb), + INTERFACE_ADDED); + g_signal_connect (self, "interface-removed", + G_CALLBACK (tp_base_client_interface_changed_cb), + INTERFACE_REMOVED); } static void |