Mercurial > dwindows
comparison gtk4/dw.c @ 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 |
comparison
equal
deleted
inserted
replaced
2330:58700e9fcba3 | 2331:addbd7db1e5c |
---|---|
3067 | 3067 |
3068 /* Delayed unparent of the popup menu from the parent */ | 3068 /* Delayed unparent of the popup menu from the parent */ |
3069 gboolean _dw_idle_popover_unparent(gpointer data) | 3069 gboolean _dw_idle_popover_unparent(gpointer data) |
3070 { | 3070 { |
3071 GtkWidget *self = GTK_WIDGET(data); | 3071 GtkWidget *self = GTK_WIDGET(data); |
3072 | 3072 GtkWidget *box, *window = g_object_get_data(G_OBJECT(self), "_dw_window"); |
3073 gtk_widget_unparent(self); | 3073 |
3074 if(window && GTK_IS_WINDOW(window) && | |
3075 (box = g_object_get_data(G_OBJECT(window), "_dw_grid")) && GTK_IS_GRID(box)) | |
3076 gtk_grid_remove(GTK_GRID(box), self); | |
3077 else | |
3078 gtk_widget_unparent(self); | |
3074 return false; | 3079 return false; |
3075 } | 3080 } |
3076 | 3081 |
3077 void _dw_popover_menu_closed(GtkPopover *self, gpointer data) | 3082 void _dw_popover_menu_closed(GtkPopover *self, gpointer data) |
3078 { | 3083 { |
3101 if(menu && *menu && G_MENU(*menu)) | 3106 if(menu && *menu && G_MENU(*menu)) |
3102 { | 3107 { |
3103 GtkWidget *tmp = gtk_popover_menu_new_from_model_full(G_MENU_MODEL(*menu), GTK_POPOVER_MENU_NESTED); | 3108 GtkWidget *tmp = gtk_popover_menu_new_from_model_full(G_MENU_MODEL(*menu), GTK_POPOVER_MENU_NESTED); |
3104 GdkRectangle rect = { x, y, 1, 1 }; | 3109 GdkRectangle rect = { x, y, 1, 1 }; |
3105 | 3110 |
3106 gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); | 3111 if(GTK_IS_WINDOW(parent)) |
3112 { | |
3113 GtkWidget *box = g_object_get_data(G_OBJECT(parent), "_dw_grid"); | |
3114 | |
3115 if(box && GTK_IS_GRID(box)) | |
3116 { | |
3117 gtk_grid_attach(GTK_GRID(box), tmp, 65535, 65535, 1, 1); | |
3118 g_object_set_data(G_OBJECT(tmp), "_dw_window", (gpointer)parent); | |
3119 } | |
3120 } | |
3121 else | |
3122 gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); | |
3107 | 3123 |
3108 if(!g_object_get_data(G_OBJECT(*menu), "_dw_menuparent")) | 3124 if(!g_object_get_data(G_OBJECT(*menu), "_dw_menuparent")) |
3109 { | 3125 { |
3110 int menugroup = DW_POINTER_TO_INT(g_object_get_data(G_OBJECT(*menu), "_dw_menugroup")); | 3126 int menugroup = DW_POINTER_TO_INT(g_object_get_data(G_OBJECT(*menu), "_dw_menugroup")); |
3111 GSimpleActionGroup *group = g_object_get_data(G_OBJECT(*menu), "_dw_group"); | 3127 GSimpleActionGroup *group = g_object_get_data(G_OBJECT(*menu), "_dw_group"); |