[telepathy-mission-control/master] McdClientProxy: automatically drop capabilities if inactive and not activatable

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Oct 19 07:01:05 PDT 2009


Previously, we relied on the McdDispatcher to do this.
---
 src/mcd-client-priv.h |    2 --
 src/mcd-client.c      |   16 +++++++++++++++-
 src/mcd-dispatcher.c  |    1 -
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/mcd-client-priv.h b/src/mcd-client-priv.h
index ebe7b41..f718e01 100644
--- a/src/mcd-client-priv.h
+++ b/src/mcd-client-priv.h
@@ -97,8 +97,6 @@ G_GNUC_INTERNAL const GList *_mcd_client_proxy_get_handler_filters
 G_GNUC_INTERNAL gboolean _mcd_client_proxy_get_bypass_approval
     (McdClientProxy *self);
 
-G_GNUC_INTERNAL void _mcd_client_proxy_become_incapable (McdClientProxy *self);
-
 G_GNUC_INTERNAL GValueArray *_mcd_client_proxy_dup_handler_capabilities (
     McdClientProxy *self);
 
diff --git a/src/mcd-client.c b/src/mcd-client.c
index f6ec4e1..0aca8be 100644
--- a/src/mcd-client.c
+++ b/src/mcd-client.c
@@ -1139,13 +1139,27 @@ _mcd_client_proxy_new (TpDBusDaemon *dbus_daemon,
     return self;
 }
 
+static void _mcd_client_proxy_become_incapable (McdClientProxy *self);
+
 void
 _mcd_client_proxy_set_inactive (McdClientProxy *self)
 {
     g_return_if_fail (MCD_IS_CLIENT_PROXY (self));
 
+    /* if unique name is already "" (i.e. known to be inactive), do nothing */
+    if (self->priv->unique_name != NULL && self->priv->unique_name[0] == '\0')
+    {
+        return;
+    }
+
     g_free (self->priv->unique_name);
     self->priv->unique_name = g_strdup ("");
+
+    if (!self->priv->activatable)
+    {
+        /* a handler that is neither running nor activatable is useless */
+        _mcd_client_proxy_become_incapable (self);
+    }
 }
 
 void
@@ -1241,7 +1255,7 @@ _mcd_client_proxy_get_bypass_approval (McdClientProxy *self)
     return self->priv->bypass_approval;
 }
 
-void
+static void
 _mcd_client_proxy_become_incapable (McdClientProxy *self)
 {
     _mcd_client_proxy_take_approver_filters (self, NULL);
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 2cc84da..9eef962 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -2097,7 +2097,6 @@ name_owner_changed_cb (TpDBusDaemon *proxy,
                 /* in ContactCapabilities we indicate the disappearance
                  * of a client by giving it an empty set of capabilities and
                  * filters */
-                _mcd_client_proxy_become_incapable (client);
                 mcd_dispatcher_update_client_caps (self, client);
 
                 mcd_dispatcher_discard_client (self, client);
-- 
1.5.6.5




More information about the telepathy-commits mailing list