ui/common/context.c

changeset 906
edfdf9776da9
parent 905
41614c767451
child 916
6fdcf1cbbec9
--- a/ui/common/context.c	Tue Nov 18 10:23:42 2025 +0100
+++ b/ui/common/context.c	Tue Nov 18 12:55:28 2025 +0100
@@ -124,8 +124,10 @@
 }
 
 static void uic_context_unbind_vars(UiContext *ctx) {
+    ui_onchange_events_enable(FALSE);
     CxMapIterator mi = cxMapIterator(ctx->vars);
     cx_foreach(CxMapEntry*, entry, mi) {
+        printf("detach %.*s\n", (int)entry->key->len, (char*)entry->key->data);
         UiVar *var = entry->value;
         // var->from && var->from_ctx && var->from_ctx != ctx
         uic_save_var(var);
@@ -134,6 +136,7 @@
             cxMapPut(var->from->from_ctx->vars, *entry->key, var->from);
             var->from = NULL;
         }
+        uic_unbind_var(var);
     }
     
     if(ctx->documents) {
@@ -143,6 +146,8 @@
             uic_context_unbind_vars(subctx);
         }
     }
+    
+    ui_onchange_events_enable(TRUE);
 }
 
 void uic_context_detach_document(UiContext *ctx, void *document) {
@@ -215,7 +220,7 @@
     var->from_ctx = ctx;
     var->bound = FALSE;
     
-    cxMempoolSetDestructor(var, (cx_destructor_func)uic_unbind_var);
+    cxMempoolSetDestructor(var, (cx_destructor_func)uic_unbind_var); // TODO: use another destructor that cleans the value (UiString free, UiText destroy, ...)
 
     cxMapPut(ctx->vars, name, var);
     
@@ -336,7 +341,7 @@
         }
     }
     
-    uic_copy_value_binding(from->type, from->value, to->value);
+    uic_copy_value_binding(from->type, fromvalue, tovalue);
 }
 
 void uic_copy_value_binding(UiVarType type, void *from, void *to) {

mercurial