summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2017-09-26 07:10:39 +0200
committerTimm Bäder <mail@baedert.org>2018-01-26 11:37:31 +0100
commit136b88534caaca9200847b049a5ef50b77f86dc5 (patch)
treeca24e8f46362bb6295ad36bcd54480c5bd43b4c2
parent4c8f7c4aca9d9e449e274e83caddcf72a9641bf2 (diff)
downloadgtk+-136b88534caaca9200847b049a5ef50b77f86dc5.tar.gz
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.
-rw-r--r--gtk/gtkcombobox.c15
-rw-r--r--gtk/gtkmenu.c13
2 files changed, 17 insertions, 11 deletions
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 2946ececa8..cf01278db5 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 c443cfeb22..81080e9067 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,