Thu, 29 May 2025 12:03:32 +0200
pass Args structs per pointer (GTK)
--- a/application/main.c Thu May 15 12:55:54 2025 +0200 +++ b/application/main.c Thu May 29 12:03:32 2025 +0200 @@ -608,7 +608,7 @@ } ui_tab(obj, "Tab 3") { UiTabViewArgs args = {0}; - UI_CTN(obj, tabview=ui_tabview_create(obj, args)) { + UI_CTN(obj, tabview=ui_tabview_create(obj, &args)) { UiObject *tab1 = ui_tabview_add(tabview, "Sub 1", -1); ui_button(tab1, .label = "Button 1");
--- a/ui/common/document.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/common/document.c Thu May 29 12:03:32 2025 +0200 @@ -83,7 +83,7 @@ } void* ui_document_new(size_t size) { - CxMempool *mp = cxMempoolCreate(256, NULL); + CxMempool *mp = cxMempoolCreateSimple(256); const CxAllocator *a = mp->allocator; UiContext *ctx = uic_context(NULL, mp);
--- a/ui/common/menu.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/common/menu.c Thu May 29 12:03:32 2025 +0200 @@ -125,19 +125,19 @@ -void ui_menuitem_create(UiMenuItemArgs args) { +void ui_menuitem_create(UiMenuItemArgs *args) { UiMenuItem* item = malloc(sizeof(UiMenuItem)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_ITEM; - item->label = nl_strdup(args.label); - item->stockid = nl_strdup(args.stockid); - item->icon = nl_strdup(args.icon); - item->userdata = args.onclickdata; - item->callback = args.onclick; - item->groups = uic_copy_groups(args.groups, &item->ngroups); + item->label = nl_strdup(args->label); + item->stockid = nl_strdup(args->stockid); + item->icon = nl_strdup(args->icon); + item->userdata = args->onclickdata; + item->callback = args->onclick; + item->groups = uic_copy_groups(args->groups, &item->ngroups); add_item((UiMenuItemI*)item); } @@ -152,79 +152,79 @@ add_item((UiMenuItemI*)item); } -void ui_menu_toggleitem_create(UiMenuToggleItemArgs args) { +void ui_menu_toggleitem_create(UiMenuToggleItemArgs *args) { UiMenuCheckItem *item = malloc(sizeof(UiMenuCheckItem)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_CHECK_ITEM; - item->label = nl_strdup(args.label); - item->stockid = nl_strdup(args.stockid); - item->icon = nl_strdup(args.icon); - item->varname = nl_strdup(args.varname); - item->userdata = args.onchangedata; - item->callback = args.onchange; - item->groups = uic_copy_groups(args.groups, &item->ngroups); + item->label = nl_strdup(args->label); + item->stockid = nl_strdup(args->stockid); + item->icon = nl_strdup(args->icon); + item->varname = nl_strdup(args->varname); + item->userdata = args->onchangedata; + item->callback = args->onchange; + item->groups = uic_copy_groups(args->groups, &item->ngroups); add_item((UiMenuItemI*)item); } -void ui_menu_radioitem_create(UiMenuToggleItemArgs args) { +void ui_menu_radioitem_create(UiMenuToggleItemArgs *args) { UiMenuCheckItem* item = malloc(sizeof(UiMenuCheckItem)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_RADIO_ITEM; - item->label = nl_strdup(args.label); - item->stockid = nl_strdup(args.stockid); - item->icon = nl_strdup(args.icon); - item->varname = nl_strdup(args.varname); - item->userdata = args.onchangedata; - item->callback = args.onchange; - item->groups = uic_copy_groups(args.groups, &item->ngroups); + item->label = nl_strdup(args->label); + item->stockid = nl_strdup(args->stockid); + item->icon = nl_strdup(args->icon); + item->varname = nl_strdup(args->varname); + item->userdata = args->onchangedata; + item->callback = args->onchange; + item->groups = uic_copy_groups(args->groups, &item->ngroups); add_item((UiMenuItemI*)item); } -void ui_menu_itemlist_create(UiMenuItemListArgs args) { +void ui_menu_itemlist_create(UiMenuItemListArgs *args) { UiMenuItemList*item = malloc(sizeof(UiMenuItemList)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_ITEM_LIST; - item->getvalue = args.getvalue; - item->callback = args.onselect; - item->userdata = args.onselectdata; - item->varname = nl_strdup(args.varname); - item->addseparator = args.addseparator; + item->getvalue = args->getvalue; + item->callback = args->onselect; + item->userdata = args->onselectdata; + item->varname = nl_strdup(args->varname); + item->addseparator = args->addseparator; add_item((UiMenuItemI*)item); } -void ui_menu_checkitemlist_create(UiMenuItemListArgs args) { +void ui_menu_checkitemlist_create(UiMenuItemListArgs *args) { UiMenuItemList* item = malloc(sizeof(UiMenuItemList)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_CHECKITEM_LIST; - item->callback = args.onselect; - item->userdata = args.onselectdata; - item->varname = nl_strdup(args.varname); + item->callback = args->onselect; + item->userdata = args->onselectdata; + item->varname = nl_strdup(args->varname); add_item((UiMenuItemI*)item); } -void ui_menu_radioitemlist_create(UiMenuItemListArgs args) { +void ui_menu_radioitemlist_create(UiMenuItemListArgs *args) { UiMenuItemList* item = malloc(sizeof(UiMenuItemList)); mitem_set_id(&item->item); item->item.prev = NULL; item->item.next = NULL; item->item.type = UI_MENU_RADIOITEM_LIST; - item->callback = args.onselect; - item->userdata = args.onselectdata; - item->varname = nl_strdup(args.varname); + item->callback = args->onselect; + item->userdata = args->onselectdata; + item->varname = nl_strdup(args->varname); add_item((UiMenuItemI*)item); }
--- a/ui/common/toolbar.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/common/toolbar.c Thu May 29 12:03:32 2025 +0200 @@ -49,18 +49,18 @@ return str ? strdup(str) : NULL; } -static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs args, size_t *ngroups) { +static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups) { UiToolbarItemArgs newargs; - newargs.label = nl_strdup(args.label); - newargs.stockid = nl_strdup(args.stockid); - newargs.icon = nl_strdup(args.icon); - newargs.onclick = args.onclick; - newargs.onclickdata = args.onclickdata; - newargs.groups = uic_copy_groups(args.groups, ngroups); + newargs.label = nl_strdup(args->label); + newargs.stockid = nl_strdup(args->stockid); + newargs.icon = nl_strdup(args->icon); + newargs.onclick = args->onclick; + newargs.onclickdata = args->onclickdata; + newargs.groups = uic_copy_groups(args->groups, ngroups); return newargs; } -void ui_toolbar_item_create(const char* name, UiToolbarItemArgs args) { +void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) { UiToolbarItem* item = malloc(sizeof(UiToolbarItem)); item->item.type = UI_TOOLBAR_ITEM; item->args = itemargs_copy(args, &item->ngroups); @@ -68,34 +68,34 @@ } -static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs args, size_t *ngroups) { +static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups) { UiToolbarToggleItemArgs newargs; - newargs.label = nl_strdup(args.label); - newargs.stockid = nl_strdup(args.stockid); - newargs.icon = nl_strdup(args.icon); - newargs.varname = nl_strdup(args.varname); - newargs.onchange = args.onchange; - newargs.onchangedata = args.onchangedata; - newargs.groups = uic_copy_groups(args.groups, ngroups); + newargs.label = nl_strdup(args->label); + newargs.stockid = nl_strdup(args->stockid); + newargs.icon = nl_strdup(args->icon); + newargs.varname = nl_strdup(args->varname); + newargs.onchange = args->onchange; + newargs.onchangedata = args->onchangedata; + newargs.groups = uic_copy_groups(args->groups, ngroups); return newargs; } -void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs args) { +void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) { UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem)); item->item.type = UI_TOOLBAR_TOGGLEITEM; item->args = toggleitemargs_copy(args, &item->ngroups); cxMapPut(toolbar_items, name, item); } -static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs args) { +static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args) { UiToolbarMenuArgs newargs; - newargs.label = nl_strdup(args.label); - newargs.stockid = nl_strdup(args.stockid); - newargs.icon = nl_strdup(args.icon); + newargs.label = nl_strdup(args->label); + newargs.stockid = nl_strdup(args->stockid); + newargs.icon = nl_strdup(args->icon); return newargs; } -UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args) { +UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args) { UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem)); item->item.type = UI_TOOLBAR_MENU; memset(&item->menu, 0, sizeof(UiMenu));
--- a/ui/gtk/button.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/button.c Thu May 29 12:03:32 2025 +0200 @@ -96,12 +96,12 @@ return button; } -UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs args) { +UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) { UiObject* current = uic_current_obj(obj); - GtkWidget *button = ui_create_button(obj, args.label, args.icon, args.onclick, args.onclickdata, 0, FALSE); - ui_set_name_and_style(button, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, button, args.groups); - UI_APPLY_LAYOUT1(current, args); + GtkWidget *button = ui_create_button(obj, args->label, args->icon, args->onclick, args->onclickdata, 0, FALSE); + ui_set_name_and_style(button, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, button, args->groups); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, button, FALSE); return button; } @@ -274,29 +274,29 @@ } } -static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs args) { +static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs *args) { UiObject* current = uic_current_obj(obj); ui_setup_togglebutton( obj, widget, - args.label, - args.icon, - args.varname, - args.value, - args.onchange, - args.onchangedata, - args.enable_group); - ui_set_name_and_style(widget, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, widget, args.groups); + args->label, + args->icon, + args->varname, + args->value, + args->onchange, + args->onchangedata, + args->enable_group); + ui_set_name_and_style(widget, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, widget, args->groups); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, widget, FALSE); return widget; } -UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) { return togglebutton_create(obj, gtk_toggle_button_new(), args); } @@ -333,39 +333,39 @@ } } -UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) { UiObject* current = uic_current_obj(obj); - GtkWidget *widget = gtk_check_button_new_with_label(args.label); + GtkWidget *widget = gtk_check_button_new_with_label(args->label); ui_bind_togglebutton( obj, widget, ui_check_button_get, ui_check_button_set, - args.varname, - args.value, + args->varname, + args->value, (ui_toggled_func)ui_checkbox_callback, - args.onchange, - args.onchangedata, + args->onchange, + args->onchangedata, (ui_toggled_func)ui_checkbox_enable_state, - args.enable_group); + args->enable_group); - ui_set_name_and_style(widget, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, widget, args.groups); + ui_set_name_and_style(widget, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, widget, args->groups); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, widget, FALSE); return widget; } #else -UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) { return togglebutton_create(obj, gtk_check_button_new(), args); } #endif -UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) { #ifdef UI_GTK3 return NULL; // TODO #else @@ -415,13 +415,13 @@ free(data); } -UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) { +UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) { UiObject* current = uic_current_obj(obj); GSList *rg = NULL; UiInteger *rgroup; - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER); UiBool first = FALSE; if(var) { @@ -432,9 +432,9 @@ } } - GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args.label); - ui_set_name_and_style(rbutton, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, rbutton, args.groups); + GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args->label); + ui_set_name_and_style(rbutton, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, rbutton, args->groups); if(rgroup) { #if GTK_MAJOR_VERSION >= 4 if(rg) { @@ -476,11 +476,11 @@ rbdata); } - if(args.onchange) { + if(args->onchange) { UiEventData *event = malloc(sizeof(UiEventData)); event->obj = obj; - event->userdata = args.onchangedata; - event->callback = args.onchange; + event->userdata = args->onchangedata; + event->callback = args->onchange; event->value = 0; event->customdata = NULL; @@ -496,7 +496,7 @@ event); } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, rbutton, FALSE); return rbutton;
--- 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;
--- a/ui/gtk/container.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/container.h Thu May 29 12:03:32 2025 +0200 @@ -173,7 +173,7 @@ void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); GtkWidget* ui_box_set_margin(GtkWidget *box, int margin); -UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type); +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, UiBool fill);
--- a/ui/gtk/display.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/display.c Thu May 29 12:03:32 2025 +0200 @@ -46,19 +46,19 @@ #endif } -UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) { +UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs *args) { UiObject* current = uic_current_obj(obj); const char *css_class = NULL; char *markup = NULL; - if(args.label) { + if(args->label) { #if GTK_MAJOR_VERSION < 3 - switch(args.style) { + switch(args->style) { case UI_LABEL_STYLE_DEFAULT: break; case UI_LABEL_STYLE_TITLE: { - cxmutstr m = cx_asprintf("<b>%s</b>", args.label); + cxmutstr m = cx_asprintf("<b>%s</b>", args->label); markup = m.ptr; - args.label = NULL; + args->label = NULL; } case UI_LABEL_STYLE_SUBTITLE: { break; @@ -68,7 +68,7 @@ } } # else - switch(args.style) { + switch(args->style) { case UI_LABEL_STYLE_DEFAULT: break; case UI_LABEL_STYLE_TITLE: { css_class = "ui_label_title"; @@ -87,7 +87,7 @@ } - GtkWidget *widget = gtk_label_new(args.label); + GtkWidget *widget = gtk_label_new(args->label); if(markup) { gtk_label_set_markup(GTK_LABEL(widget), markup); free(markup); @@ -97,7 +97,7 @@ WIDGET_ADD_CSS_CLASS(widget, css_class); } - switch(args.align) { + switch(args->align) { case UI_ALIGN_DEFAULT: break; case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break; case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break; @@ -105,7 +105,7 @@ } - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); if(var) { UiString* value = (UiString*)var->value; value->obj = widget; @@ -113,19 +113,19 @@ value->set = ui_label_set; } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, widget, FALSE); return widget; } -UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) { - args.align = UI_ALIGN_LEFT; +UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) { + args->align = UI_ALIGN_LEFT; return ui_label_create(obj, args); } -UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) { - args.align = UI_ALIGN_RIGHT; +UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) { + args->align = UI_ALIGN_RIGHT; return ui_label_create(obj, args); } @@ -174,14 +174,14 @@ double max; } UiProgressBarRange; -UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) { +UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) { UiObject* current = uic_current_obj(obj); GtkWidget *progressbar = gtk_progress_bar_new(); - if(args.max > args.min) { + if(args->max > args->min) { UiProgressBarRange *range = malloc(sizeof(UiProgressBarRange)); - range->min = args.min; - range->max = args.max; + range->min = args->min; + range->max = args->max; g_signal_connect( progressbar, "destroy", @@ -191,7 +191,7 @@ } - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_DOUBLE); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_DOUBLE); if(var && var->value) { UiDouble *value = var->value; value->get = ui_progressbar_get; @@ -200,7 +200,7 @@ ui_progressbar_set(value, value->value); } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, progressbar, FALSE); return progressbar; @@ -228,12 +228,12 @@ /* ------------------------- progress spinner ------------------------- */ -UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) { +UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args) { UiObject* current = uic_current_obj(obj); GtkWidget *spinner = gtk_spinner_new(); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER); if(var && var->value) { UiInteger *value = var->value; value->get = ui_spinner_get; @@ -242,7 +242,7 @@ ui_spinner_set(value, value->value); } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, spinner, FALSE); return spinner;
--- a/ui/gtk/entry.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/entry.c Thu May 29 12:03:32 2025 +0200 @@ -35,24 +35,24 @@ #include "entry.h" -UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) { +UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) { double min = 0; double max = 1000; UiObject* current = uic_current_obj(obj); UiVar *var = NULL; - if(args.varname) { - var = uic_get_var(obj->ctx, args.varname); + if(args->varname) { + var = uic_get_var(obj->ctx, args->varname); } if(!var) { - if(args.intvalue) { - var = uic_widget_var(obj->ctx, current->ctx, args.intvalue, NULL, UI_VAR_INTEGER); - } else if(args.doublevalue) { - var = uic_widget_var(obj->ctx, current->ctx, args.doublevalue, NULL, UI_VAR_DOUBLE); - } else if(args.rangevalue) { - var = uic_widget_var(obj->ctx, current->ctx, args.rangevalue, NULL, UI_VAR_RANGE); + if(args->intvalue) { + var = uic_widget_var(obj->ctx, current->ctx, args->intvalue, NULL, UI_VAR_INTEGER); + } else if(args->doublevalue) { + var = uic_widget_var(obj->ctx, current->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE); + } else if(args->rangevalue) { + var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, NULL, UI_VAR_RANGE); } } @@ -61,18 +61,18 @@ min = r->min; max = r->max; } - if(args.step == 0) { - args.step = 1; + if(args->step == 0) { + args->step = 1; } #ifdef UI_GTK2LEGACY if(min == max) { max = min + 1; } #endif - GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args.step); - ui_set_name_and_style(spin, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, spin, args.groups); - gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args.digits); + GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args->step); + ui_set_name_and_style(spin, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, spin, args->groups); + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->digits); UiObserver **obs = NULL; if(var) { double value = 0; @@ -115,8 +115,8 @@ event->obj = obj; event->var = var; event->observers = obs; - event->callback = args.onchange; - event->userdata = args.onchangedata; + event->callback = args->onchange; + event->userdata = args->onchangedata; g_signal_connect( spin, @@ -129,7 +129,7 @@ G_CALLBACK(ui_destroy_vardata), event); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, spin, FALSE); return spin;
--- a/ui/gtk/image.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/image.c Thu May 29 12:03:32 2025 +0200 @@ -63,7 +63,7 @@ #endif -UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) { +UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args) { UiObject *current = uic_current_obj(obj); GtkWidget *drawingarea = gtk_drawing_area_new(); @@ -78,10 +78,10 @@ widget = eventbox; #endif - if(args.scrollarea) { + if(args->scrollarea) { toplevel = SCROLLEDWINDOW_NEW(); SCROLLEDWINDOW_SET_CHILD(toplevel, widget); - args.adjustwidgetsize = TRUE; + args->adjustwidgetsize = TRUE; } else { toplevel = widget; } @@ -89,29 +89,29 @@ UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer)); memset(imgviewer, 0, sizeof(UiImageViewer)); imgviewer->obj = obj; - imgviewer->onbuttonpress = args.onbuttonpress; - imgviewer->onbuttonpressdata = args.onbuttonpressdata; - imgviewer->onbuttonrelease = args.onbuttonrelease; - imgviewer->onbuttonreleasedata = args.onbuttonreleasedata; - if(args.image_padding > 0) { - imgviewer->padding_left = args.image_padding; - imgviewer->padding_right = args.image_padding; - imgviewer->padding_top = args.image_padding; - imgviewer->padding_bottom = args.image_padding; + imgviewer->onbuttonpress = args->onbuttonpress; + imgviewer->onbuttonpressdata = args->onbuttonpressdata; + imgviewer->onbuttonrelease = args->onbuttonrelease; + imgviewer->onbuttonreleasedata = args->onbuttonreleasedata; + if(args->image_padding > 0) { + imgviewer->padding_left = args->image_padding; + imgviewer->padding_right = args->image_padding; + imgviewer->padding_top = args->image_padding; + imgviewer->padding_bottom = args->image_padding; } else { - imgviewer->padding_left = args.image_padding_left; - imgviewer->padding_right = args.image_padding_right; - imgviewer->padding_top = args.image_padding_top; - imgviewer->padding_bottom = args.image_padding_bottom; + imgviewer->padding_left = args->image_padding_left; + imgviewer->padding_right = args->image_padding_right; + imgviewer->padding_top = args->image_padding_top; + imgviewer->padding_bottom = args->image_padding_bottom; } - imgviewer->adjustwidgetsize = args.adjustwidgetsize; - imgviewer->autoscale = args.autoscale; - imgviewer->useradjustable = args.useradjustable; + imgviewer->adjustwidgetsize = args->adjustwidgetsize; + imgviewer->autoscale = args->autoscale; + imgviewer->useradjustable = args->useradjustable; imgviewer->zoom_scale = 20; g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy); - UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC); + UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_GENERIC); imgviewer->var = var; imgviewer->widget = drawingarea; @@ -136,7 +136,7 @@ imgviewer, NULL); - if(args.useradjustable) { + if(args->useradjustable) { gtk_widget_set_focusable(drawingarea, TRUE); } @@ -182,12 +182,12 @@ #endif - if(args.contextmenu) { - UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, widget); + if(args->contextmenu) { + UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, widget); ui_widget_set_contextmenu(widget, menu); } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, toplevel, TRUE); return toplevel;
--- a/ui/gtk/list.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/list.c Thu May 29 12:03:32 2025 +0200 @@ -189,34 +189,34 @@ return selection_model; } -static UiListView* create_listview(UiObject *obj, UiListArgs args) { +static UiListView* create_listview(UiObject *obj, UiListArgs *args) { UiListView *tableview = malloc(sizeof(UiListView)); memset(tableview, 0, sizeof(UiListView)); tableview->obj = obj; - tableview->model = args.model; - tableview->onactivate = args.onactivate; - tableview->onactivatedata = args.onactivatedata; - tableview->onselection = args.onselection; - tableview->onselectiondata = args.onselectiondata; - tableview->ondragstart = args.ondragstart; - tableview->ondragstartdata = args.ondragstartdata; - tableview->ondragcomplete = args.ondragcomplete; - tableview->ondragcompletedata = args.ondragcompletedata; - tableview->ondrop = args.ondrop; - tableview->ondropdata = args.ondropsdata; + tableview->model = args->model; + tableview->onactivate = args->onactivate; + tableview->onactivatedata = args->onactivatedata; + tableview->onselection = args->onselection; + tableview->onselectiondata = args->onselectiondata; + tableview->ondragstart = args->ondragstart; + tableview->ondragstartdata = args->ondragstartdata; + tableview->ondragcomplete = args->ondragcomplete; + tableview->ondragcompletedata = args->ondragcompletedata; + tableview->ondrop = args->ondrop; + tableview->ondropdata = args->ondropsdata; tableview->selection.count = 0; tableview->selection.rows = NULL; return tableview; } -UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); // to simplify things and share code with ui_table_create, we also // use a UiModel for the listview UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1); - model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; - args.model = model; + model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; + args->model = model; GListStore *ls = g_list_store_new(G_TYPE_OBJECT); UiListView *listview = create_listview(obj, args); @@ -230,10 +230,10 @@ g_signal_connect(factory, "setup", G_CALLBACK(column_factory_setup), listview->columns); g_signal_connect(factory, "bind", G_CALLBACK(column_factory_bind), listview->columns); - GtkSelectionModel *selection_model = create_selection_model(listview, ls, args.multiselection); + GtkSelectionModel *selection_model = create_selection_model(listview, ls, args->multiselection); GtkWidget *view = gtk_list_view_new(GTK_SELECTION_MODEL(selection_model), factory); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); // init listview listview->widget = view; @@ -256,21 +256,21 @@ list->setselection = ui_listview_setselection2; ui_update_liststore(ls, list); - } else if (args.static_elements && args.static_nelm > 0) { - listview_copy_static_elements(listview, args.static_elements, args.static_nelm); + } else if (args->static_elements && args->static_nelm > 0) { + listview_copy_static_elements(listview, args->static_elements, args->static_nelm); listview->model->getvalue = ui_strmodel_getvalue; // force strmodel ui_update_liststore_static(ls, listview->elements, listview->nelm); } // event handling - if(args.onactivate) { + if(args->onactivate) { // columnview and listview can use the same callback function, because // the first parameter (which is technically a different pointer type) // is ignored g_signal_connect(view, "activate", G_CALLBACK(ui_columnview_activate), listview); } - if(args.contextmenu) { - UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view); + if(args->contextmenu) { + UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view); ui_widget_set_contextmenu(view, menu); } @@ -282,7 +282,7 @@ GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS SCROLLEDWINDOW_SET_CHILD(scroll_area, view); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, FALSE); // ct->current should point to view, not scroll_area, to make it possible @@ -292,14 +292,14 @@ return scroll_area; } -UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); // to simplify things and share code with ui_tableview_create, we also // use a UiModel for the listview UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1); - model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; - args.model = model; + model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; + args->model = model; GListStore *ls = g_list_store_new(G_TYPE_OBJECT); UiListView *listview = create_listview(obj, args); @@ -316,7 +316,7 @@ GtkWidget *view = gtk_drop_down_new(G_LIST_MODEL(ls), NULL); gtk_drop_down_set_factory(GTK_DROP_DOWN(view), factory); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); // init listview listview->widget = view; @@ -339,19 +339,19 @@ list->setselection = ui_combobox_setselection; ui_update_liststore(ls, list); - } else if (args.static_elements && args.static_nelm > 0) { - listview_copy_static_elements(listview, args.static_elements, args.static_nelm); + } else if (args->static_elements && args->static_nelm > 0) { + listview_copy_static_elements(listview, args->static_elements, args->static_nelm); listview->model->getvalue = ui_strmodel_getvalue; // force strmodel ui_update_liststore_static(ls, listview->elements, listview->nelm); } // event handling - if(args.onactivate) { + if(args->onactivate) { g_signal_connect(view, "notify::selected", G_CALLBACK(ui_dropdown_notify), listview); } // add widget to parent - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, view, FALSE); return view; } @@ -365,7 +365,7 @@ gtk_drop_down_set_selected(GTK_DROP_DOWN(dropdown), index); } -UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); GListStore *ls = g_list_store_new(G_TYPE_OBJECT); @@ -375,10 +375,10 @@ // and list updates UiListView *tableview = create_listview(obj, args); - GtkSelectionModel *selection_model = create_selection_model(tableview, ls, args.multiselection); + GtkSelectionModel *selection_model = create_selection_model(tableview, ls, args->multiselection); GtkWidget *view = gtk_column_view_new(GTK_SELECTION_MODEL(selection_model)); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); // init tableview tableview->widget = view; @@ -393,7 +393,7 @@ // create columns from UiModel - UiModel *model = args.model; + UiModel *model = args->model; int columns = model ? model->columns : 0; tableview->columns = calloc(columns, sizeof(UiColData)); @@ -439,11 +439,11 @@ } // event handling - if(args.onactivate) { + if(args->onactivate) { g_signal_connect(view, "activate", G_CALLBACK(ui_columnview_activate), tableview); } - if(args.contextmenu) { - UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view); + if(args->contextmenu) { + UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view); ui_widget_set_contextmenu(view, menu); } @@ -455,7 +455,7 @@ GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS SCROLLEDWINDOW_SET_CHILD(scroll_area, view); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, FALSE); // ct->current should point to view, not scroll_area, to make it possible @@ -780,13 +780,13 @@ } -UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); // create treeview GtkWidget *view = gtk_tree_view_new(); - ui_set_name_and_style(view, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, view, args.groups); + ui_set_name_and_style(view, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, view, args->groups); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); @@ -803,9 +803,9 @@ #endif UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1); - model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; + model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); UiList *list = var ? var->value : NULL; GtkListStore *listmodel = create_list_store(list, model); @@ -835,24 +835,24 @@ // add callback UiTreeEventData *event = malloc(sizeof(UiTreeEventData)); event->obj = obj; - event->activate = args.onactivate; - event->activatedata = args.onactivatedata; - event->selection = args.onselection; - event->selectiondata = args.onselectiondata; + event->activate = args->onactivate; + event->activatedata = args->onactivatedata; + event->selection = args->onselection; + event->selectiondata = args->onselectiondata; g_signal_connect( view, "destroy", G_CALLBACK(ui_destroy_userdata), event); - if(args.onactivate) { + if(args->onactivate) { g_signal_connect( view, "row-activated", G_CALLBACK(ui_listview_activate_event), event); } - if(args.onselection) { + if(args->onselection) { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view)); g_signal_connect( @@ -861,8 +861,8 @@ G_CALLBACK(ui_listview_selection_event), event); } - if(args.contextmenu) { - UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view); + if(args->contextmenu) { + UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view); ui_widget_set_contextmenu(view, menu); } @@ -875,7 +875,7 @@ GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS SCROLLEDWINDOW_SET_CHILD(scroll_area, view); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, FALSE); // ct->current should point to view, not scroll_area, to make it possible @@ -896,13 +896,13 @@ gtk_combo_box_set_active(GTK_COMBO_BOX(dropdown), index); } -UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); // create treeview GtkWidget *view = gtk_tree_view_new(); - UiModel *model = args.model; + UiModel *model = args->model; int columns = model ? model->columns : 0; int addi = 0; @@ -959,7 +959,7 @@ #endif - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); UiList *list = var ? var->value : NULL; GtkListStore *listmodel = create_list_store(list, model); @@ -977,12 +977,12 @@ tableview->widget = view; tableview->var = var; tableview->model = model; - tableview->ondragstart = args.ondragstart; - tableview->ondragstartdata = args.ondragstartdata; - tableview->ondragcomplete = args.ondragcomplete; - tableview->ondragcompletedata = args.ondragcompletedata; - tableview->ondrop = args.ondrop; - tableview->ondropdata = args.ondropsdata; + tableview->ondragstart = args->ondragstart; + tableview->ondragstartdata = args->ondragstartdata; + tableview->ondragcomplete = args->ondragcomplete; + tableview->ondragcompletedata = args->ondragcompletedata; + tableview->ondrop = args->ondrop; + tableview->ondropdata = args->ondropsdata; tableview->selection.count = 0; tableview->selection.rows = NULL; g_signal_connect( @@ -1000,18 +1000,18 @@ // add callback UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData)); event->obj = obj; - event->activate = args.onactivate; - event->selection = args.onselection; - event->activatedata = args.onactivatedata; - event->selectiondata = args.onselectiondata; - if(args.onactivate) { + event->activate = args->onactivate; + event->selection = args->onselection; + event->activatedata = args->onactivatedata; + event->selectiondata = args->onselectiondata; + if(args->onactivate) { g_signal_connect( view, "row-activated", G_CALLBACK(ui_listview_activate_event), event); } - if(args.onselection) { + if(args->onselection) { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view)); g_signal_connect( @@ -1023,15 +1023,15 @@ // TODO: destroy callback - if(args.ondragstart) { + if(args->ondragstart) { ui_listview_add_dnd(tableview, &args); } - if(args.ondrop) { + if(args->ondrop) { ui_listview_enable_drop(tableview, &args); } GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); - if(args.multiselection) { + if(args->multiselection) { gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); } @@ -1043,8 +1043,8 @@ GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS SCROLLEDWINDOW_SET_CHILD(scroll_area, view); - if(args.contextmenu) { - UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, scroll_area); + if(args->contextmenu) { + UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, scroll_area); #if GTK_MAJOR_VERSION >= 4 ui_widget_set_contextmenu(scroll_area, menu); #else @@ -1052,7 +1052,7 @@ #endif } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, FALSE); // ct->current should point to view, not scroll_area, to make it possible @@ -1102,18 +1102,18 @@ /* --------------------------- ComboBox --------------------------- */ -UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs args) { +UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs *args) { UiObject* current = uic_current_obj(obj); UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1); - model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; + model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST); - GtkWidget *combobox = ui_create_combobox(obj, model, var, args.static_elements, args.static_nelm, args.onactivate, args.onactivatedata); - ui_set_name_and_style(combobox, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, combobox, args.groups); - UI_APPLY_LAYOUT1(current, args); + GtkWidget *combobox = ui_create_combobox(obj, model, var, args->static_elements, args->static_nelm, args->onactivate, args->onactivatedata); + ui_set_name_and_style(combobox, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, combobox, args->groups); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, combobox, FALSE); current->container->current = combobox; return combobox; @@ -1758,7 +1758,7 @@ cxListAdd(sublists, &uisublist); } -UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) { +UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args) { UiObject* current = uic_current_obj(obj); #ifdef UI_GTK3 @@ -1766,7 +1766,7 @@ #else GtkWidget *listbox = gtk_list_box_new(); #endif - if(!args.style_class) { + if(!args->style_class) { #if GTK_MAJOR_VERSION >= 4 WIDGET_ADD_CSS_CLASS(listbox, "navigation-sidebar"); #else @@ -1777,31 +1777,31 @@ GtkWidget *scroll_area = SCROLLEDWINDOW_NEW(); SCROLLEDWINDOW_SET_CHILD(scroll_area, listbox); - ui_set_name_and_style(listbox, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, listbox, args.groups); - UI_APPLY_LAYOUT1(current, args); + ui_set_name_and_style(listbox, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, listbox, args->groups); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, TRUE); UiListBox *uilistbox = malloc(sizeof(UiListBox)); uilistbox->obj = obj; uilistbox->listbox = GTK_LIST_BOX(listbox); - uilistbox->getvalue = args.getvalue; - uilistbox->onactivate = args.onactivate; - uilistbox->onactivatedata = args.onactivatedata; - uilistbox->onbuttonclick = args.onbuttonclick; - uilistbox->onbuttonclickdata = args.onbuttonclickdata; + uilistbox->getvalue = args->getvalue; + uilistbox->onactivate = args->onactivate; + uilistbox->onactivatedata = args->onactivatedata; + uilistbox->onbuttonclick = args->onbuttonclick; + uilistbox->onbuttonclickdata = args->onbuttonclickdata; uilistbox->sublists = cxArrayListCreateSimple(sizeof(UiListBoxSubList), 4); uilistbox->sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_destroy; uilistbox->sublists->collection.destructor_data = obj; uilistbox->first_row = NULL; - if(args.sublists) { + if(args->sublists) { // static sublist initalization - if(args.numsublists == 0 && args.sublists) { - args.numsublists = INT_MAX; + if(args->numsublists == 0 && args->sublists) { + args->numsublists = INT_MAX; } - for(int i=0;i<args.numsublists;i++) { - UiSubList sublist = args.sublists[i]; + for(int i=0;i<args->numsublists;i++) { + UiSubList sublist = args->sublists[i]; if(!sublist.varname && !sublist.value) { break; } @@ -1812,7 +1812,7 @@ // fill items ui_listbox_update(uilistbox, 0, cxListSize(uilistbox->sublists)); } else { - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.dynamic_sublist, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST); if(var) { UiList *list = var->value; list->obj = uilistbox; @@ -1834,7 +1834,7 @@ G_CALLBACK(ui_destroy_sourcelist), uilistbox); - if(args.onactivate) { + if(args->onactivate) { g_signal_connect( listbox, "row-activated",
--- a/ui/gtk/text.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/text.c Thu May 29 12:03:32 2025 +0200 @@ -107,13 +107,13 @@ return buf; } -UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { +UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { UiObject* current = uic_current_obj(obj); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_TEXT); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_TEXT); GtkWidget *text_area = gtk_text_view_new(); - ui_set_name_and_style(text_area, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, text_area, args.groups); + ui_set_name_and_style(text_area, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, text_area, args->groups); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR); g_signal_connect( @@ -127,8 +127,8 @@ uitext->ctx = obj->ctx; uitext->var = var; uitext->last_selection_state = 0; - uitext->onchange = args.onchange; - uitext->onchangedata = args.onchangedata; + uitext->onchange = args->onchange; + uitext->onchangedata = args->onchangedata; g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); @@ -155,7 +155,7 @@ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2); // add - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, scroll_area, TRUE); // bind value @@ -592,21 +592,21 @@ -static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs args) { +static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) { GtkWidget *textfield = gtk_entry_new(); - ui_set_name_and_style(textfield, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, textfield, args.groups); + ui_set_name_and_style(textfield, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, textfield, args->groups); UiObject* current = uic_current_obj(obj); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); UiTextField *uitext = malloc(sizeof(UiTextField)); uitext->obj = obj; uitext->var = var; - uitext->onchange = args.onchange; - uitext->onchangedata = args.onchangedata; - uitext->onactivate = args.onactivate; - uitext->onactivatedata = args.onactivatedata; + uitext->onchange = args->onchange; + uitext->onchangedata = args->onchangedata; + uitext->onactivate = args->onactivate; + uitext->onactivatedata = args->onactivatedata; g_signal_connect( textfield, @@ -614,10 +614,10 @@ G_CALLBACK(ui_textfield_destroy), uitext); - if(args.width > 0) { + if(args->width > 0) { // TODO: gtk4 #if GTK_MAJOR_VERSION <= 3 - gtk_entry_set_width_chars(GTK_ENTRY(textfield), args.width); + gtk_entry_set_width_chars(GTK_ENTRY(textfield), args->width); #endif } if(frameless) { @@ -628,7 +628,7 @@ gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); } - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, textfield, FALSE); if(var) { @@ -647,7 +647,7 @@ value->obj = GTK_ENTRY(textfield); } - if(args.onchange || var) { + if(args->onchange || var) { g_signal_connect( textfield, "changed", @@ -655,7 +655,7 @@ uitext); } - if(args.onactivate) { + if(args->onactivate) { g_signal_connect( textfield, "activate", @@ -666,15 +666,15 @@ return textfield; } -UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) { +UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { return create_textfield(obj, FALSE, FALSE, args); } -UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, TRUE, FALSE, args); } -UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, FALSE, TRUE, args); } @@ -915,22 +915,22 @@ return FALSE; } -UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { +UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { UiObject* current = uic_current_obj(obj); UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); memset(pathtf, 0, sizeof(UiPathTextField)); pathtf->obj = obj; - pathtf->getpathelm = args.getpathelm; - pathtf->getpathelmdata = args.getpathelmdata; - pathtf->onactivate = args.onactivate; - pathtf->onactivatedata = args.onactivatedata; - pathtf->ondragcomplete = args.ondragcomplete; - pathtf->ondragcompletedata = args.ondragcompletedata; - pathtf->ondragstart = args.ondragstart; - pathtf->ondragstartdata = args.ondragstartdata; - pathtf->ondrop = args.ondrop; - pathtf->ondropdata = args.ondropsdata; + pathtf->getpathelm = args->getpathelm; + pathtf->getpathelmdata = args->getpathelmdata; + pathtf->onactivate = args->onactivate; + pathtf->onactivatedata = args->onactivatedata; + pathtf->ondragcomplete = args->ondragcomplete; + pathtf->ondragcompletedata = args->ondragcompletedata; + pathtf->ondragstart = args->ondragstart; + pathtf->ondragstartdata = args->ondragstartdata; + pathtf->ondrop = args->ondrop; + pathtf->ondropdata = args->ondropsdata; if(!pathtf->getpathelm) { pathtf->getpathelm = default_pathelm_func; @@ -940,7 +940,7 @@ pathtf->stack = gtk_stack_new(); gtk_widget_set_name(pathtf->stack, "path-textfield-box"); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, pathtf->stack, FALSE); pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); @@ -973,7 +973,7 @@ gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); if (var) { UiString* value = (UiString*)var->value; value->obj = pathtf; @@ -1076,22 +1076,22 @@ return bb; } -UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { +UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { UiObject* current = uic_current_obj(obj); UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); memset(pathtf, 0, sizeof(UiPathTextField)); pathtf->obj = obj; - pathtf->getpathelm = args.getpathelm; - pathtf->getpathelmdata = args.getpathelmdata; - pathtf->onactivate = args.onactivate; - pathtf->onactivatedata = args.onactivatedata; - pathtf->ondragcomplete = args.ondragcomplete; - pathtf->ondragcompletedata = args.ondragcompletedata; - pathtf->ondragstart = args.ondragstart; - pathtf->ondragstartdata = args.ondragstartdata; - pathtf->ondrop = args.ondrop; - pathtf->ondropdata = args.ondropsdata; + pathtf->getpathelm = args->getpathelm; + pathtf->getpathelmdata = args->getpathelmdata; + pathtf->onactivate = args->onactivate; + pathtf->onactivatedata = args->onactivatedata; + pathtf->ondragcomplete = args->ondragcomplete; + pathtf->ondragcompletedata = args->ondragcompletedata; + pathtf->ondragstart = args->ondragstart; + pathtf->ondragstartdata = args->ondragstartdata; + pathtf->ondrop = args->ondrop; + pathtf->ondropdata = args->ondropsdata; if(!pathtf->getpathelm) { pathtf->getpathelm = default_pathelm_func; @@ -1112,7 +1112,7 @@ G_CALLBACK(ui_path_textfield_destroy), pathtf); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, eventbox, FALSE); // hbox as parent for the GtkEntry and GtkButtonBox @@ -1137,7 +1137,7 @@ G_CALLBACK(ui_path_textfield_key_press), pathtf); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); if (var) { UiString* value = (UiString*)var->value; value->obj = pathtf;
--- a/ui/gtk/webview.c Thu May 15 12:55:54 2025 +0200 +++ b/ui/gtk/webview.c Thu May 29 12:03:32 2025 +0200 @@ -33,14 +33,14 @@ #ifdef UI_WEBVIEW -UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) { +UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { UiObject* current = uic_current_obj(obj); GtkWidget *webview = webkit_web_view_new(); - ui_set_name_and_style(webview, args.name, args.style_class); + ui_set_name_and_style(webview, args->name, args->style_class); - UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC); + UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_GENERIC); if(var) { WebViewData *data = malloc(sizeof(WebViewData)); memset(data, 0, sizeof(WebViewData)); @@ -59,8 +59,8 @@ } } - ui_set_widget_groups(obj->ctx, webview, args.groups); - UI_APPLY_LAYOUT1(current, args); + ui_set_widget_groups(obj->ctx, webview, args->groups); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, webview, FALSE); return webview; @@ -115,7 +115,14 @@ const char *mimetype, const char *encoding) { + WebViewData *data0 = g->obj; + if(!data0) { + return; + } + WebViewData data; + memset(&data, 0, sizeof(WebViewData)); + data.webview = data0->webview; data.uri = (char*)uri; data.content = (char*)content; data.contentlength = contentlength;
--- a/ui/ui/button.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/button.h Thu May 29 12:03:32 2025 +0200 @@ -82,17 +82,17 @@ const int* groups; } UiToggleArgs; -#define ui_button(obj, ...) ui_button_create(obj, (UiButtonArgs){ __VA_ARGS__ } ) -#define ui_togglebutton(obj, ...) ui_togglebutton_create(obj, (UiToggleArgs){ __VA_ARGS__ } ) -#define ui_checkbox(obj, ...) ui_checkbox_create(obj, (UiToggleArgs){ __VA_ARGS__ } ) -#define ui_switch(obj, ...) ui_switch_create(obj, (UiToggleArgs){ __VA_ARGS__ } ) -#define ui_radiobutton(obj, ...) ui_radiobutton_create(obj, (UiToggleArgs){ __VA_ARGS__ } ) +#define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } ) +#define ui_togglebutton(obj, ...) ui_togglebutton_create(obj, &(UiToggleArgs){ __VA_ARGS__ } ) +#define ui_checkbox(obj, ...) ui_checkbox_create(obj, &(UiToggleArgs){ __VA_ARGS__ } ) +#define ui_switch(obj, ...) ui_switch_create(obj, &(UiToggleArgs){ __VA_ARGS__ } ) +#define ui_radiobutton(obj, ...) ui_radiobutton_create(obj, &(UiToggleArgs){ __VA_ARGS__ } ) -UIEXPORT UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args); -UIEXPORT UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args); -UIEXPORT UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args); -UIEXPORT UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args); -UIEXPORT UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args); +UIEXPORT UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args); +UIEXPORT UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args); +UIEXPORT UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args); +UIEXPORT UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args); +UIEXPORT UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args);
--- a/ui/ui/container.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/container.h Thu May 29 12:03:32 2025 +0200 @@ -235,39 +235,39 @@ #define UI_CTN(obj, ctn) for(ctn;ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vbox(obj, ...) for(ui_vbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hbox(obj, ...) for(ui_hbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_grid(obj, ...) for(ui_grid_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_frame(obj, ...) for(ui_frame_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_expander(obj, ...) for(ui_expander_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_scrolledwindow(obj, ...) for(ui_scrolledwindow_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_tabview(obj, ...) for(ui_tabview_create(obj, (UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_headerbar(obj, ...) for(ui_headerbar_create(obj, (UiHeaderbarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_sidebar(obj, ...) for(ui_sidebar_create(obj, (UiSidebarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vbox(obj, ...) for(ui_vbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hbox(obj, ...) for(ui_hbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_grid(obj, ...) for(ui_grid_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_frame(obj, ...) for(ui_frame_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_expander(obj, ...) for(ui_expander_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_scrolledwindow(obj, ...) for(ui_scrolledwindow_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_tabview(obj, ...) for(ui_tabview_create(obj, &(UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_headerbar(obj, ...) for(ui_headerbar_create(obj, &(UiHeaderbarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_sidebar(obj, ...) for(ui_sidebar_create(obj, &(UiSidebarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vbox0(obj) for(ui_vbox_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hbox0(obj) for(ui_hbox_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_grid0(obj) for(ui_grid_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_frame0(obj) for(ui_frame_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_expander0(obj) for(ui_expande_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_scrolledwindow0(obj) for(ui_scrolledwindow_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_tabview0(obj) for(ui_tabview_create(obj, (UiTabViewArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_headerbar0(obj) for(ui_headerbar_create(obj, (UiHeaderbarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_sidebar0(obj) for(ui_sidebar_create(obj, (UiSidebarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vbox0(obj) for(ui_vbox_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hbox0(obj) for(ui_hbox_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_grid0(obj) for(ui_grid_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_frame0(obj) for(ui_frame_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_expander0(obj) for(ui_expande_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_scrolledwindow0(obj) for(ui_scrolledwindow_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_tabview0(obj) for(ui_tabview_create(obj, &(UiTabViewArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_headerbar0(obj) for(ui_headerbar_create(obj, &(UiHeaderbarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_sidebar0(obj) for(ui_sidebar_create(obj, &(UiSidebarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vbox_w(obj, w, ...) for(w = ui_vbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hbox_w(obj, w, ...) for(w = ui_hbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_grid_w(obj, w, ...) for(w = ui_grid_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_tabview_w(obj, w, ...) for(w = ui_tabview_create(obj, (UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_scrolledwindow_w(obj, w, ...) for(w = ui_scrolledwindow_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vbox_w(obj, w, ...) for(w = ui_vbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hbox_w(obj, w, ...) for(w = ui_hbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_grid_w(obj, w, ...) for(w = ui_grid_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_tabview_w(obj, w, ...) for(w = ui_tabview_create(obj, &(UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_scrolledwindow_w(obj, w, ...) for(w = ui_scrolledwindow_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hsplitpane(obj, ...) for(ui_hsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vsplitpane(obj, ...) for(ui_vsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hsplitpane0(obj) for(ui_hsplitpane_create(obj, (UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vsplitpane0(obj) for(ui_vsplitpane_create(obj, (UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hsplitpane(obj, ...) for(ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vsplitpane(obj, ...) for(ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hsplitpane0(obj) for(ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vsplitpane0(obj) for(ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_hsplitpane_w(obj, w, ...) for(w = ui_hsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_vsplitpane_w(obj, w, ...) for(w = ui_vsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_hsplitpane_w(obj, w, ...) for(w = ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) +#define ui_vsplitpane_w(obj, w, ...) for(w = ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj)) #define ui_tab(obj, label) for(ui_tab_create(obj, label);ui_container_finish(obj);ui_container_begin_close(obj)) @@ -275,35 +275,35 @@ #define ui_headerbar_center(obj) for(ui_headerbar_center_create(obj);ui_container_finish(obj);ui_container_begin_close(obj)) #define ui_headerbar_end(obj) for(ui_headerbar_end_create(obj);ui_container_finish(obj);ui_container_begin_close(obj)) -#define ui_itemlist(obj, ...) ui_itemlist_create(obj, (UiItemListContainerArgs) { __VA_ARGS__} ) +#define ui_itemlist(obj, ...) ui_itemlist_create(obj, &(UiItemListContainerArgs) { __VA_ARGS__} ) UIEXPORT void ui_end(UiObject *obj); // deprecated UIEXPORT void ui_end_new(UiObject *obj); // TODO: rename to ui_end -UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args); -UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args); -UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args); -UIEXPORT UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args); -UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args); -UIEXPORT UIWIDGET ui_scrolledwindow_create(UiObject *obj, UiFrameArgs args); +UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args); +UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args); +UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args); +UIEXPORT UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args); +UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args); +UIEXPORT UIWIDGET ui_scrolledwindow_create(UiObject *obj, UiFrameArgs *args); -UIEXPORT UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args); +UIEXPORT UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args); UIEXPORT void ui_tab_create(UiObject *obj, const char* title); UIEXPORT void ui_tabview_select(UIWIDGET tabview, int tab); UIEXPORT void ui_tabview_remove(UIWIDGET tabview, int tab); UIEXPORT UiObject* ui_tabview_add(UIWIDGET tabview, const char *name, int tab_index); -UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args); +UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args); UIEXPORT void ui_headerbar_start_create(UiObject *obj); UIEXPORT void ui_headerbar_center_create(UiObject *obj); UIEXPORT void ui_headerbar_end_create(UiObject *obj); -UIEXPORT UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args); +UIEXPORT UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args); -UIEXPORT UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs args); +UIEXPORT UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args); -UIEXPORT UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs args); -UIEXPORT UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs args); +UIEXPORT UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args); +UIEXPORT UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args); UIEXPORT void ui_splitpane_set_visible(UIWIDGET splitpane, int child_index, UiBool visible); @@ -342,6 +342,17 @@ if(args.rowspan > 0) ui_layout_rowspan(obj, args.rowspan); \ /*force caller to add ';'*/(void)0 +#define UI_APPLY_LAYOUT2(obj, args) \ + if(args->fill != UI_DEFAULT) ui_layout_fill(obj, args->fill == UI_ON ? 1 : 0 ); \ + if(args->hexpand) ui_layout_hexpand(obj, 1); \ + if(args->vexpand) ui_layout_vexpand(obj, 1); \ + if(args->hfill) ui_layout_hfill(obj, 1); \ + if(args->vfill) ui_layout_vfill(obj, 1); \ + if(args->override_defaults) ui_layout_override_defaults(obj, 1); \ + if(args->colspan > 0) ui_layout_colspan(obj, args->colspan); \ + if(args->rowspan > 0) ui_layout_rowspan(obj, args->rowspan); \ + /*force caller to add ';'*/(void)0 + #ifdef __cplusplus }
--- a/ui/ui/display.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/display.h Thu May 29 12:03:32 2025 +0200 @@ -113,24 +113,24 @@ /* label widgets */ -#define ui_label(obj, ...) ui_label_create(obj, (UiLabelArgs) { __VA_ARGS__ }) -#define ui_llabel(obj, ...) ui_llabel_create(obj, (UiLabelArgs) { __VA_ARGS__ }) -#define ui_rlabel(obj, ...) ui_rlabel_create(obj, (UiLabelArgs) { __VA_ARGS__ }) +#define ui_label(obj, ...) ui_label_create(obj, &(UiLabelArgs) { __VA_ARGS__ }) +#define ui_llabel(obj, ...) ui_llabel_create(obj, &(UiLabelArgs) { __VA_ARGS__ }) +#define ui_rlabel(obj, ...) ui_rlabel_create(obj, &(UiLabelArgs) { __VA_ARGS__ }) -UIEXPORT UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args); -UIEXPORT UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args); -UIEXPORT UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args); +UIEXPORT UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args); +UIEXPORT UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args); +UIEXPORT UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args); UIWIDGET ui_space_deprecated(UiObject *obj); /* progress bar/spinner */ -#define ui_progressbar(obj, ...) ui_progressbar_create(obj, (UiProgressbarArgs) { __VA_ARGS__ } ) -#define ui_progressspinner(obj, ...) ui_progressspinner_create(obj, (UiProgressbarSpinnerArgs) { __VA_ARGS__ } ) +#define ui_progressbar(obj, ...) ui_progressbar_create(obj, &(UiProgressbarArgs) { __VA_ARGS__ } ) +#define ui_progressspinner(obj, ...) ui_progressspinner_create(obj, &(UiProgressbarSpinnerArgs) { __VA_ARGS__ } ) -UIEXPORT UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args); -UIEXPORT UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args); +UIEXPORT UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args); +UIEXPORT UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args); #ifdef __cplusplus
--- a/ui/ui/entry.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/entry.h Thu May 29 12:03:32 2025 +0200 @@ -62,9 +62,9 @@ -UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args); +UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args); -#define ui_spinner(obj, ...) ui_spinner_create(obj, (UiSpinnerArgs){ __VA_ARGS__ } ) +#define ui_spinner(obj, ...) ui_spinner_create(obj, &(UiSpinnerArgs){ __VA_ARGS__ } ) void ui_spinner_setrange(UIWIDGET spinner, double min, double max); void ui_spinner_setdigits(UIWIDGET spinner, int digits);
--- a/ui/ui/image.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/image.h Thu May 29 12:03:32 2025 +0200 @@ -75,9 +75,9 @@ void *onbuttonreleasedata; } UiImageViewerArgs; -#define ui_imageviewer(obj, ...) ui_imageviewer_create(obj, (UiImageViewerArgs){ __VA_ARGS__ } ) +#define ui_imageviewer(obj, ...) ui_imageviewer_create(obj, &(UiImageViewerArgs){ __VA_ARGS__ } ) -UIEXPORT UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args); +UIEXPORT UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args); UIEXPORT UIWIDGET ui_imageviewer_reset(UIWIDGET w); UIEXPORT UIWIDGET ui_imageviewer_set_autoscale(UIWIDGET w, UiBool set);
--- a/ui/ui/menu.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/menu.h Thu May 29 12:03:32 2025 +0200 @@ -69,23 +69,23 @@ #define ui_menu(label) for(ui_menu_create(label);ui_menu_is_open();ui_menu_close()) -#define ui_menuitem(...) ui_menuitem_create((UiMenuItemArgs){ __VA_ARGS__ }) -#define ui_menu_toggleitem(...) ui_menu_toggleitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ }) -#define ui_menu_radioitem(...) ui_menu_radioitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ }) -#define ui_menu_itemlist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS__ } ) -#define ui_menu_togglelist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS} ) -#define ui_menu_radiolist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS} ) +#define ui_menuitem(...) ui_menuitem_create(&(UiMenuItemArgs){ __VA_ARGS__ }) +#define ui_menu_toggleitem(...) ui_menu_toggleitem_create(&(UiMenuToggleItemArgs){ __VA_ARGS__ }) +#define ui_menu_radioitem(...) ui_menu_radioitem_create(&(UiMenuToggleItemArgs){ __VA_ARGS__ }) +#define ui_menu_itemlist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS__ } ) +#define ui_menu_togglelist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS} ) +#define ui_menu_radiolist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS} ) UIEXPORT void ui_menu_create(const char* label); -UIEXPORT void ui_menuitem_create(UiMenuItemArgs args); -UIEXPORT void ui_menu_toggleitem_create(UiMenuToggleItemArgs args); -UIEXPORT void ui_menu_radioitem_create(UiMenuToggleItemArgs args); +UIEXPORT void ui_menuitem_create(UiMenuItemArgs *args); +UIEXPORT void ui_menu_toggleitem_create(UiMenuToggleItemArgs *args); +UIEXPORT void ui_menu_radioitem_create(UiMenuToggleItemArgs *args); UIEXPORT void ui_menuseparator(); -UIEXPORT void ui_menu_itemlist_create(UiMenuItemListArgs args); -UIEXPORT void ui_menu_toggleitemlist_create(UiMenuItemListArgs args); -UIEXPORT void ui_menu_radioitemlist_create(UiMenuItemListArgs args); +UIEXPORT void ui_menu_itemlist_create(UiMenuItemListArgs *args); +UIEXPORT void ui_menu_toggleitemlist_create(UiMenuItemListArgs *args); +UIEXPORT void ui_menu_radioitemlist_create(UiMenuItemListArgs *args); UIEXPORT void ui_menu_end(void); // TODO: private
--- a/ui/ui/text.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/text.h Thu May 29 12:03:32 2025 +0200 @@ -119,25 +119,25 @@ void *ondropsdata; } UiPathTextFieldArgs; -#define ui_textarea(obj, ...) ui_textarea_create(obj, (UiTextAreaArgs) { __VA_ARGS__ }) +#define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ }) -UIEXPORT UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args); +UIEXPORT UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args); UIEXPORT UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea); UIEXPORT void ui_text_undo(UiText *value); UIEXPORT void ui_text_redo(UiText *value); -#define ui_textfield(obj, ...) ui_textfield_create(obj, (UiTextFieldArgs) { __VA_ARGS__ }) -#define ui_frameless_textfield(obj, ...) ui_frameless_field_create(obj, (UiTextFieldArgs) { __VA_ARGS__ }) -#define ui_passwordfield(obj, ...) ui_passwordfield_create(obj, (UiTextFieldArgs) { __VA_ARGS__ }) -#define ui_path_textfield(obj, ...) ui_path_textfield_create(obj, (UiPathTextFieldArgs) { __VA_ARGS__ } ) +#define ui_textfield(obj, ...) ui_textfield_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ }) +#define ui_frameless_textfield(obj, ...) ui_frameless_field_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ }) +#define ui_passwordfield(obj, ...) ui_passwordfield_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ }) +#define ui_path_textfield(obj, ...) ui_path_textfield_create(obj, &(UiPathTextFieldArgs) { __VA_ARGS__ } ) -UIEXPORT UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args); -UIEXPORT UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args); -UIEXPORT UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args); +UIEXPORT UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args); +UIEXPORT UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args); +UIEXPORT UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args); -UIEXPORT UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args); +UIEXPORT UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args); #ifdef __cplusplus }
--- a/ui/ui/toolbar.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/toolbar.h Thu May 29 12:03:32 2025 +0200 @@ -71,16 +71,16 @@ UI_TOOLBAR_RIGHT }; -#define ui_toolbar_item(name, ...) ui_toolbar_item_create(name, (UiToolbarItemArgs){ __VA_ARGS__ } ) -#define ui_toolbar_toggleitem(name, ...) ui_toolbar_toggleitem_create(name, (UiToolbarToggleItemArgs){ __VA_ARGS__ } ) +#define ui_toolbar_item(name, ...) ui_toolbar_item_create(name, &(UiToolbarItemArgs){ __VA_ARGS__ } ) +#define ui_toolbar_toggleitem(name, ...) ui_toolbar_toggleitem_create(name, &(UiToolbarToggleItemArgs){ __VA_ARGS__ } ) -#define ui_toolbar_menu(name, ...) for(ui_toolbar_menu_create(name, (UiToolbarMenuArgs){ __VA_ARGS__ });ui_menu_is_open();ui_menu_close()) -#define ui_toolbar_appmenu() for(ui_toolbar_menu_create(NULL, (UiToolbarMenuArgs){ 0 });ui_menu_is_open();ui_menu_close()) +#define ui_toolbar_menu(name, ...) for(ui_toolbar_menu_create(name, &(UiToolbarMenuArgs){ __VA_ARGS__ });ui_menu_is_open();ui_menu_close()) +#define ui_toolbar_appmenu() for(ui_toolbar_menu_create(NULL, &(UiToolbarMenuArgs){ 0 });ui_menu_is_open();ui_menu_close()) -UIEXPORT void ui_toolbar_item_create(const char* name, UiToolbarItemArgs args); -UIEXPORT void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs args); -UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args); +UIEXPORT void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args); +UIEXPORT void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args); +UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args); UIEXPORT void ui_toolbar_add_default(const char *name, enum UiToolbarPos pos);
--- a/ui/ui/tree.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/tree.h Thu May 29 12:03:32 2025 +0200 @@ -240,21 +240,21 @@ UIEXPORT UiModel* ui_model_copy(UiContext *ctx, UiModel* model); UIEXPORT void ui_model_free(UiContext *ctx, UiModel *mi); -#define ui_listview(obj, ...) ui_listview_create(obj, (UiListArgs) { __VA_ARGS__ } ) -#define ui_table(obj, ...) ui_table_create(obj, (UiListArgs) { __VA_ARGS__ } ) -#define ui_combobox(obj, ...) ui_combobox_create(obj, (UiListArgs) { __VA_ARGS__ } ) -#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, (UiListArgs) { __VA_ARGS__ } ) -#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, (UiSourceListArgs) { __VA_ARGS__ } ) +#define ui_listview(obj, ...) ui_listview_create(obj, &(UiListArgs) { __VA_ARGS__ } ) +#define ui_table(obj, ...) ui_table_create(obj, &(UiListArgs) { __VA_ARGS__ } ) +#define ui_combobox(obj, ...) ui_combobox_create(obj, &(UiListArgs) { __VA_ARGS__ } ) +#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, &(UiListArgs) { __VA_ARGS__ } ) +#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, &(UiSourceListArgs) { __VA_ARGS__ } ) -UIEXPORT UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args); -UIEXPORT UIWIDGET ui_table_create(UiObject* obj, UiListArgs args); -UIEXPORT UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs args); -UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject* obj, UiListArgs args); +UIEXPORT UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args); +UIEXPORT UIWIDGET ui_table_create(UiObject* obj, UiListArgs *args); +UIEXPORT UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs *args); +UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject* obj, UiListArgs *args); UIEXPORT void ui_listview_select(UIWIDGET listview, int index); UIEXPORT void ui_combobox_select(UIWIDGET dropdown, int index); -UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args); +UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args); #ifdef __cplusplus
--- a/ui/ui/webview.h Thu May 15 12:55:54 2025 +0200 +++ b/ui/ui/webview.h Thu May 29 12:03:32 2025 +0200 @@ -56,9 +56,9 @@ const int* groups; } UiWebviewArgs; -#define ui_webview(obj, ...) ui_webview_create(obj, (UiWebviewArgs){ __VA_ARGS__ } ) +#define ui_webview(obj, ...) ui_webview_create(obj, &(UiWebviewArgs){ __VA_ARGS__ } ) -UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args); +UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args); void ui_webview_load_url(UiGeneric *g, const char *url);