]> git.0d.be Git - empathy.git/commitdiff
Remove approvals when the underlying operation got invalidated
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Fri, 9 Jan 2009 16:15:49 +0000 (16:15 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 9 Jan 2009 16:15:49 +0000 (16:15 +0000)
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
svn path=/trunk/; revision=2195

src/empathy-event-manager.c

index 1855027b4f884f63e44eb30bd30b237f59815fe5..7643ad7351c3b3101f9a47ae70bb1f9a5eb45ccf 100644 (file)
@@ -52,6 +52,7 @@ typedef struct {
   EmpathyDispatchOperation *operation;
   gulong approved_handler;
   gulong claimed_handler;
+  gulong invalidated_handler;
   /* Remove contact if applicable */
   EmpathyContact *contact;
   /* Tube dispatcher if applicable */
@@ -109,6 +110,8 @@ event_manager_approval_free (EventManagerApproval *approval)
     approval->approved_handler);
   g_signal_handler_disconnect (approval->operation,
     approval->claimed_handler);
+  g_signal_handler_disconnect (approval->operation,
+    approval->invalidated_handler);
   g_object_unref (approval->operation);
 
   if (approval->contact != NULL)
@@ -236,6 +239,14 @@ event_manager_operation_claimed_cb (EmpathyDispatchOperation *operation,
   event_manager_approval_done (approval);
 }
 
+static void
+event_manager_operation_invalidated_cb (EmpathyDispatchOperation *operation,
+  guint domain, gint code, gchar *message,
+  EventManagerApproval *approval)
+{
+  event_manager_approval_done (approval);
+}
+
 static void
 event_manager_media_channel_got_name_cb (EmpathyContact *contact,
   const GError *error, gpointer user_data, GObject *object)
@@ -388,6 +399,9 @@ event_manager_approve_channel_cb (EmpathyDispatcher *dispatcher,
   approval->claimed_handler = g_signal_connect (operation, "claimed",
      G_CALLBACK (event_manager_operation_claimed_cb), approval);
 
+  approval->invalidated_handler = g_signal_connect (operation, "invalidated",
+     G_CALLBACK (event_manager_operation_invalidated_cb), approval);
+
   if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT))
     {
       EmpathyTpChat *tp_chat =