implement enable_state for the switch widget (GTK) default tip

Wed, 17 Dec 2025 18:31:20 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 17 Dec 2025 18:31:20 +0100
changeset 1015
b459361d98ad
parent 1014
83c83a7aa552

implement enable_state for the switch widget (GTK)

ui/gtk/button.c file | annotate | diff | comparison | revisions
ui/gtk/entry.c file | annotate | diff | comparison | revisions
ui/gtk/toolbar.c file | annotate | diff | comparison | revisions
ui/gtk/toolkit.h file | annotate | diff | comparison | revisions
--- 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;
--- 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;
--- 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;
--- 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;

mercurial