ui/gtk/container.c

changeset 594
fc854e0ab924
parent 552
131059d41671
child 604
0afad58e3078
--- a/ui/gtk/container.c	Thu May 15 12:55:54 2025 +0200
+++ b/ui/gtk/container.c	Thu May 29 12:03:32 2025 +0200
@@ -420,14 +420,14 @@
     return ret;
 }
 
-UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type) {
+UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType type) {
     UiObject *current = uic_current_obj(obj);
     UiContainer *ct = current->container;
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
-    GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args.spacing) : ui_gtk_hbox_new(args.spacing);
-    ui_set_name_and_style(box, args.name, args.style_class);
-    GtkWidget *widget = args.margin > 0 ? ui_box_set_margin(box, args.margin) : box;
+    GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing);
+    ui_set_name_and_style(box, args->name, args->style_class);
+    GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box;
     ct->add(ct, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, box);
@@ -437,11 +437,11 @@
     return widget;
 }
 
-UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
     return ui_box_create(obj, args, UI_CONTAINER_VBOX);
 }
 
-UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
     return ui_box_create(obj, args, UI_CONTAINER_HBOX);
 }
 
@@ -458,30 +458,30 @@
     return grid;
 }
 
-UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
     UiObject* current = uic_current_obj(obj);
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     GtkWidget *widget;
     
-    GtkWidget *grid = ui_create_grid_widget(args.columnspacing, args.rowspacing);
-    ui_set_name_and_style(grid, args.name, args.style_class);
-    widget = ui_box_set_margin(grid, args.margin);
+    GtkWidget *grid = ui_create_grid_widget(args->columnspacing, args->rowspacing);
+    ui_set_name_and_style(grid, args->name, args->style_class);
+    widget = ui_box_set_margin(grid, args->margin);
     current->container->add(current->container, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, grid);
-    newobj->container = ui_grid_container(obj, grid, args.def_hexpand, args.def_vexpand, args.def_hfill, args.def_vfill);
+    newobj->container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
     uic_obj_add(obj, newobj);
     
     return widget;
 }
 
-UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args) {
+UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) {
     UiObject* current = uic_current_obj(obj);
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
-    GtkWidget *frame = gtk_frame_new(args.label);
+    GtkWidget *frame = gtk_frame_new(args->label);
     UiObject *newobj = uic_object_new(obj, frame);
-    GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+    GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
     if(sub) {
         FRAME_SET_CHILD(frame, sub);
     } else {
@@ -494,14 +494,14 @@
     return frame;
 }
 
-UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args) {
+UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args) {
     UiObject* current = uic_current_obj(obj);
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
-    GtkWidget *expander = gtk_expander_new(args.label);
-    gtk_expander_set_expanded(GTK_EXPANDER(expander), args.isexpanded);
+    GtkWidget *expander = gtk_expander_new(args->label);
+    gtk_expander_set_expanded(GTK_EXPANDER(expander), args->isexpanded);
     UiObject *newobj = uic_object_new(obj, expander);
-    GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+    GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
     if(sub) {
         EXPANDER_SET_CHILD(expander, sub);
     } else {
@@ -515,17 +515,17 @@
 }
 
 
-UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) {
+UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) {
     UiObject* current = uic_current_obj(obj);
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
     GtkWidget *sw = SCROLLEDWINDOW_NEW();
-    ui_set_name_and_style(sw, args.name, args.style_class);
-    GtkWidget *widget = ui_box_set_margin(sw, args.margin);
+    ui_set_name_and_style(sw, args->name, args->style_class);
+    GtkWidget *widget = ui_box_set_margin(sw, args->margin);
     current->container->add(current->container, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, sw);
-    GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+    GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
     if(sub) {
         SCROLLEDWINDOW_SET_CHILD(sw, sub);
     } else {
@@ -692,19 +692,19 @@
 typedef int64_t(*ui_tabview_get_func)(UiInteger*);
 typedef void (*ui_tabview_set_func)(UiInteger*, int64_t);
 
-UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
+UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) {
     UiGtkTabView *data = malloc(sizeof(UiGtkTabView));
-    data->margin = args.margin;
-    data->spacing = args.spacing;
-    data->columnspacing = args.columnspacing;
-    data->rowspacing = args.rowspacing;
+    data->margin = args->margin;
+    data->spacing = args->spacing;
+    data->columnspacing = args->columnspacing;
+    data->rowspacing = args->rowspacing;
     
     ui_tabview_get_func getfunc = NULL;
     ui_tabview_set_func setfunc = NULL;
     
     GtkWidget *widget = NULL;
     GtkWidget *data_widget = NULL;
-    switch(args.tabview) {
+    switch(args->tabview) {
         case UI_TABVIEW_DOC: {
             // TODO
             break;
@@ -740,7 +740,7 @@
             data->add_tab = ui_notebook_tab_add;
             getfunc = ui_notebook_get;
             setfunc = ui_notebook_set;
-            if(args.tabview == UI_TABVIEW_INVISIBLE) {
+            if(args->tabview == UI_TABVIEW_INVISIBLE) {
                 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE);
                 gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE);
             }
@@ -749,8 +749,8 @@
     }
     
     UiObject* current = uic_current_obj(obj);
-    if(args.value || args.varname) {
-        UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER);
+    if(args->value || args->varname) {
+        UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER);
         UiInteger *i = var->value;
         i->get = getfunc;
         i->set = setfunc;
@@ -759,9 +759,9 @@
     
     g_object_set_data(G_OBJECT(widget), "ui_tabview", data);
     data->widget = data_widget;
-    data->subcontainer = args.subcontainer;
+    data->subcontainer = args->subcontainer;
     
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     current->container->add(current->container, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, widget);
@@ -872,13 +872,13 @@
     hb_set_part(obj, 1);
 }
 
-UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs *args) {
     UiObject *current = uic_current_obj(obj);
     UiContainer *ct = current->container;
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
-    GtkWidget *box = ui_gtk_hbox_new(args.alt_spacing);
-    ui_set_name_and_style(box, args.name, args.style_class);
+    GtkWidget *box = ui_gtk_hbox_new(args->alt_spacing);
+    ui_set_name_and_style(box, args->name, args->style_class);
     ct->add(ct, box, FALSE);
     
     UiObject *newobj = uic_object_new(obj, box);
@@ -917,7 +917,7 @@
 
 #if GTK_CHECK_VERSION(3, 10, 0)
 
-UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
     GtkWidget *headerbar = g_object_get_data(G_OBJECT(obj->widget), "ui_headerbar");
     if(!headerbar) {
         return ui_headerbar_fallback_create(obj, args);
@@ -958,7 +958,7 @@
 
 #else
 
-UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
     return ui_headerbar_fallback_create(obj, args);  
 }
 
@@ -967,15 +967,15 @@
 /* -------------------- Sidebar -------------------- */
 
 #ifdef UI_LIBADWAITA
-UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) {
+UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
     GtkWidget *sidebar_toolbar_view = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar");
     if(!sidebar_toolbar_view) {
         fprintf(stderr, "Error: window is not configured for sidebar\n");
         return NULL;
     }
     
-    GtkWidget *box = ui_gtk_vbox_new(args.spacing);
-    ui_box_set_margin(box, args.margin);
+    GtkWidget *box = ui_gtk_vbox_new(args->spacing);
+    ui_box_set_margin(box, args->margin);
     adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), box);
     
     UiObject *newobj = uic_object_new(obj, box);
