Mercurial > dwindows
changeset 2332:594111e84e89
GTK4: Save pointer to the activate popup menu for a window.
Clear the pointer when it is destroyed, either popup or bar.
Should theoretically be able to destroy an active popup now.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 01 Mar 2021 13:23:58 +0000 |
parents | addbd7db1e5c |
children | d0f884083c63 |
files | gtk4/dw.c |
diffstat | 1 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk4/dw.c Mon Mar 01 12:12:31 2021 +0000 +++ b/gtk4/dw.c Mon Mar 01 13:23:58 2021 +0000 @@ -2747,14 +2747,20 @@ { GtkWidget *window = NULL; - /* If it is a menu bar, try to delete the reference to it */ - if(GTK_IS_POPOVER_MENU_BAR(*menu) && + /* If it is attached to a window, try to delete the reference to it */ + if((GTK_IS_POPOVER_MENU_BAR(*menu) || GTK_IS_POPOVER_MENU(*menu)) && (window = GTK_WIDGET(g_object_get_data(G_OBJECT(*menu), "_dw_window")))) - g_object_set_data(G_OBJECT(window), "_dw_menubar", NULL); + { + if(GTK_IS_POPOVER_MENU_BAR(*menu)) + g_object_set_data(G_OBJECT(window), "_dw_menubar", NULL); + else + g_object_set_data(G_OBJECT(window), "_dw_menu_popup", NULL); + } /* Actually destroy the menu */ if(GTK_IS_WIDGET(*menu) && window) { GtkWidget *box = GTK_WIDGET(g_object_get_data(G_OBJECT(window), "_dw_grid")); + if(box && GTK_IS_GRID(box)) gtk_grid_remove(GTK_GRID(box), GTK_WIDGET(*menu)); else @@ -3116,6 +3122,7 @@ { gtk_grid_attach(GTK_GRID(box), tmp, 65535, 65535, 1, 1); g_object_set_data(G_OBJECT(tmp), "_dw_window", (gpointer)parent); + g_object_set_data(G_OBJECT(parent), "_dw_menu_popup", (gpointer)tmp); } } else