add visibility_states arg to labels, buttons, text widgets (GTK)

Thu, 29 Jan 2026 18:56:36 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 29 Jan 2026 18:56:36 +0100
changeset 1063
e0251f6e15f7
parent 1062
988665ad8dd5
child 1064
f415387fff6f

add visibility_states arg to labels, buttons, text widgets (GTK)

ui/common/context.c file | annotate | diff | comparison | revisions
ui/common/context.h file | annotate | diff | comparison | revisions
ui/gtk/button.c file | annotate | diff | comparison | revisions
ui/gtk/container.c file | annotate | diff | comparison | revisions
ui/gtk/display.c file | annotate | diff | comparison | revisions
ui/gtk/text.c file | annotate | diff | comparison | revisions
ui/ui/button.h file | annotate | diff | comparison | revisions
ui/ui/display.h file | annotate | diff | comparison | revisions
ui/ui/text.h file | annotate | diff | comparison | revisions
--- a/ui/common/context.c	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/common/context.c	Thu Jan 29 18:56:36 2026 +0100
@@ -621,6 +621,13 @@
     ui_widget_set_states2(ctx, widget, (ui_enablefunc)ui_set_visible, states, nstates);
 }
 
+void uic_widget_set_visibility_states(UiContext *ctx, UIWIDGET widget, const int *states) {
+    if(states) {
+        size_t nstates = uic_state_array_size(states);
+        ui_widget_set_visibility_states(ctx, widget, states, (int)nstates);
+    }
+}
+
 size_t uic_state_array_size(const int *states) {
     int i;
     for(i=0;states[i] >= 0;i++) { }
--- a/ui/common/context.h	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/common/context.h	Thu Jan 29 18:56:36 2026 +0100
@@ -150,6 +150,7 @@
 
 void uic_reg_var(UiContext *ctx, const char *name, UiVarType type, void *value);
 
+void uic_widget_set_visibility_states(UiContext *ctx, UIWIDGET widget, const int *states);
 size_t uic_state_array_size(const int *states);
 void uic_check_state_widgets(UiContext *ctx);
 void uic_add_state_widget(UiContext *ctx, void *widget, ui_enablefunc enable, CxList *states);
--- a/ui/gtk/button.c	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/gtk/button.c	Thu Jan 29 18:56:36 2026 +0100
@@ -110,6 +110,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     return button;
 }
 
@@ -317,6 +318,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
@@ -380,6 +382,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
@@ -469,6 +472,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
@@ -621,6 +625,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, rbutton, &layout);
+    uic_widget_set_visibility_states(obj->ctx, rbutton, args->visibility_states);
     
     return rbutton;
 }
@@ -913,6 +918,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, button, &layout);
+    uic_widget_set_visibility_states(obj->ctx, button, args->visibility_states);
     
     return button;
 }
--- a/ui/gtk/container.c	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/gtk/container.c	Thu Jan 29 18:56:36 2026 +0100
@@ -393,10 +393,7 @@
     UiContainerX *container = ui_box_container(obj, box, type);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, box, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, box, args->visibility_states);
     
     return box;
 }
@@ -434,10 +431,7 @@
     UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, grid, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, grid, args->visibility_states);
     
     return grid;
 }
@@ -486,10 +480,7 @@
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, frame, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, frame, args->visibility_states);
     
     return frame;
 }
@@ -515,10 +506,7 @@
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, expander, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, expander, args->visibility_states);
     
     return expander;
 }
@@ -545,10 +533,7 @@
         uic_object_push_container(obj, container);
     }
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, sw, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, sw, args->visibility_states);
     
     return sw;
 }
@@ -839,10 +824,7 @@
     UiContainerX *container = ui_tabview_container(obj, widget);
     uic_object_push_container(obj, container);
     
-    if(args->visibility_states) {
-        size_t nstates = uic_state_array_size(args->visibility_states);
-        ui_widget_set_visibility_states(obj->ctx, widget, args->visibility_states, (int)nstates);
-    }
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
     
     return widget;
 }
