# HG changeset patch # User Olaf Wintermann # Date 1765992680 -3600 # Node ID b459361d98ad91ed57817dda7effdfab73c86ef3 # Parent 83c83a7aa55208b448c69be2e98c1505a01fe20a implement enable_state for the switch widget (GTK) diff -r 83c83a7aa552 -r b459361d98ad ui/gtk/button.c --- a/ui/gtk/button.c Tue Dec 16 18:09:15 2025 +0100 +++ b/ui/gtk/button.c Wed Dec 17 18:31:20 2025 +0100 @@ -241,6 +241,8 @@ event->observers = NULL; event->callback = NULL; event->userdata = NULL; + event->customint1 = 0; + event->customint2 = 0; g_signal_connect( widget, @@ -397,7 +399,7 @@ UiVarEventData *event) { GtkSwitch *sw = GTK_SWITCH (gobject); - gboolean active = gtk_switch_get_active (sw); + gboolean active = gtk_switch_get_active(sw); UiEvent e; e.obj = event->obj; @@ -405,6 +407,7 @@ e.window = e.obj->window; e.eventdata = NULL; e.eventdatatype = 0; + e.intval = active; e.set = ui_get_setop(); if(event->callback) { @@ -414,6 +417,13 @@ UiInteger *i = event->var->value; ui_notify_evt(i->observers, &e); } + if(event->customint1 > 0) { + if(active) { + ui_set_state(e.obj->ctx, event->customint1); + } else { + ui_unset_state(e.obj->ctx, event->customint1); + } + } } UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) { @@ -436,11 +446,13 @@ } UiVarEventData *event = malloc(sizeof(UiVarEventData)); + memset(event, 0, sizeof(UiVarEventData)); event->obj = obj; event->callback = args->onchange; event->userdata = args->onchangedata; event->var = var; event->observers = NULL; + event->customint1 = args->enable_state; g_signal_connect( widget, @@ -453,7 +465,7 @@ "destroy", G_CALLBACK(ui_destroy_vardata), event); - + UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; UiLayout layout = UI_ARGS2LAYOUT(args); ct->add(ct, widget, &layout); @@ -565,6 +577,8 @@ event->observers = NULL; event->callback = NULL; event->userdata = NULL; + event->customint1 = 0; + event->customint2 = 0; UiRadioButtonData *rbdata = malloc(sizeof(UiRadioButtonData)); rbdata->value = rgroup; diff -r 83c83a7aa552 -r b459361d98ad ui/gtk/entry.c --- a/ui/gtk/entry.c Tue Dec 16 18:09:15 2025 +0100 +++ b/ui/gtk/entry.c Wed Dec 17 18:31:20 2025 +0100 @@ -125,6 +125,7 @@ } UiVarEventData *event = malloc(sizeof(UiVarEventData)); + memset(event, 0, sizeof(UiVarEventData)); event->obj = obj; event->var = var; event->observers = obs; diff -r 83c83a7aa552 -r b459361d98ad ui/gtk/toolbar.c --- a/ui/gtk/toolbar.c Tue Dec 16 18:09:15 2025 +0100 +++ b/ui/gtk/toolbar.c Wed Dec 17 18:31:20 2025 +0100 @@ -197,7 +197,7 @@ } } - UiVarEventData *event = cxMalloc( + UiVarEventData *event = cxZalloc( obj->ctx->allocator, sizeof(UiVarEventData)); event->obj = obj; diff -r 83c83a7aa552 -r b459361d98ad ui/gtk/toolkit.h --- a/ui/gtk/toolkit.h Tue Dec 16 18:09:15 2025 +0100 +++ b/ui/gtk/toolkit.h Wed Dec 17 18:31:20 2025 +0100 @@ -159,6 +159,8 @@ UiObserver **observers; ui_callback callback; void *userdata; + int customint1; + int customint2; } UiVarEventData; typedef enum UiOrientation UiOrientation;