[Telepathy-commits] [telepathy-salut/master] change state of FT to cancelled if the contact is disconnected
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Tue Dec 9 07:07:11 PST 2008
---
src/salut-file-transfer-channel.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/salut-file-transfer-channel.c b/src/salut-file-transfer-channel.c
index ac30ca4..5c6e1ae 100644
--- a/src/salut-file-transfer-channel.c
+++ b/src/salut-file-transfer-channel.c
@@ -171,6 +171,18 @@ static void salut_file_transfer_channel_set_state (
SalutFileTransferStateChangeReason reason);
static void
+contact_lost_cb (SalutContact *contact,
+ SalutFileTransferChannel *self)
+{
+ g_assert (contact == self->priv->contact);
+
+ salut_file_transfer_channel_set_state (
+ SALUT_SVC_CHANNEL_TYPE_FILE_TRANSFER (self),
+ SALUT_FILE_TRANSFER_STATE_CANCELLED,
+ SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_STOPPED);
+}
+
+static void
salut_file_transfer_channel_get_property (GObject *object,
guint property_id,
GValue *value,
@@ -317,6 +329,8 @@ salut_file_transfer_channel_set_property (GObject *object,
break;
case PROP_CONTACT:
self->priv->contact = g_value_dup_object (value);
+ g_signal_connect (self->priv->contact, "lost",
+ G_CALLBACK (contact_lost_cb), self);
break;
case PROP_CONNECTION:
self->priv->connection = g_value_get_object (value);
@@ -745,6 +759,8 @@ salut_file_transfer_channel_dispose (GObject *object)
if (self->priv->contact)
{
+ g_signal_handlers_disconnect_by_func (self->priv->contact,
+ contact_lost_cb, self);
g_object_unref (self->priv->contact);
self->priv->contact = NULL;
}
--
1.5.6.5
More information about the Telepathy-commits
mailing list