# HG changeset patch # User Olaf Wintermann # Date 1776182900 -7200 # Node ID 09459f07ab11c42d0d035a5421f7ec0a03395a38 # Parent d2ac2ac4eee4df6062a4b4893ead982c9321ec5a add destructor func to UiList diff -r d2ac2ac4eee4 -r 09459f07ab11 ui/common/types.c --- a/ui/common/types.c Sat Apr 11 16:29:40 2026 +0200 +++ b/ui/common/types.c Tue Apr 14 18:08:20 2026 +0200 @@ -100,6 +100,7 @@ /* --------------------------- UiList --------------------------- */ void uic_ucx_list_init(UiContext *ctx, UiList *list, void *unused) { + list->destroy = uic_ucx_list_destroy; list->data = cxArrayListCreate(ctx->mp->allocator, CX_STORE_POINTERS, 32); list->first = ui_list_first; list->next = ui_list_next; @@ -129,7 +130,9 @@ } void ui_list_free(UiContext *ctx, UiList *list) { - if(!default_list_destroy) { + if(list->destroy) { + list->destroy(ctx, list, NULL); + } else if(!default_list_destroy) { uic_ucx_list_destroy(ctx, list, NULL); } else { default_list_destroy(ctx, list, default_list_destroy_userdata); @@ -935,6 +938,10 @@ default_list_destroy_userdata = userdata; } +UIEXPORT void ui_list_class_set_destructor(UiList *list, ui_list_destroy_func destroy) { + list->destroy = destroy; +} + void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)) { list->first = first; } diff -r d2ac2ac4eee4 -r 09459f07ab11 ui/ui/toolkit.h --- a/ui/ui/toolkit.h Sat Apr 11 16:29:40 2026 +0200 +++ b/ui/ui/toolkit.h Tue Apr 14 18:08:20 2026 +0200 @@ -433,6 +433,8 @@ * abstract list */ struct UiList { + /* destructor */ + ui_list_destroy_func destroy; /* get the first element */ void*(*first)(UiList *list); /* get the next element */ @@ -728,6 +730,7 @@ UIEXPORT void ui_global_list_initializer(ui_list_init_func func, void *userdata); UIEXPORT void ui_global_list_destructor(ui_list_destroy_func func, void *userdata); +UIEXPORT void ui_list_class_set_destructor(UiList *list, ui_list_destroy_func destroy); UIEXPORT void ui_list_class_set_first(UiList *list, void*(*first)(UiList *list)); UIEXPORT void ui_list_class_set_next(UiList *list, void*(*next)(UiList *list)); UIEXPORT void ui_list_class_set_get(UiList *list, void*(*get)(UiList *list, int i));