summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-05-14 11:08:09 +0200
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-09-17 14:15:39 +0100
commit654962f11dd1d89f96ad4a0f47dff8cbab2f45bf (patch)
tree040fa69f88f6bcafaf9cef4a114b2940758d24f7
parentb4bd1d43cd0f4b02290c98b3ba434d4926e58733 (diff)
downloadtelepathy-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.c31
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