--- a/ui/gtk/container.c Sun Oct 05 19:06:34 2025 +0200 +++ b/ui/gtk/container.c Mon Oct 06 11:11:30 2025 +0200 @@ -398,6 +398,30 @@ return widget; } +static void frame_create_subcontainer(UiObject *obj, UiFrameArgs *args) { + switch(args->subcontainer) { + default: + case UI_CONTAINER_VBOX: { + UiContainerArgs sub_args = { .spacing = args->spacing, .margin = args->padding }; + ui_vbox_create(obj, &sub_args); + break; + } + case UI_CONTAINER_HBOX: { + UiContainerArgs sub_args = { .spacing = args->spacing, .margin = args->padding }; + ui_hbox_create(obj, &sub_args); + break; + } + case UI_CONTAINER_GRID: { + UiContainerArgs sub_args = { .columnspacing = args->columnspacing, .rowspacing = args->rowspacing, .margin = args->padding }; + ui_grid_create(obj, &sub_args); + break; + } + case UI_CONTAINER_NO_SUB: { + break; // NOOP + } + } +} + UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) { UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; UiLayout layout = UI_ARGS2LAYOUT(args); @@ -405,8 +429,18 @@ GtkWidget *frame = gtk_frame_new(args->label); ct->add(ct, frame, &layout); - UiContainerX *container = ui_frame_container(obj, frame); - uic_object_push_container(obj, container); + GtkWidget *sub = ui_subcontainer_create( + args->subcontainer, + obj, args->spacing, + args->columnspacing, + args->rowspacing, + args->padding); + if(sub) { + FRAME_SET_CHILD(frame, sub); + } else { + UiContainerX *container = ui_frame_container(obj, frame); + uic_object_push_container(obj, container); + } return frame; } @@ -419,8 +453,18 @@ gtk_expander_set_expanded(GTK_EXPANDER(expander), args->isexpanded); ct->add(ct, expander, &layout); - UiContainerX *container = ui_expander_container(obj, expander); - uic_object_push_container(obj, container); + GtkWidget *sub = ui_subcontainer_create( + args->subcontainer, + obj, args->spacing, + args->columnspacing, + args->rowspacing, + args->padding); + if(sub) { + EXPANDER_SET_CHILD(expander, sub); + } else { + UiContainerX *container = ui_expander_container(obj, expander); + uic_object_push_container(obj, container); + } return expander; } @@ -434,8 +478,18 @@ ui_set_name_and_style(sw, args->name, args->style_class); ct->add(ct, sw, &layout); - UiContainerX *container = ui_scrolledwindow_container(obj, sw); - uic_object_push_container(obj, container); + GtkWidget *sub = ui_subcontainer_create( + args->subcontainer, + obj, args->spacing, + args->columnspacing, + args->rowspacing, + args->padding); + if(sub) { + SCROLLEDWINDOW_SET_CHILD(sw, sub); + } else { + UiContainerX *container = ui_scrolledwindow_container(obj, sw); + uic_object_push_container(obj, container); + } return sw; }