ui/gtk/list.c

changeset 113
dde28a806552
parent 112
c3f2f16fa4b8
--- a/ui/gtk/list.c	Sun Oct 19 21:20:08 2025 +0200
+++ b/ui/gtk/list.c	Mon Nov 10 21:52:51 2025 +0100
@@ -2318,19 +2318,19 @@
 static void listbox_button_clicked(GtkWidget *button, UiEventDataExt *data) {
     UiListBoxSubList *sublist = data->customdata0;
     
-    UiSubListEventData eventdata;
-    eventdata.list = sublist->var->value;
-    eventdata.sublist_index = sublist->index;
-    eventdata.row_index = data->value0;
-    eventdata.sublist_userdata = sublist->userdata;
-    eventdata.row_data = eventdata.list->get(eventdata.list, eventdata.row_index);
-    eventdata.event_data = data->customdata2;
+    UiSubListEventData *eventdata = &sublist->listbox->current_eventdata;
+    eventdata->list = sublist->var->value;
+    eventdata->sublist_index = sublist->index;
+    eventdata->row_index = data->value0;
+    eventdata->sublist_userdata = sublist->userdata;
+    eventdata->row_data = eventdata->list->get(eventdata->list, eventdata->row_index);
+    eventdata->event_data = data->customdata2;
     
     UiEvent event;
     event.obj = data->obj;
     event.window = event.obj->window;
     event.document = event.obj->ctx->document;
-    event.eventdata = &eventdata;
+    event.eventdata = eventdata;
     event.eventdatatype = UI_EVENT_DATA_SUBLIST;
     event.intval = data->value0;
     event.set = ui_get_setop();
@@ -2340,13 +2340,15 @@
     }
     
     if(data->customdata3) {
+        uic_set_tmp_eventdata(eventdata, UI_EVENT_DATA_SUBLIST);
+        
         UIMENU menu = data->customdata3;
         g_object_set_data(G_OBJECT(button), "ui-button-popup", menu);
         gtk_popover_popup(GTK_POPOVER(menu));
     }
 }
 
-#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 +2356,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 +2443,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