--- a/ui/gtk/container.h Sat Oct 04 14:54:25 2025 +0200 +++ b/ui/gtk/container.h Sun Oct 19 21:20:08 2025 +0200 @@ -45,45 +45,30 @@ #define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout)) -typedef void (*ui_container_add_f)(UiContainer*, GtkWidget*); typedef struct UiDocumentView UiDocumentView; - -typedef struct UiLayout UiLayout; -struct UiLayout { - UiBool fill; - UiBool newline; - char *label; - UiBool hexpand; - UiBool vexpand; - UiBool hfill; - UiBool vfill; - UiBool override_defaults; - int width; - int colspan; - int rowspan; -}; - -struct UiContainer { +typedef struct UiContainerPrivate UiContainerPrivate; +struct UiContainerPrivate { + UiContainerX container; GtkWidget *widget; UIMENU menu; - GtkWidget *current; + GtkWidget *current; // TODO: remove - void (*add)(UiContainer*, GtkWidget*); + void (*add)(UiContainerPrivate*, GtkWidget*, UiLayout *layout); UiLayout layout; int close; }; typedef struct UiBoxContainer { - UiContainer container; + UiContainerPrivate container; UiSubContainerType type; UiBool has_fill; } UiBoxContainer; typedef struct UiGridContainer { - UiContainer container; + UiContainerPrivate container; UiBool def_hexpand; UiBool def_vexpand; UiBool def_hfill; @@ -97,7 +82,7 @@ } UiGridContainer; typedef struct UiTabViewContainer { - UiContainer container; + UiContainerPrivate container; } UiTabViewContainer; typedef void (*ui_select_tab_func)(UIWIDGET widget, int tab); @@ -110,7 +95,7 @@ ui_select_tab_func remove_tab; ui_add_tab_func add_tab; UiSubContainerType subcontainer; - int margin; + int padding; int spacing; int columnspacing; int rowspacing; @@ -118,9 +103,7 @@ void *onchangedata; } UiGtkTabView; - -typedef struct UiSplitPaneContainer { - UiContainer container; +typedef struct UiSplitPane { GtkWidget *current_pane; CxList *children; UiOrientation orientation; @@ -128,10 +111,15 @@ int max; int nchildren; int initial_position; +} UiSplitPane; + +typedef struct UiSplitPaneContainer { + UiContainerPrivate container; + UiSplitPane *splitpane; } UiSplitPaneContainer; typedef struct UiHeaderbarContainer { - UiContainer container; + UiContainerPrivate container; GtkWidget *centerbox; int part; UiHeaderbarAlternative alternative; /* only used by fallback headerbar */ @@ -140,7 +128,7 @@ typedef struct UiGtkItemListContainer { UiObject *parent; GtkWidget *widget; - UiContainer *container; + UiContainerPrivate *container; void (*create_ui)(UiObject *, int, void *, void *); void *userdata; UiSubContainerType subcontainer; @@ -163,39 +151,37 @@ int rowspacing, int margin); -UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); -void ui_frame_container_add(UiContainer *ct, GtkWidget *widget); - -GtkWidget* ui_box_set_margin(GtkWidget *box, int margin); +GtkWidget* ui_gtk_set_margin(GtkWidget *widget, int margin, int margin_left, int margin_right, int margin_top, int margin_bottom); UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType type); -UiContainer* ui_box_container(UiObject *obj, GtkWidget *box, UiSubContainerType type); -void ui_box_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_box_container(UiObject *obj, GtkWidget *box, UiSubContainerType type); +void ui_box_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); GtkWidget* ui_create_grid_widget(int colspacing, int rowspacing); -UiContainer* ui_grid_container( +UiContainerX* ui_grid_container( UiObject *obj, GtkWidget *grid, UiBool def_hexpand, UiBool def_vexpand, UiBool def_hfill, UiBool def_vfill); -void ui_grid_container_add(UiContainer *ct, GtkWidget *widget); +void ui_grid_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); -UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); -void ui_frame_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_frame_container(UiObject *obj, GtkWidget *frame); +void ui_frame_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); -UiContainer* ui_expander_container(UiObject *obj, GtkWidget *expander); -void ui_expander_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_expander_container(UiObject *obj, GtkWidget *expander); +void ui_expander_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); -UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow); -void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow); +void ui_scrolledwindow_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); -UiContainer* ui_tabview_container(UiObject *obj, GtkWidget *tabview); -void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_tabview_container(UiObject *obj, GtkWidget *tabview); +void ui_tabview_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); -UiContainer* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiOrientation orientation, int max, int init); -void ui_splitpane_container_add(UiContainer *ct, GtkWidget *widget); +UiSplitPane* ui_create_splitpane_data(GtkWidget *pane, UiOrientation orientation, int max, int init); +UiContainerX* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiSplitPane *data); +void ui_splitpane_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); int64_t ui_splitpane_get(UiInteger *i); void ui_splitpane_set(UiInteger *i, int64_t value); @@ -205,12 +191,12 @@ void ui_gtk_notebook_select_tab(GtkWidget *widget, int tab); #if GTK_CHECK_VERSION(3, 10, 0) -UiContainer* ui_headerbar_container(UiObject *obj, GtkWidget *headerbar); -void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_headerbar_container(UiObject *obj, GtkWidget *headerbar); +void ui_headerbar_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); #endif -UiContainer* ui_headerbar_fallback_container(UiObject *obj, GtkWidget *headerbar); -void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget); +UiContainerX* ui_headerbar_fallback_container(UiObject *obj, GtkWidget *headerbar); +void ui_headerbar_fallback_container_add(UiContainerPrivate *ct, GtkWidget *widget, UiLayout *layout); #ifdef __cplusplus }