diff options
author | Timm Bäder <mail@baedert.org> | 2017-09-26 07:10:39 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2018-01-26 11:37:31 +0100 |
commit | 136b88534caaca9200847b049a5ef50b77f86dc5 (patch) | |
tree | ca24e8f46362bb6295ad36bcd54480c5bd43b4c2 | |
parent | 4c8f7c4aca9d9e449e274e83caddcf72a9641bf2 (diff) | |
download | gtk+-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.c | 15 | ||||
-rw-r--r-- | gtk/gtkmenu.c | 13 |
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, |