[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