diff options
author | Senko Rasic <senko.rasic@collabora.co.uk> | 2010-04-12 15:44:59 +0200 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-04-15 19:16:12 +0100 |
commit | 83d12e54b7695bc84d232e6be8fa88d25a40cdee (patch) | |
tree | c87fee59708efbb112d610632407b5dfffa12215 | |
parent | 1e460b65af690a919bdf97869fd7fe526b62856f (diff) | |
download | telepathy-mission-control-83d12e54b7695bc84d232e6be8fa88d25a40cdee.tar.gz |
McdClient: emit need-recovery signal when an observer needs to be respawned
-rw-r--r-- | src/mcd-client.c | 21 |
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, |