summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSenko Rasic <senko.rasic@collabora.co.uk>2010-04-12 15:44:59 +0200
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-04-15 19:16:12 +0100
commit83d12e54b7695bc84d232e6be8fa88d25a40cdee (patch)
treec87fee59708efbb112d610632407b5dfffa12215
parent1e460b65af690a919bdf97869fd7fe526b62856f (diff)
downloadtelepathy-mission-control-83d12e54b7695bc84d232e6be8fa88d25a40cdee.tar.gz
McdClient: emit need-recovery signal when an observer needs to be respawned
-rw-r--r--src/mcd-client.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mcd-client.c b/src/mcd-client.c
index 740737d1..831206be 100644
--- a/src/mcd-client.c
+++ b/src/mcd-client.c
@@ -55,6 +55,7 @@ enum
S_IS_HANDLING_CHANNEL,
S_HANDLER_CAPABILITIES_CHANGED,
S_GONE,
+ S_NEED_RECOVERY,
N_SIGNALS
};
@@ -135,6 +136,11 @@ _mcd_client_proxy_dec_ready_lock (McdClientProxy *self)
{
self->priv->ready = TRUE;
g_signal_emit (self, signals[S_READY], 0);
+
+ /* Activatable Observers needing recovery have already
+ * been called (in order to reactivate them). */
+ if (self->priv->recover && !self->priv->activatable)
+ g_signal_emit (self, signals[S_NEED_RECOVERY], 0);
}
}
@@ -917,12 +923,17 @@ mcd_client_proxy_unique_name_cb (TpDBusDaemon *dbus_daemon,
gpointer user_data)
{
McdClientProxy *self = MCD_CLIENT_PROXY (user_data);
+ gboolean should_recover = FALSE;
g_object_ref (self);
if (unique_name == NULL || unique_name[0] == '\0')
{
_mcd_client_proxy_set_inactive (self);
+
+ /* To recover activatable Observers, we just need to call
+ * ObserveChannels on them. */
+ should_recover = self->priv->recover && self->priv->activatable;
}
else
{
@@ -931,6 +942,9 @@ mcd_client_proxy_unique_name_cb (TpDBusDaemon *dbus_daemon,
mcd_client_proxy_introspect (self);
+ if (should_recover)
+ g_signal_emit (self, signals[S_NEED_RECOVERY], 0);
+
g_object_unref (self);
}
@@ -1096,6 +1110,13 @@ _mcd_client_proxy_class_init (McdClientProxyClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ signals[S_NEED_RECOVERY] = g_signal_new ("need-recovery",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
g_object_class_install_property (object_class, PROP_ACTIVATABLE,
g_param_spec_boolean ("activatable", "Activatable?",
"TRUE if this client can be service-activated", FALSE,