ui/common/types.c

changeset 103
6606616eca9f
parent 102
64ded9f6a6c6
child 108
77254bd6dccb
--- a/ui/common/types.c	Tue Feb 25 21:11:00 2025 +0100
+++ b/ui/common/types.c	Sat Apr 05 16:46:11 2025 +0200
@@ -162,7 +162,7 @@
 
 UIEXPORT void ui_list_update(UiList *list) {
     if(list->update) {
-        list->update(list, 0);
+        list->update(list, -1);
     }
 }
 
@@ -306,7 +306,9 @@
 void ui_int_set(UiInteger* i, int64_t value) {
     if (i) {
         if (i->set) {
+            ui_setop_enable(TRUE);
             i->set(i, value);
+            ui_setop_enable(FALSE);
         } else {
             i->value = value;
         }
@@ -324,7 +326,9 @@
 void ui_double_set(UiDouble* d, double value) {
     if (d) {
         if (d->set) {
+            ui_setop_enable(TRUE);
             d->set(d, value);
+            ui_setop_enable(FALSE);
         } else {
             d->value = value;
         }
@@ -343,7 +347,9 @@
 void ui_string_set(UiString* s, const char* value) {
     if (s) {
         if (s->set) {
+            ui_setop_enable(TRUE);
             s->set(s, value);
+            ui_setop_enable(FALSE);
         } else {
             if(s->value.free) {
                 s->value.free(s->value.ptr);
@@ -371,7 +377,9 @@
 void ui_text_set(UiText* s, const char* value) {
     if (s) {
         if (s->set) {
+            ui_setop_enable(TRUE);
             s->set(s, value);
+            ui_setop_enable(FALSE);
         } else {
             if(s->value.free) {
                 s->value.free(s->value.ptr);
@@ -426,9 +434,12 @@
     to->selection = from->selection;
     to->length = from->length;
     to->remove = from->remove;
+    to->restore = from->restore;
+    to->save = from->save;
+    to->destroy = from->destroy;
     
     to->obj = from->obj;
-    // do not copy the undo manager
+    // do not copy the undo manager, data1, data2
 }
 
 void uic_range_copy(UiRange *from, UiRange *to) {
@@ -468,7 +479,7 @@
 
 void uic_text_save(UiText *t) {
     if(!t->obj) return;
-    t->get(t);
+    t->save(t);
     t->position(t);
 }
 
@@ -512,7 +523,6 @@
     t->length = NULL;
     t->remove = NULL;
     t->obj = NULL;
-    t->undomgr = NULL;
 }
 
 void uic_range_unbind(UiRange *r) {
@@ -614,3 +624,13 @@
     destr->observer = observer;
     cxMempoolSetDestructor(destr, (cx_destructor_func)observer_destructor);
 }
+
+static int ui_set_op = 0;
+
+void ui_setop_enable(int set) {
+    ui_set_op = set;
+}
+
+int ui_get_setop(void) {
+    return ui_set_op;
+}

mercurial