Mercurial > dwindows
changeset 2331:addbd7db1e5c
GTK4: If parent passed to dw_menu_popup() is a GtkWindow, add the popup to
the grid, and then remove it from the grid in the close callback.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 01 Mar 2021 12:12:31 +0000 |
parents | 58700e9fcba3 |
children | 594111e84e89 |
files | gtk4/dw.c |
diffstat | 1 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk4/dw.c Mon Mar 01 01:31:12 2021 +0000 +++ b/gtk4/dw.c Mon Mar 01 12:12:31 2021 +0000 @@ -3069,8 +3069,13 @@ gboolean _dw_idle_popover_unparent(gpointer data) { GtkWidget *self = GTK_WIDGET(data); - - gtk_widget_unparent(self); + GtkWidget *box, *window = g_object_get_data(G_OBJECT(self), "_dw_window"); + + if(window && GTK_IS_WINDOW(window) && + (box = g_object_get_data(G_OBJECT(window), "_dw_grid")) && GTK_IS_GRID(box)) + gtk_grid_remove(GTK_GRID(box), self); + else + gtk_widget_unparent(self); return false; } @@ -3103,7 +3108,18 @@ GtkWidget *tmp = gtk_popover_menu_new_from_model_full(G_MENU_MODEL(*menu), GTK_POPOVER_MENU_NESTED); GdkRectangle rect = { x, y, 1, 1 }; - gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); + if(GTK_IS_WINDOW(parent)) + { + GtkWidget *box = g_object_get_data(G_OBJECT(parent), "_dw_grid"); + + if(box && GTK_IS_GRID(box)) + { + gtk_grid_attach(GTK_GRID(box), tmp, 65535, 65535, 1, 1); + g_object_set_data(G_OBJECT(tmp), "_dw_window", (gpointer)parent); + } + } + else + gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); if(!g_object_get_data(G_OBJECT(*menu), "_dw_menuparent")) {