implement gtk3 popup hide handler for sourcelist context menus

Mon, 03 Nov 2025 21:10:39 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 03 Nov 2025 21:10:39 +0100
changeset 889
5be43605226f
parent 888
1bb3a6641857
child 890
8d30cbd1c465

implement gtk3 popup hide handler for sourcelist context menus

ui/gtk/list.c file | annotate | diff | comparison | revisions
--- a/ui/gtk/list.c	Fri Oct 31 14:47:42 2025 +0100
+++ b/ui/gtk/list.c	Mon Nov 03 21:10:39 2025 +0100
@@ -2346,7 +2346,7 @@
     }
 }
 
-#if GTK_CHECK_VERSION(3, 0, 0)
+#if GTK_CHECK_VERSION(4, 0, 0)
 static void button_popover_closed(GtkPopover *popover, GtkWidget *button) {
     g_object_set_data(G_OBJECT(button), "ui-button-popup", NULL);
     if(g_object_get_data(G_OBJECT(button), "ui-button-invisible")) {
@@ -2354,6 +2354,14 @@
         gtk_widget_set_visible(button, FALSE);
     }
 }
+#else
+static void popup_hide(GtkWidget *self, GtkWidget *button) {
+    g_object_set_data(G_OBJECT(button), "ui-button-popup", NULL);
+    if(g_object_get_data(G_OBJECT(button), "ui-button-invisible")) {
+        g_object_set_data(G_OBJECT(button), "ui-button-invisible", NULL);
+        gtk_widget_set_visible(button, FALSE);
+    }
+}
 #endif
 
 static void listbox_fill_row(UiListBox *listbox, GtkWidget *row, UiListBoxSubList *sublist, UiSubListItem *item, int index) {
@@ -2433,7 +2441,11 @@
         if(item->button_menu) {
             UIMENU menu = ui_contextmenu_create(item->button_menu, listbox->obj, button);
             event->customdata3 = menu;
-            g_signal_connect(menu, "closed", G_CALLBACK(button_popover_closed), button);
+#if GTK_CHECK_VERSION(4, 0, 0)
+            g_signal_connect(menu, "closed", G_CALLBACK(button_popover_closed), button);        
+#else
+            g_signal_connect(menu, "hide", G_CALLBACK(popup_hide), button);        
+#endif
             ui_menubuilder_unref(item->button_menu);
         }
     }

mercurial