# HG changeset patch # User Olaf Wintermann # Date 1762285099 -3600 # Node ID 8d30cbd1c4658695e68c95b6ba2a1fc1d885af30 # Parent 5be43605226fc49138d814d2508c2db3b74c0205 sourcelist contextmenu item events also get sublist eventdata (GTK) diff -r 5be43605226f -r 8d30cbd1c465 ui/common/menu.c --- a/ui/common/menu.c Mon Nov 03 21:10:39 2025 +0100 +++ b/ui/common/menu.c Tue Nov 04 20:38:19 2025 +0100 @@ -41,6 +41,22 @@ static int menu_item_counter = 0; +static void *tmp_eventdata; +static int tmp_eventdata_type; + +void uic_set_tmp_eventdata(void *eventdata, int type) { + tmp_eventdata = eventdata; + tmp_eventdata_type = type; +} + +void* uic_get_tmp_eventdata(void) { + return tmp_eventdata; +} + +int uic_get_tmp_eventdata_type(void) { + return tmp_eventdata_type; +} + void uic_menu_init(void) { global_builder.current = cxLinkedListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS); current_builder = &global_builder; diff -r 5be43605226f -r 8d30cbd1c465 ui/common/menu.h --- a/ui/common/menu.h Mon Nov 03 21:10:39 2025 +0100 +++ b/ui/common/menu.h Tue Nov 04 20:38:19 2025 +0100 @@ -131,6 +131,10 @@ int* uic_copy_groups(const int* groups, size_t *ngroups); +void uic_set_tmp_eventdata(void *eventdata, int type); +void* uic_get_tmp_eventdata(void); +int uic_get_tmp_eventdata_type(void); + #ifdef __cplusplus } #endif diff -r 5be43605226f -r 8d30cbd1c465 ui/gtk/list.c --- a/ui/gtk/list.c Mon Nov 03 21:10:39 2025 +0100 +++ b/ui/gtk/list.c Tue Nov 04 20:38:19 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,6 +2340,8 @@ } 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)); diff -r 5be43605226f -r 8d30cbd1c465 ui/gtk/list.h --- a/ui/gtk/list.h Mon Nov 03 21:10:39 2025 +0100 +++ b/ui/gtk/list.h Tue Nov 04 20:38:19 2025 +0100 @@ -127,6 +127,7 @@ void *onbuttonclickdata; GtkListBoxRow *first_row; UiBool header_is_item; + UiSubListEventData current_eventdata; }; diff -r 5be43605226f -r 8d30cbd1c465 ui/gtk/menu.c --- a/ui/gtk/menu.c Mon Nov 03 21:10:39 2025 +0100 +++ b/ui/gtk/menu.c Tue Nov 04 20:38:19 2025 +0100 @@ -284,6 +284,7 @@ event->callback = list->callback; event->value = i - 1; event->customdata = elm; + event->customint = UI_EVENT_DATA_LIST_ELM; g_signal_connect( widget, @@ -309,9 +310,17 @@ evt.obj = event->obj; evt.window = event->obj->window; evt.document = event->obj->ctx->document; + if(event->customdata) { + evt.eventdata = event->customdata; + evt.eventdatatype = event->customint; + } else { + evt.eventdata = uic_get_tmp_eventdata(); + evt.eventdatatype = uic_get_tmp_eventdata_type(); + } evt.eventdata = event->customdata; evt.intval = event->value; - event->callback(&evt, event->userdata); + event->callback(&evt, event->userdata); + uic_set_tmp_eventdata(NULL, 0); } void ui_menu_event_toggled(GtkCheckMenuItem *ci, UiEventData *event) { @@ -747,10 +756,16 @@ evt.obj = event->obj; evt.window = event->obj->window; evt.document = event->obj->ctx->document; - evt.eventdata = event->customdata; - evt.eventdatatype = event->customint; + if(event->customdata) { + evt.eventdata = event->customdata; + evt.eventdatatype = event->customint; + } else { + evt.eventdata = uic_get_tmp_eventdata(); + evt.eventdatatype = uic_get_tmp_eventdata_type(); + } evt.intval = intval; - event->callback(&evt, event->userdata); + event->callback(&evt, event->userdata); + uic_set_tmp_eventdata(NULL, 0); } void ui_menu_list_item_activate_event_wrapper(GSimpleAction* self, GVariant* parameter, UiEventData *event) {