[gtk+/gtk-3-22] menu: Guard against NULL toplevel



commit 136b88534caaca9200847b049a5ef50b77f86dc5
Author: Timm Bäder <mail baedert org>
Date:   Tue Sep 26 07:10:39 2017 +0200

    menu: Guard against NULL toplevel
    
    This can happen, as indicated by GtkMenu explicitly connecting to
    ::destroy of its toplevel window. Do the same thing in GtkComboBox.

 gtk/gtkcombobox.c |   15 +++++++++------
 gtk/gtkmenu.c     |   13 ++++++++-----
 2 files changed, 17 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 2946ece..cf01278 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -1790,12 +1790,15 @@ gtk_combo_box_detacher (GtkWidget *widget,
 
   g_return_if_fail (priv->popup_widget == (GtkWidget *) menu);
 
-  g_signal_handlers_disconnect_by_func (menu->priv->toplevel,
-                                        gtk_combo_box_menu_show,
-                                        combo_box);
-  g_signal_handlers_disconnect_by_func (menu->priv->toplevel,
-                                        gtk_combo_box_menu_hide,
-                                        combo_box);
+  if (menu->priv->toplevel)
+    {
+      g_signal_handlers_disconnect_by_func (menu->priv->toplevel,
+                                            gtk_combo_box_menu_show,
+                                            combo_box);
+      g_signal_handlers_disconnect_by_func (menu->priv->toplevel,
+                                            gtk_combo_box_menu_hide,
+                                            combo_box);
+    }
 
   priv->popup_widget = NULL;
 }
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index c443cfe..81080e9 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -1625,11 +1625,14 @@ gtk_menu_detach (GtkMenu *menu)
   g_object_set_data (G_OBJECT (menu), I_(attach_data_key), NULL);
 
   /* Detach the toplevel window. */
-  g_signal_handlers_disconnect_by_func (toplevel,
-                                        (gpointer) menu_toplevel_attached_to,
-                                        menu);
-  if (gtk_window_get_attached_to (toplevel) == data->attach_widget)
-    gtk_window_set_attached_to (toplevel, NULL);
+  if (toplevel)
+    {
+      g_signal_handlers_disconnect_by_func (toplevel,
+                                            (gpointer) menu_toplevel_attached_to,
+                                            menu);
+      if (gtk_window_get_attached_to (toplevel) == data->attach_widget)
+        gtk_window_set_attached_to (toplevel, NULL);
+    }
 
   g_signal_handlers_disconnect_by_func (data->attach_widget,
                                         (gpointer) attach_widget_screen_changed,


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