]> uap-core.de Git - note.git/commitdiff
update toolkit
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 14 Apr 2026 16:09:11 +0000 (18:09 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Tue, 14 Apr 2026 16:09:11 +0000 (18:09 +0200)
ui/common/types.c
ui/ui/toolkit.h

index e0ecf515f16d06daa3c292c583c0042b248f0324..d0251dacce80f5934d7143a0c857516faa60128e 100644 (file)
@@ -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;
 }
index fb8c349790e3885bbc0e5f28ffc549125cd72040..df8594bba17aa6c02f066becd0b5ba211337678c 100644 (file)
@@ -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));