Mercurial > dwindows
comparison gtk4/dw.c @ 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 |
comparison
equal
deleted
inserted
replaced
2331:addbd7db1e5c | 2332:594111e84e89 |
---|---|
2745 { | 2745 { |
2746 if(menu && *menu) | 2746 if(menu && *menu) |
2747 { | 2747 { |
2748 GtkWidget *window = NULL; | 2748 GtkWidget *window = NULL; |
2749 | 2749 |
2750 /* If it is a menu bar, try to delete the reference to it */ | 2750 /* If it is attached to a window, try to delete the reference to it */ |
2751 if(GTK_IS_POPOVER_MENU_BAR(*menu) && | 2751 if((GTK_IS_POPOVER_MENU_BAR(*menu) || GTK_IS_POPOVER_MENU(*menu)) && |
2752 (window = GTK_WIDGET(g_object_get_data(G_OBJECT(*menu), "_dw_window")))) | 2752 (window = GTK_WIDGET(g_object_get_data(G_OBJECT(*menu), "_dw_window")))) |
2753 g_object_set_data(G_OBJECT(window), "_dw_menubar", NULL); | 2753 { |
2754 if(GTK_IS_POPOVER_MENU_BAR(*menu)) | |
2755 g_object_set_data(G_OBJECT(window), "_dw_menubar", NULL); | |
2756 else | |
2757 g_object_set_data(G_OBJECT(window), "_dw_menu_popup", NULL); | |
2758 } | |
2754 /* Actually destroy the menu */ | 2759 /* Actually destroy the menu */ |
2755 if(GTK_IS_WIDGET(*menu) && window) | 2760 if(GTK_IS_WIDGET(*menu) && window) |
2756 { | 2761 { |
2757 GtkWidget *box = GTK_WIDGET(g_object_get_data(G_OBJECT(window), "_dw_grid")); | 2762 GtkWidget *box = GTK_WIDGET(g_object_get_data(G_OBJECT(window), "_dw_grid")); |
2763 | |
2758 if(box && GTK_IS_GRID(box)) | 2764 if(box && GTK_IS_GRID(box)) |
2759 gtk_grid_remove(GTK_GRID(box), GTK_WIDGET(*menu)); | 2765 gtk_grid_remove(GTK_GRID(box), GTK_WIDGET(*menu)); |
2760 else | 2766 else |
2761 g_object_unref(G_OBJECT(*menu)); | 2767 g_object_unref(G_OBJECT(*menu)); |
2762 } | 2768 } |
3114 | 3120 |
3115 if(box && GTK_IS_GRID(box)) | 3121 if(box && GTK_IS_GRID(box)) |
3116 { | 3122 { |
3117 gtk_grid_attach(GTK_GRID(box), tmp, 65535, 65535, 1, 1); | 3123 gtk_grid_attach(GTK_GRID(box), tmp, 65535, 65535, 1, 1); |
3118 g_object_set_data(G_OBJECT(tmp), "_dw_window", (gpointer)parent); | 3124 g_object_set_data(G_OBJECT(tmp), "_dw_window", (gpointer)parent); |
3125 g_object_set_data(G_OBJECT(parent), "_dw_menu_popup", (gpointer)tmp); | |
3119 } | 3126 } |
3120 } | 3127 } |
3121 else | 3128 else |
3122 gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); | 3129 gtk_widget_set_parent(tmp, GTK_WIDGET(parent)); |
3123 | 3130 |