add destructor func to UiList default tip

Tue, 14 Apr 2026 18:08:20 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 14 Apr 2026 18:08:20 +0200
changeset 1088
09459f07ab11
parent 1087
d2ac2ac4eee4

add destructor func to UiList

ui/common/types.c file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
--- 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;
 }
--- 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));

mercurial