ui/gtk/container.c

changeset 803
f0c4322741c8
parent 802
cc73993a3ff9
child 804
ce992dbfbc39
--- 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;
 }

mercurial