ui/gtk/container.c

changeset 865
9cf0c29dde27
parent 824
a0ea8f3aa6e8
child 941
e7459e9fbed2
--- a/ui/gtk/container.c	Sun Oct 19 12:08:32 2025 +0200
+++ b/ui/gtk/container.c	Sun Oct 19 21:04:49 2025 +0200
@@ -1111,18 +1111,18 @@
                 strdup(args->position_property));
     }
     
-    UiContainerX *container = ui_splitpane_container(obj, pane0, orientation, max, args->initial_position);
+    UiSplitPane *splitpane = ui_create_splitpane_data(pane0, orientation, max, args->initial_position);
+    UiContainerX *container = ui_splitpane_container(obj, pane0, splitpane);
     uic_object_push_container(obj, container);
     
-    g_object_set_data(G_OBJECT(pane0), "ui_splitpane", container);
+    g_object_set_data(G_OBJECT(pane0), "ui_splitpane", splitpane);
     
     UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
     if(var) {
-        UiSplitPaneContainer *s = (UiSplitPaneContainer*)container;
         UiInteger *i = var->value;
-        s->initial_position = i->value;
+        splitpane->initial_position = i->value;
         
-        i->obj = s;
+        i->obj = splitpane;
         i->get = ui_splitpane_get;
         i->set = ui_splitpane_set;
     }
@@ -1138,20 +1138,27 @@
     return splitpane_create(obj, UI_VERTICAL, args);
 }
 
-UiContainerX* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiOrientation orientation, int max, int init) {
-    UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer));
-    ct->container.widget = pane;
-    ct->container.add = ui_splitpane_container_add;
+UiSplitPane* ui_create_splitpane_data(GtkWidget *pane, UiOrientation orientation, int max, int init) {
+    UiSplitPane *ct = malloc(sizeof(UiSplitPane));
     ct->current_pane = pane;
     ct->orientation = orientation;
     ct->max = max;
     ct->initial_position = init;
     ct->children = cxArrayListCreateSimple(CX_STORE_POINTERS, 4);
+    return ct;
+}
+
+UiContainerX* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiSplitPane *data) {
+    UiSplitPaneContainer *ct = ui_calloc(obj->ctx, 1, sizeof(UiSplitPaneContainer));
+    ct->container.widget = pane;
+    ct->container.add = ui_splitpane_container_add;
+    ct->splitpane = data;
     return (UiContainerX*)ct;
 }
 
 void ui_splitpane_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout) {
-    UiSplitPaneContainer *s = (UiSplitPaneContainer*)ct;
+    UiSplitPaneContainer *sct = (UiSplitPaneContainer*)ct;
+    UiSplitPane *s = sct->splitpane;
     
     if(s->nchildren >= s->max) {
         fprintf(stderr, "splitpane: maximum number of children reached\n");
@@ -1183,25 +1190,25 @@
 }
 
 int64_t ui_splitpane_get(UiInteger *i) {
-    UiSplitPaneContainer *s = i->obj;
-    i->value = gtk_paned_get_position(GTK_PANED(s->container.widget));
+    UiSplitPane *s = i->obj;
+    i->value = gtk_paned_get_position(GTK_PANED(s->current_pane));
     return i->value;
 }
 
 void ui_splitpane_set(UiInteger *i, int64_t value) {
-    UiSplitPaneContainer *s = i->obj;
+    UiSplitPane *s = i->obj;
     i->value = value;
-    gtk_paned_set_position(GTK_PANED(s->container.widget), (int)value);
+    gtk_paned_set_position(GTK_PANED(s->current_pane), (int)value);
 }
 
 UIEXPORT void ui_splitpane_set_visible(UIWIDGET splitpane, int child_index, UiBool visible) {
-    UiSplitPaneContainer *ct = g_object_get_data(G_OBJECT(splitpane), "ui_splitpane");
-    if(!ct) {
+    UiSplitPane *s = g_object_get_data(G_OBJECT(splitpane), "ui_splitpane");
+    if(!s) {
         fprintf(stderr, "UI Error: not a splitpane\n");
         return;
     }
     
-    GtkWidget *w = cxListAt(ct->children, child_index);
+    GtkWidget *w = cxListAt(s->children, child_index);
     if(w) {
         gtk_widget_set_visible(w, visible);
     }

mercurial