# HG changeset patch # User Olaf Wintermann # Date 1760773385 -7200 # Node ID 7f2287ae2b78d666ee8b7ca30c2ebe24cbc654ab # Parent c13653b1cc9de3ae26e50edc829404ab71395bc2 add reference counting to the menu builder diff -r c13653b1cc9d -r 7f2287ae2b78 application/main.c --- a/application/main.c Sat Oct 18 09:33:39 2025 +0200 +++ b/application/main.c Sat Oct 18 09:43:05 2025 +0200 @@ -500,6 +500,7 @@ } void sourcelist_getvalue(UiList *list, void *sublistdata, void *rowdata, int index, UiSubListItem *item, void *userdata) { + ui_menubuilder_ref(sourcelist_menu); item->label = strdup(rowdata); item->button_icon = strdup("view-more-horizontal"); item->button_menu = sourcelist_menu; diff -r c13653b1cc9d -r 7f2287ae2b78 ui/common/menu.c --- a/ui/common/menu.c Sat Oct 18 09:33:39 2025 +0200 +++ b/ui/common/menu.c Sat Oct 18 09:43:05 2025 +0200 @@ -255,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; @@ -324,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); + } +} diff -r c13653b1cc9d -r 7f2287ae2b78 ui/common/menu.h --- a/ui/common/menu.h Sat Oct 18 09:33:39 2025 +0200 +++ b/ui/common/menu.h Sat Oct 18 09:43:05 2025 +0200 @@ -120,6 +120,7 @@ UiMenu *menus_begin; UiMenu *menus_end; CxList *current; + int ref; }; void uic_menu_init(void); diff -r c13653b1cc9d -r 7f2287ae2b78 ui/gtk/list.c --- a/ui/gtk/list.c Sat Oct 18 09:33:39 2025 +0200 +++ b/ui/gtk/list.c Sat Oct 18 09:43:05 2025 +0200 @@ -2420,6 +2420,7 @@ 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); + ui_menubuilder_unref(item->button_menu); } } } diff -r c13653b1cc9d -r 7f2287ae2b78 ui/ui/menu.h --- a/ui/ui/menu.h Sat Oct 18 09:33:39 2025 +0200 +++ b/ui/ui/menu.h Sat Oct 18 09:43:05 2025 +0200 @@ -94,7 +94,8 @@ #define ui_contextmenu(builder) for(ui_contextmenu_builder(builder);ui_menu_is_open();ui_menu_close()) UIEXPORT void ui_contextmenu_builder(UiMenuBuilder **out_builder); -UIEXPORT void ui_menubuilder_free(UiMenuBuilder *builder); +UIEXPORT void ui_menubuilder_ref(UiMenuBuilder *builder); +UIEXPORT void ui_menubuilder_unref(UiMenuBuilder *builder); UIEXPORT UIMENU ui_contextmenu_create(UiMenuBuilder *builder, UiObject *obj, UIWIDGET widget); UIEXPORT void ui_contextmenu_popup(UIMENU menu, UIWIDGET widget, int x, int y);