--- a/ui/common/menu.c Fri Apr 24 12:52:05 2026 +0200 +++ b/ui/common/menu.c Fri Apr 24 12:52:18 2026 +0200 @@ -44,6 +44,17 @@ static void *tmp_eventdata; static int tmp_eventdata_type; + +static void* getvalue_wrapper(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) { + ui_getvaluefunc getvalue = (ui_getvaluefunc)userdata; + return getvalue(elm, col); +} + +static void* str_getvalue(UiList *list, void *elm, int row, int col, void *userdata, UiBool *freeResult) { + return elm; +} + + void uic_set_tmp_eventdata(void *eventdata, int type) { tmp_eventdata = eventdata; tmp_eventdata_type = type; @@ -208,7 +219,15 @@ item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_ITEM_LIST; - item->getvalue = args->getvalue; + if(args->getvalue2) { + item->getvalue = args->getvalue2; + item->getvaluedata = args->getvaluedata; + } else if(args->getvalue) { + item->getvalue = getvalue_wrapper; + item->getvaluedata = (void*)args->getvalue; + } else { + item->getvalue = str_getvalue; + } item->callback = args->onselect; item->userdata = args->onselectdata; item->varname = nl_strdup(args->varname); @@ -223,6 +242,15 @@ item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_CHECKITEM_LIST; + if(args->getvalue2) { + item->getvalue = args->getvalue2; + item->getvaluedata = args->getvaluedata; + } else if(args->getvalue) { + item->getvalue = getvalue_wrapper; + item->getvaluedata = (void*)args->getvalue; + } else { + item->getvalue = str_getvalue; + } item->callback = args->onselect; item->userdata = args->onselectdata; item->varname = nl_strdup(args->varname); @@ -236,6 +264,15 @@ item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_RADIOITEM_LIST; + if(args->getvalue2) { + item->getvalue = args->getvalue2; + item->getvaluedata = args->getvaluedata; + } else if(args->getvalue) { + item->getvalue = getvalue_wrapper; + item->getvaluedata = (void*)args->getvalue; + } else { + item->getvalue = str_getvalue; + } item->callback = args->onselect; item->userdata = args->onselectdata; item->varname = nl_strdup(args->varname);