diff options
author | Vivek Dasmohapatra <vivek@collabora.co.uk> | 2011-04-14 18:43:19 +0100 |
---|---|---|
committer | Vivek Dasmohapatra <vivek@collabora.co.uk> | 2011-05-04 15:27:13 +0100 |
commit | 90aff1c8afafd4defa2a4059bb36f61307b691fc (patch) | |
tree | 6abd5467a43aeadc0672d45c8cb13c3474dd3684 | |
parent | 6c4c4f775808717aedcac74f6784e60ce2ecfcb3 (diff) | |
download | telepathy-mission-control-90aff1c8afafd4defa2a4059bb36f61307b691fc.tar.gz |
Fall back to universal name-owner-changed matching if the new approach fails
-rw-r--r-- | src/client-registry.c | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/src/client-registry.c b/src/client-registry.c index 5a9f0da2..7d2bf437 100644 --- a/src/client-registry.c +++ b/src/client-registry.c @@ -372,28 +372,61 @@ mcd_client_registry_name_owner_changed_cb (TpDBusDaemon *proxy, } } +static gboolean +add_match (DBusConnection *conn, + const gchar const *rule, + const gchar *msg) +{ + DBusError error = { 0 }; + + dbus_error_init (&error); + dbus_bus_add_match (conn, rule, &error); + + if (dbus_error_is_set (&error)) + { + g_warning ("Could not add %s match rule: %s", msg, error.message); + dbus_error_free (&error); + return FALSE; + } + + return TRUE; +} + static void watch_clients (McdClientRegistry *self) { TpDBusDaemon *dbus_daemon = self->priv->dbus_daemon; DBusGConnection *gconn = tp_proxy_get_dbus_connection (dbus_daemon); DBusConnection *dconn = dbus_g_connection_get_connection (gconn); + gboolean arg0_filtered = FALSE; #define MATCH_ITEM(t,x) #t "='" x "'" -#define CLIENT_MATCH_RULE "" \ - MATCH_ITEM (type, "signal") "," \ - MATCH_ITEM (sender, DBUS_SERVICE_DBUS) "," \ - MATCH_ITEM (interface, DBUS_INTERFACE_DBUS) "," \ - MATCH_ITEM (member, "NameOwnerChanged") "," \ +#define NAME_OWNER_RULE \ + MATCH_ITEM (type, "signal") "," \ + MATCH_ITEM (sender, DBUS_SERVICE_DBUS) "," \ + MATCH_ITEM (interface, DBUS_INTERFACE_DBUS) "," \ + MATCH_ITEM (member, "NameOwnerChanged") + +#define CLIENT_MATCH_RULE \ + NAME_OWNER_RULE "," \ MATCH_ITEM (arg0namespace, "org.freedesktop.Telepathy.Client") - dbus_connection_add_filter (dconn, + arg0_filtered = dbus_connection_add_filter (dconn, mcd_client_registry_name_owner_filter, g_object_ref (self), g_object_unref); - dbus_bus_add_match (dconn, CLIENT_MATCH_RULE, NULL); + if (arg0_filtered) + { + arg0_filtered = add_match (dconn, CLIENT_MATCH_RULE, "client names"); + + if (!arg0_filtered) + arg0_filtered = add_match (dconn, NAME_OWNER_RULE, "all dbus names"); + } + + if (!arg0_filtered) + g_warning ("Could not add match & filter for telepathy client names"); } static void |