7 days ago
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