Sat, 18 Oct 2025 09:43:05 +0200
add reference counting to the menu builder
| application/main.c | file | annotate | diff | comparison | revisions | |
| ui/common/menu.c | file | annotate | diff | comparison | revisions | |
| ui/common/menu.h | file | annotate | diff | comparison | revisions | |
| ui/gtk/list.c | file | annotate | diff | comparison | revisions | |
| ui/ui/menu.h | file | annotate | diff | comparison | revisions |
--- 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;
--- 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); + } +}
--- 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);
--- 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); } } }
--- 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);