From caa9255dd3beacb44fcc6ef005d703966be9c487 Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Sun, 22 Apr 2018 14:52:27 +0100 Subject: [PATCH] MenuButton: Drop ref to Popover on its ::destroy Otherwise, if the Popover is destroyed before the MenuButton, the latter still had a non-NULL but invalid instance and tried to use it in dispose Close https://gitlab.gnome.org/GNOME/gtk/issues/199 --- gtk/gtkmenubutton.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 2703ea6ee1..98d139b705 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -1086,6 +1086,12 @@ gtk_menu_button_get_use_popover (GtkMenuButton *menu_button) return priv->use_popover; } +static void +popover_destroy_cb (GtkMenuButton *menu_button) +{ + gtk_menu_button_set_popover (menu_button, NULL); +} + /** * gtk_menu_button_set_popover: * @menu_button: a #GtkMenuButton @@ -1127,6 +1133,8 @@ gtk_menu_button_set_popover (GtkMenuButton *menu_button, gtk_popover_set_relative_to (GTK_POPOVER (priv->popover), GTK_WIDGET (menu_button)); g_signal_connect_swapped (priv->popover, "closed", G_CALLBACK (menu_deactivate_cb), menu_button); + g_signal_connect_swapped (priv->popover, "destroy", + G_CALLBACK (popover_destroy_cb), menu_button); update_popover_direction (menu_button); gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (menu_button)), "menu-button"); }