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