--- a/ui/common/menu.c Sat Oct 04 14:54:25 2025 +0200 +++ b/ui/common/menu.c Sun Oct 19 21:20:08 2025 +0200 @@ -133,7 +133,6 @@ item->item.type = UI_MENU_ITEM; item->label = nl_strdup(args->label); - item->stockid = nl_strdup(args->stockid); item->icon = nl_strdup(args->icon); item->userdata = args->onclickdata; item->callback = args->onclick; @@ -160,7 +159,6 @@ item->item.type = UI_MENU_CHECK_ITEM; item->label = nl_strdup(args->label); - item->stockid = nl_strdup(args->stockid); item->icon = nl_strdup(args->icon); item->varname = nl_strdup(args->varname); item->userdata = args->onchangedata; @@ -178,7 +176,6 @@ item->item.type = UI_MENU_RADIO_ITEM; item->label = nl_strdup(args->label); - item->stockid = nl_strdup(args->stockid); item->icon = nl_strdup(args->icon); item->varname = nl_strdup(args->varname); item->userdata = args->onchangedata; @@ -258,6 +255,7 @@ builder->menus_begin = NULL; builder->menus_end = NULL; builder->current = cxLinkedListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS); + builder->ref = 1; current_builder = builder; *out_builder = builder; @@ -284,7 +282,6 @@ UiMenuItem *i = (UiMenuItem*)item; free(i->groups); free(i->label); - free(i->stockid); free(i->icon); break; } @@ -292,7 +289,6 @@ UiMenuCheckItem *i = (UiMenuCheckItem*)item; free(i->groups); free(i->label); - free(i->stockid); free(i->icon); free(i->varname); break; @@ -301,9 +297,8 @@ UiMenuRadioItem *i = (UiMenuRadioItem*)item; free(i->groups); free(i->label); - free(i->stockid); free(i->icon); - //free(i->varname); + free(i->varname); break; } case UI_MENU_ITEM_LIST: { @@ -330,3 +325,13 @@ cxListFree(builder->current); free(builder); } + +void ui_menubuilder_ref(UiMenuBuilder *builder) { + builder->ref++; +} + +void ui_menubuilder_unref(UiMenuBuilder *builder) { + if(--builder->ref <= 0) { + ui_menubuilder_free(builder); + } +}