[empathy/gnome-3-6] irc-network-chooser-dialog: disconnect live search signals in dispose



commit 1051341e404a481c3296dddc8f75d5decc28f21d
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Mon Mar 11 16:50:46 2013 +0100

    irc-network-chooser-dialog: disconnect live search signals in dispose
    
    The 'destroyed' signal is called to late, we have to disconnect those signals
    before destroying the live search object.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=692105

 .../empathy-irc-network-chooser-dialog.c           |   24 ++++++++++----------
 1 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/libempathy-gtk/empathy-irc-network-chooser-dialog.c 
b/libempathy-gtk/empathy-irc-network-chooser-dialog.c
index 755eb58..13efaa5 100644
--- a/libempathy-gtk/empathy-irc-network-chooser-dialog.c
+++ b/libempathy-gtk/empathy-irc-network-chooser-dialog.c
@@ -505,16 +505,6 @@ search_text_notify_cb (EmpathyLiveSearch *search,
 }
 
 static void
-dialog_destroy_cb (GtkWidget *widget,
-    EmpathyIrcNetworkChooserDialog *self)
-{
-  EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
-
-  g_signal_handler_disconnect (priv->search, priv->search_sig);
-  g_signal_handler_disconnect (priv->search, priv->activate_sig);
-}
-
-static void
 empathy_irc_network_chooser_dialog_constructed (GObject *object)
 {
   EmpathyIrcNetworkChooserDialog *self = (EmpathyIrcNetworkChooserDialog *) object;
@@ -598,8 +588,6 @@ empathy_irc_network_chooser_dialog_constructed (GObject *object)
 
   g_signal_connect (self, "response",
       G_CALLBACK (dialog_response_cb), self);
-  g_signal_connect (self, "destroy",
-      G_CALLBACK (dialog_destroy_cb), self);
 
   /* Request a side ensuring to display at least some networks */
   gtk_widget_set_size_request (GTK_WIDGET (self), -1, 300);
@@ -613,6 +601,18 @@ empathy_irc_network_chooser_dialog_dispose (GObject *object)
   EmpathyIrcNetworkManager *self = (EmpathyIrcNetworkManager *) object;
   EmpathyIrcNetworkChooserDialogPriv *priv = GET_PRIV (self);
 
+  if (priv->search_sig != 0)
+    {
+      g_signal_handler_disconnect (priv->search, priv->search_sig);
+      priv->search_sig = 0;
+    }
+
+  if (priv->activate_sig != 0)
+    {
+      g_signal_handler_disconnect (priv->search, priv->activate_sig);
+      priv->activate_sig = 0;
+    }
+
   tp_clear_object (&priv->settings);
   tp_clear_object (&priv->network);
   tp_clear_object (&priv->network_manager);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]