--- a/ui/gtk/display.c	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/gtk/display.c	Thu Jan 29 18:56:36 2026 +0100
@@ -115,6 +115,8 @@
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, widget, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, widget, args->visibility_states);
+    
     return widget;
 }
 
@@ -205,6 +207,8 @@
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, progressbar, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, progressbar, args->visibility_states);
+    
     return progressbar;
 }
 
@@ -246,6 +250,8 @@
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, spinner, &layout);
     
+    uic_widget_set_visibility_states(obj->ctx, spinner, args->visibility_states);
+    
     return spinner;
 }
 
--- a/ui/gtk/text.c	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/gtk/text.c	Thu Jan 29 18:56:36 2026 +0100
@@ -160,6 +160,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, scroll_area, &layout);
+    uic_widget_set_visibility_states(obj->ctx, scroll_area, args->visibility_states);
     
     // bind value
     if(var) {
@@ -639,6 +640,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, textfield, &layout);
+    uic_widget_set_visibility_states(obj->ctx, textfield, args->visibility_states);
     
     if(var) {
         UiString *value = var->value;
@@ -999,6 +1001,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, pathtf->stack, &layout);
+    uic_widget_set_visibility_states(obj->ctx, pathtf->stack, args->visibility_states);
     
     pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     pathtf->entry = gtk_entry_new();
@@ -1174,6 +1177,7 @@
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, eventbox, &layout);
+    uic_widget_set_visibility_states(obj->ctx, eventbox, args->visibility_states);
     
     // hbox as parent for the GtkEntry and GtkButtonBox
     GtkWidget *hbox = ui_gtk_hbox_new(0);
--- a/ui/ui/button.h	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/ui/button.h	Thu Jan 29 18:56:36 2026 +0100
@@ -66,6 +66,7 @@
     void *onclickdata;
     
     const int *states;
+    const int *visibility_states;
 } UiButtonArgs;
 
 typedef struct UiToggleArgs {
@@ -96,6 +97,7 @@
     int enable_state;
     
     const int *states;
+    const int *visibility_states;
 } UiToggleArgs;
 
 typedef struct UiLinkButtonArgs {
@@ -125,6 +127,7 @@
     UiLinkType type;
     
     const int *states;
+    const int *visibility_states;
 } UiLinkButtonArgs;
  
 #define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } )
--- a/ui/ui/display.h	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/ui/display.h	Thu Jan 29 18:56:36 2026 +0100
@@ -71,6 +71,8 @@
     UiLabelStyle style;
     UiString* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiLabelArgs;
 
 typedef struct UiProgressbarArgs {
@@ -95,6 +97,8 @@
     double max;
     UiDouble* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiProgressbarArgs;
 
 typedef struct UiProgressbarSpinnerArgs {
@@ -116,6 +120,8 @@
 
     UiInteger* value;
     const char* varname;
+    
+    const int *visibility_states;
 } UiProgressbarSpinnerArgs;
 
 /* label widgets */
--- a/ui/ui/text.h	Tue Jan 27 20:15:48 2026 +0100
+++ b/ui/ui/text.h	Thu Jan 29 18:56:36 2026 +0100
@@ -60,6 +60,7 @@
     void *onchangedata;
     
     const int *states;
+    const int *visibility_states;
 } UiTextAreaArgs;
     
 typedef struct UiTextFieldArgs {
@@ -88,6 +89,7 @@
     void *onactivatedata;
     
     const int *states;
+    const int *visibility_states;
 } UiTextFieldArgs;
 
 typedef struct UiPathElmRet {
@@ -134,6 +136,8 @@
     void *ondragcompletedata;
     ui_callback ondrop;
     void *ondropsdata;
+    
+    const int *visibility_states;
 } UiPathTextFieldArgs;
 
 #define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ })

mercurial