ComboBox: Fix wrongly matched signal disconnect()s
authorDaniel Boles <dboles@src.gnome.org>
Mon, 28 Aug 2017 17:57:27 +0000 (18:57 +0100)
committerDaniel Boles <dboles@src.gnome.org>
Mon, 28 Aug 2017 19:01:57 +0000 (20:01 +0100)
Various disconnections had the wrong flags and/or data, so we failed to
disconnect a pile of signals, shown by 0 returned by the disconnect_*()
functions. Fix this, and use the nicer disconnect_by_*() while here.

gtk/gtkcombobox.c

index ede2fba62531bd4223f40eff287357d6a70f4504..a9c59d7ca6c3b7f0592cd7a53136d351e82af8e1 100644 (file)
@@ -1861,10 +1861,10 @@ gtk_combo_box_set_popup_widget (GtkComboBox *combo_box,
           gtk_window_set_type_hint (GTK_WINDOW (priv->popup_window),
                                     GDK_WINDOW_TYPE_HINT_COMBO);
 
-          g_signal_connect (GTK_WINDOW (priv->popup_window),"show",
+          g_signal_connect (priv->popup_window, "show",
                             G_CALLBACK (gtk_combo_box_child_show),
                             combo_box);
-          g_signal_connect (GTK_WINDOW (priv->popup_window),"hide",
+          g_signal_connect (priv->popup_window, "hide",
                             G_CALLBACK (gtk_combo_box_child_hide),
                             combo_box);
 
@@ -2792,17 +2792,11 @@ gtk_combo_box_menu_destroy (GtkComboBox *combo_box)
 {
   GtkComboBoxPrivate *priv = combo_box->priv;
 
-  g_signal_handlers_disconnect_matched (priv->button,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_menu_button_press, NULL);
-  g_signal_handlers_disconnect_matched (priv->button,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
+  g_signal_handlers_disconnect_by_func (priv->button,
+                                        gtk_combo_box_menu_button_press, combo_box);
+  g_signal_handlers_disconnect_by_func (priv->button,
                                         gtk_combo_box_button_state_flags_changed, combo_box);
-  g_signal_handlers_disconnect_matched (priv->popup_widget,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
+  g_signal_handlers_disconnect_by_func (priv->popup_widget,
                                         gtk_combo_box_menu_activate, combo_box);
 
   /* changing the popup window will unref the menu and the children */
@@ -3069,36 +3063,11 @@ gtk_combo_box_list_destroy (GtkComboBox *combo_box)
   GtkComboBoxPrivate *priv = combo_box->priv;
 
   /* disconnect signals */
-  g_signal_handlers_disconnect_matched (priv->tree_view,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL, NULL, combo_box);
-  g_signal_handlers_disconnect_matched (priv->button,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_list_button_pressed,
-                                        NULL);
-  g_signal_handlers_disconnect_matched (priv->popup_window,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
+  g_signal_handlers_disconnect_by_data (priv->tree_view, combo_box);
+  g_signal_handlers_disconnect_by_func (priv->button,
                                         gtk_combo_box_list_button_pressed,
-                                        NULL);
-  g_signal_handlers_disconnect_matched (priv->popup_window,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_list_button_released,
-                                        NULL);
-
-  g_signal_handlers_disconnect_matched (priv->popup_window,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_child_show,
-                                        NULL);
-
-  g_signal_handlers_disconnect_matched (priv->popup_window,
-                                        G_SIGNAL_MATCH_DATA,
-                                        0, 0, NULL,
-                                        gtk_combo_box_child_hide,
-                                        NULL);
+                                        combo_box);
+  g_signal_handlers_disconnect_by_data (priv->popup_window, combo_box);
 
   if (priv->cell_view)
     {