--- 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); }