From: Olaf Wintermann Date: Tue, 14 Apr 2026 16:09:11 +0000 (+0200) Subject: update toolkit X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=7bdbab337402329bcaea58d8fe9347cfe0d77fba;p=note.git update toolkit --- diff --git a/ui/common/types.c b/ui/common/types.c index e0ecf51..d0251da 100644 --- a/ui/common/types.c +++ b/ui/common/types.c @@ -100,6 +100,7 @@ void ui_notify_evt(UiObserver *observer, UiEvent *event) { /* --------------------------- 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 @@ UiList* ui_list_new2(UiContext *ctx, const char *name, ui_list_init_func listini } 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 @@ void ui_global_list_destructor(ui_list_destroy_func func, void *userdata) { 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 --git a/ui/ui/toolkit.h b/ui/ui/toolkit.h index fb8c349..df8594b 100644 --- a/ui/ui/toolkit.h +++ b/ui/ui/toolkit.h @@ -433,6 +433,8 @@ typedef void (*ui_list_destroy_func)(UiContext *ctx, UiList *list, void *userdat * 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 UiBool ui_selection_events_is_enabled(void); 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));