--- 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); } }