add UiEvent set for indicating, if the event was triggered by ui_set

7 days ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 13 Mar 2025 18:40:17 +0100 (7 days ago)
changeset 497
bf53d553e3dc
parent 496
190033250b21
child 498
3688266cab3c

add UiEvent set for indicating, if the event was triggered by ui_set

ui/common/types.c file | annotate | diff | comparison | revisions
ui/gtk/button.c file | annotate | diff | comparison | revisions
ui/ui/toolkit.h file | annotate | diff | comparison | revisions
--- a/ui/common/types.c	Thu Mar 13 18:10:56 2025 +0100
+++ b/ui/common/types.c	Thu Mar 13 18:40:17 2025 +0100
@@ -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);
--- a/ui/gtk/button.c	Thu Mar 13 18:10:56 2025 +0100
+++ b/ui/gtk/button.c	Thu Mar 13 18:40:17 2025 +0100
@@ -114,6 +114,7 @@
     e.document = event->obj->ctx->document;
     e.eventdata = NULL;
     e.intval = event->value;
+    e.set = ui_get_setop();
     event->callback(&e, event->userdata);
 }
 
@@ -136,7 +137,8 @@
     e.window = event->obj->window;
     e.document = event->obj->ctx->document;
     e.eventdata = event->var->value;
-    e.intval = i->get(i);  
+    e.intval = i->get(i);
+    e.set = ui_get_setop();
     
     ui_notify_evt(i->observers, &e);
 }
@@ -148,6 +150,7 @@
     e.document = event->obj->ctx->document;
     e.eventdata = NULL;
     e.intval = gtk_toggle_button_get_active(widget);
+    e.set = ui_get_setop();
     event->callback(&e, event->userdata);    
 }
 
@@ -318,6 +321,7 @@
     e.document = event->obj->ctx->document;
     e.eventdata = NULL;
     e.intval = gtk_check_button_get_active(widget);
+    e.set = ui_get_setop();
     event->callback(&e, event->userdata);    
 }
 
@@ -388,6 +392,7 @@
     e.document = event->obj->ctx->document;
     e.eventdata = NULL;
     e.intval = RADIOBUTTON_GET_ACTIVE(widget);
+    e.set = ui_get_setop();
     event->callback(&e, event->userdata);    
 }
 
--- a/ui/ui/toolkit.h	Thu Mar 13 18:10:56 2025 +0100
+++ b/ui/ui/toolkit.h	Thu Mar 13 18:40:17 2025 +0100
@@ -288,6 +288,7 @@
     void     *window;
     void     *eventdata;
     int      intval;
+    int      set;
 };
 
 struct UiMouseEvent {
@@ -594,6 +595,9 @@
 UIEXPORT void ui_condvar_signal(UiCondVar *var, void *data, int intdata);
 UIEXPORT void ui_condvar_destroy(UiCondVar *var);
 
+UIEXPORT void ui_setop_enable(int set);
+UIEXPORT void ui_get_setop(void);
+
 #ifdef	__cplusplus
 }
 #endif

mercurial