@@ -985,11 +985,11 @@
     return box;
 }
 #else
-UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) {
+UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
     GtkWidget *sidebar_vbox = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar");
     
-    GtkWidget *box = ui_gtk_vbox_new(args.spacing);
-    ui_box_set_margin(box, args.margin);
+    GtkWidget *box = ui_gtk_vbox_new(args->spacing);
+    ui_box_set_margin(box, args->margin);
     BOX_ADD_EXPAND(sidebar_vbox, box);
     
     UiObject *newobj = uic_object_new(obj, box);
@@ -1019,18 +1019,18 @@
 
 
 
-static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs args) {
+static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs *args) {
     UiObject* current = uic_current_obj(obj);
     
     GtkWidget *pane0 = create_paned(orientation);
     
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     current->container->add(current->container, pane0, TRUE);
     
-    int max = args.max_panes == 0 ? 2 : args.max_panes;
+    int max = args->max_panes == 0 ? 2 : args->max_panes;
     
     UiObject *newobj = uic_object_new(obj, pane0);
-    newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args.initial_position);
+    newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args->initial_position);
     uic_obj_add(obj, newobj);
     
     g_object_set_data(G_OBJECT(pane0), "ui_splitpane", newobj->container);
@@ -1038,11 +1038,11 @@
     return pane0;
 }
 
-UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs args) {
+UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
     return splitpane_create(obj, UI_HORIZONTAL, args);
 }
 
-UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs args) {
+UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
     return splitpane_create(obj, UI_VERTICAL, args);
 }
 
@@ -1187,33 +1187,33 @@
     free(container);
 }
 
-UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs args) {
+UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args) {
     UiObject *current = uic_current_obj(obj);
     UiContainer *ct = current->container;
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     
-    GtkWidget *box = args.container == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args.spacing) : ui_gtk_hbox_new(args.spacing);
-    ui_set_name_and_style(box, args.name, args.style_class);
-    GtkWidget *widget = args.margin > 0 ? ui_box_set_margin(box, args.margin) : box;
+    GtkWidget *box = args->container == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing);
+    ui_set_name_and_style(box, args->name, args->style_class);
+    GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box;
     ct->add(ct, widget, TRUE);
     
     UiGtkItemListContainer *container = malloc(sizeof(UiGtkItemListContainer));
     container->parent = obj;
     container->widget = box;
-    container->container = ui_box_container(current, box, args.container);
-    container->create_ui = args.create_ui;
-    container->userdata = args.userdata;
-    container->subcontainer = args.subcontainer;
+    container->container = ui_box_container(current, box, args->container);
+    container->create_ui = args->create_ui;
+    container->userdata = args->userdata;
+    container->subcontainer = args->subcontainer;
     container->current_items = cxHashMapCreateSimple(CX_STORE_POINTERS);
     container->current_items->collection.advanced_destructor = remove_item;
     container->current_items->collection.destructor_data = container;
-    container->margin = args.sub_margin;
-    container->spacing = args.sub_spacing;
-    container->columnspacing = args.sub_columnspacing;
-    container->rowspacing = args.sub_rowspacing;
+    container->margin = args->sub_margin;
+    container->spacing = args->sub_spacing;
+    container->columnspacing = args->sub_columnspacing;
+    container->rowspacing = args->sub_rowspacing;
     container->remove_items = TRUE;
     
-    UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_LIST);
+    UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_LIST);
     if(var) {
         UiList *list = var->value;
         list->obj = container;

mercurial