]> git.0d.be Git - empathy.git/commitdiff
irc-network-chooser-dialog: disconnect live search signals in dispose
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 11 Mar 2013 15:50:46 +0000 (16:50 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 11 Mar 2013 15:55:39 +0000 (16:55 +0100)
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

libempathy-gtk/empathy-irc-network-chooser-dialog.c

index 5e4cb35838e654b006acd2474476f3839d92c917..5843f68251791b36eeb2ff77eec89522dc907214 100644 (file)
@@ -498,16 +498,6 @@ search_text_notify_cb (EmpathyLiveSearch *search,
   gtk_widget_set_sensitive (priv->select_button, sensitive);
 }
 
-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
 add_clicked_cb (GtkToolButton *button,
     EmpathyIrcNetworkChooserDialog *self)
@@ -642,8 +632,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);
@@ -657,6 +645,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);