Thu, 29 May 2025 13:23:11 +0200
refactore widget args passing (Motif)
| ui/motif/button.c | file | annotate | diff | comparison | revisions | |
| ui/motif/container.c | file | annotate | diff | comparison | revisions | |
| ui/motif/container.h | file | annotate | diff | comparison | revisions | |
| ui/motif/label.c | file | annotate | diff | comparison | revisions | |
| ui/motif/list.c | file | annotate | diff | comparison | revisions | |
| ui/motif/text.c | file | annotate | diff | comparison | revisions | |
| ui/motif/widget.c | file | annotate | diff | comparison | revisions | |
| ui/ui/widget.h | file | annotate | diff | comparison | revisions |
--- a/ui/motif/button.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/button.c Thu May 29 13:23:11 2025 +0200 @@ -41,7 +41,7 @@ #include <Xm/XmAll.h> -UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) { +UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) { Arg xargs[16]; int n = 0; @@ -51,22 +51,22 @@ Widget parent = ctn->prepare(ctn, xargs, &n); XmString label = NULL; - if(args.label) { - label = XmStringCreateLocalized((char*)args.label); + if(args->label) { + label = XmStringCreateLocalized((char*)args->label); XtSetArg(xargs[n], XmNlabelString, label); n++; } - char *name = args.name ? (char*)args.name : "button"; + char *name = args->name ? (char*)args->name : "button"; Widget button = XmCreatePushButton(parent, name, xargs, n); XtManageChild(button); ctn->add(ctn, button); - ui_set_widget_groups(obj->ctx, button, args.groups); + ui_set_widget_groups(obj->ctx, button, args->groups); - if(args.onclick) { + if(args->onclick) { UiEventData *eventdata = malloc(sizeof(UiEventData)); - eventdata->callback = args.onclick; - eventdata->userdata = args.onclickdata; + eventdata->callback = args->onclick; + eventdata->userdata = args->onclickdata; eventdata->obj = obj; eventdata->value = 0; XtAddCallback( @@ -96,7 +96,7 @@ event->callback(&e, event->userdata); } -UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) { Arg xargs[16]; int n = 0; @@ -108,25 +108,25 @@ XtSetArg(xargs[n], XmNindicatorOn, False); n++; XmString label = NULL; - if(args.label) { - label = XmStringCreateLocalized((char*)args.label); + if(args->label) { + label = XmStringCreateLocalized((char*)args->label); XtSetArg(xargs[n], XmNlabelString, label); n++; } - char *name = args.name ? (char*)args.name : "togglebutton"; + char *name = args->name ? (char*)args->name : "togglebutton"; Widget button = XmCreateToggleButton(parent, name, xargs, n); XtManageChild(button); ctn->add(ctn, button); - ui_set_widget_groups(obj->ctx, button, args.groups); + ui_set_widget_groups(obj->ctx, button, args->groups); - ui_bind_togglebutton(obj, button, args.varname, args.value, args.onchange, args.onchangedata, args.enable_group); + ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_group); XmStringFree(label); return button; } -UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) { Arg xargs[16]; int n = 0; @@ -136,25 +136,25 @@ Widget parent = ctn->prepare(ctn, xargs, &n); XmString label = NULL; - if(args.label) { - label = XmStringCreateLocalized((char*)args.label); + if(args->label) { + label = XmStringCreateLocalized((char*)args->label); XtSetArg(xargs[n], XmNlabelString, label); n++; } - char *name = args.name ? (char*)args.name : "button"; + char *name = args->name ? (char*)args->name : "button"; Widget button = XmCreateToggleButton(parent, name, xargs, n); XtManageChild(button); ctn->add(ctn, button); - ui_set_widget_groups(obj->ctx, button, args.groups); + ui_set_widget_groups(obj->ctx, button, args->groups); - ui_bind_togglebutton(obj, button, args.varname, args.value, args.onchange, args.onchangedata, args.enable_group); + ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_group); XmStringFree(label); return button; } -UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) { return ui_checkbox_create(obj, args); } @@ -343,7 +343,7 @@ event); } -UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) { +UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) { Arg xargs[16]; int n = 0; @@ -353,19 +353,19 @@ Widget parent = ctn->prepare(ctn, xargs, &n); XtSetArg(xargs[n], XmNindicatorType, XmONE_OF_MANY_ROUND); n++; XmString label = NULL; - if(args.label) { - label = XmStringCreateLocalized((char*)args.label); + if(args->label) { + label = XmStringCreateLocalized((char*)args->label); XtSetArg(xargs[n], XmNlabelString, label); n++; } - char *name = args.name ? (char*)args.name : "button"; + char *name = args->name ? (char*)args->name : "button"; Widget button = XmCreateToggleButton(parent, name, xargs, n); XtManageChild(button); ctn->add(ctn, button); - ui_set_widget_groups(obj->ctx, button, args.groups); + ui_set_widget_groups(obj->ctx, button, args->groups); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER); if(var) { UiInteger *value = var->value; CxList *rb = value->obj; @@ -396,11 +396,11 @@ // other buttons in the radio button group UiVarEventData *event = malloc(sizeof(UiVarEventData)); event->obj = obj; - event->callback = args.onchange; - event->userdata = args.onchangedata; + event->callback = args->onchange; + event->userdata = args->onchangedata; event->observers = NULL; event->var = var; - event->value = args.enable_group; + event->value = args->enable_group; XtAddCallback( button, XmNvalueChangedCallback,
--- a/ui/motif/container.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/container.c Thu May 29 13:23:11 2025 +0200 @@ -43,7 +43,7 @@ /* ---------------------------- Box Container ---------------------------- */ -static UIWIDGET box_create(UiObject *obj, UiContainerArgs args, UiBoxOrientation orientation) { +static UIWIDGET box_create(UiObject *obj, UiContainerArgs *args, UiBoxOrientation orientation) { UiContainerPrivate *ctn = ui_obj_container(obj); UI_APPLY_LAYOUT(ctn->layout, args); @@ -51,13 +51,13 @@ int n = 0; if(orientation == UI_BOX_VERTICAL) { - //XtSetArg(xargs[n], gridRowSpacing, args.spacing); n++; + //XtSetArg(xargs[n], gridRowSpacing, args->spacing); n++; } else { - //XtSetArg(xargs[n], gridColumnSpacing, args.spacing); n++; + //XtSetArg(xargs[n], gridColumnSpacing, args->spacing); n++; } Widget parent = ctn->prepare(ctn, xargs, &n); - Widget grid = XtCreateManagedWidget(args.name ? args.name : "boxcontainer", gridClass, parent, xargs, n); + Widget grid = XtCreateManagedWidget(args->name ? args->name : "boxcontainer", gridClass, parent, xargs, n); ctn->add(ctn, grid); UiContainerX *container = ui_box_container(obj, grid, orientation); @@ -67,12 +67,12 @@ } // public -UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) { +UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) { return box_create(obj, args, UI_BOX_VERTICAL); } // public -UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) { +UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) { return box_create(obj, args, UI_BOX_HORIZONTAL); } @@ -129,7 +129,7 @@ /* ---------------------------- Grid Container ---------------------------- */ // public -UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) { +UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) { Arg xargs[16]; int n = 0; @@ -137,13 +137,13 @@ UI_APPLY_LAYOUT(ctn->layout, args); Widget parent = ctn->prepare(ctn, xargs, &n); - XtSetArg(xargs[n], gridMargin, args.margin); n++; - XtSetArg(xargs[n], gridColumnSpacing, args.columnspacing); n++; - XtSetArg(xargs[n], gridRowSpacing, args.rowspacing); n++; - Widget grid = XtCreateManagedWidget(args.name ? args.name : "gridcontainer", gridClass, parent, xargs, n); + XtSetArg(xargs[n], gridMargin, args->margin); n++; + XtSetArg(xargs[n], gridColumnSpacing, args->columnspacing); n++; + XtSetArg(xargs[n], gridRowSpacing, args->rowspacing); n++; + Widget grid = XtCreateManagedWidget(args->name ? args->name : "gridcontainer", gridClass, parent, xargs, n); ctn->add(ctn, grid); - UiContainerX *container = ui_grid_container(obj, grid, args.def_hexpand, args.def_vexpand, args.def_hfill, args.def_vfill); + UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill); uic_object_push_container(obj, container); return grid; @@ -308,7 +308,7 @@ } } -UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) { +UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) { Arg xargs[16]; int n = 0; @@ -321,7 +321,7 @@ // - content (Frame) UiMotifTabView *tabview = malloc(sizeof(UiMotifTabView)); memset(tabview, 0, sizeof(UiMotifTabView)); - char *name = args.name ? (char*)args.name : "tabview"; + char *name = args->name ? (char*)args->name : "tabview"; XtSetArg(xargs[n], XmNuserData, tabview); n++; Widget parent = ctn->prepare(ctn, xargs, &n); Widget form = XmCreateForm(parent, name, xargs, n); @@ -354,8 +354,8 @@ tabview->form = form; tabview->tabbar = tabbar; tabview->content = content; - tabview->tabview = args.tabview; - tabview->subcontainer = args.subcontainer; + tabview->tabview = args->tabview; + tabview->subcontainer = args->subcontainer; tabview->select = ui_motif_tabview_select; tabview->add = ui_motif_tabview_add_tab; tabview->remove = ui_motif_tabview_remove; @@ -369,7 +369,7 @@ ct->container.add = ui_tabview_container_add; ct->tabview = tabview; - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER); if(var) { UiInteger *i = var->value; i->obj = tabview; @@ -411,7 +411,7 @@ } - Widget child = ui_vbox_create(obj, (UiContainerArgs) { 0 }); + Widget child = ui_vbox_create(obj, &(UiContainerArgs) { 0 }); if(tabview->current) { XtUnmanageChild(child); } else { @@ -605,7 +605,7 @@ return (UiContainerX*)ctn; } -UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) { +UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) { UiContainerPrivate *ctn = ui_obj_container(obj); UI_APPLY_LAYOUT(ctn->layout, args);
--- a/ui/motif/container.h Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/container.h Thu May 29 13:23:11 2025 +0200 @@ -39,14 +39,14 @@ #endif #define UI_APPLY_LAYOUT(layout, args) \ - layout.fill = args.fill; \ - layout.hexpand = args.hexpand; \ - layout.vexpand = args.vexpand; \ - layout.hfill = args.hfill; \ - layout.vfill = args.vfill; \ - layout.override_defaults = args.override_defaults; \ - layout.colspan = args.colspan; \ - layout.rowspan = args.rowspan + layout.fill = args->fill; \ + layout.hexpand = args->hexpand; \ + layout.vexpand = args->vexpand; \ + layout.hfill = args->hfill; \ + layout.vfill = args->vfill; \ + layout.override_defaults = args->override_defaults; \ + layout.colspan = args->colspan; \ + layout.rowspan = args->rowspan typedef enum UiBoxOrientation UiBoxOrientation;
--- a/ui/motif/label.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/label.c Thu May 29 13:23:11 2025 +0200 @@ -36,7 +36,7 @@ #include "Grid.h" -static UIWIDGET label_create(UiObject *obj, UiLabelArgs args, int align) { +static UIWIDGET label_create(UiObject *obj, UiLabelArgs *args, int align) { Arg xargs[16]; int n = 0; @@ -47,12 +47,12 @@ XtSetArg(xargs[n], XmNalignment, align); n++; XmString label = NULL; - if(args.label) { - label = XmStringCreateLocalized((char*)args.label); + if(args->label) { + label = XmStringCreateLocalized((char*)args->label); XtSetArg(xargs[n], XmNlabelString, label); n++; } - char *name = args.name ? (char*)args.name : "label"; + char *name = args->name ? (char*)args->name : "label"; Widget w = XmCreateLabel(parent, name, xargs, n); XtManageChild(w); ctn->add(ctn, w); @@ -61,15 +61,15 @@ return w; } -UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) { +UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) { return label_create(obj, args, XmALIGNMENT_CENTER); } -UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) { +UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) { return label_create(obj, args, XmALIGNMENT_BEGINNING); } -UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) { +UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) { return label_create(obj, args, XmALIGNMENT_END); } @@ -103,7 +103,7 @@ XFillRectangle(dp, w, pb->gc, 0, 0, valueW, widget->core.height); } -UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) { +UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) { Arg xargs[16]; int n = 0; @@ -112,7 +112,7 @@ Widget parent = ctn->prepare(ctn, xargs, &n); - char *name = args.name ? (char*)args.name : "progressbar"; + char *name = args->name ? (char*)args->name : "progressbar"; Widget frame = XmCreateFrame(parent, name, xargs, n); // create a button and get some informations about the height, shadow, highlight, .... @@ -137,12 +137,12 @@ Widget drawingArea = XmCreateDrawingArea(frame, "progressbar_drawingarea", xargs, n); XtManageChild(drawingArea); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_DOUBLE); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_DOUBLE); UiProgressBar *progressbarData = malloc(sizeof(UiProgressBar)); progressbarData->widget = drawingArea; - progressbarData->min = args.min; - progressbarData->max = args.max == 0 ? 100 : args.max; + progressbarData->min = args->min; + progressbarData->max = args->max == 0 ? 100 : args->max; progressbarData->value = 50; progressbarData->var = var; progressbarData->color = highlightColor; @@ -186,7 +186,7 @@ } -UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) { +UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args) { Arg xargs[16]; int n = 0; @@ -200,12 +200,12 @@ XtSetArg(xargs[n], XmNalignment, XmALIGNMENT_END); n++; XtSetArg(xargs[n], gridMinWidth, 40); n++; - char *name = args.name ? (char*)args.name : "progresss_spinner"; + char *name = args->name ? (char*)args->name : "progresss_spinner"; Widget w = XmCreateLabel(parent, name, xargs, n); XtManageChild(w); ctn->add(ctn, w); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER); if(var) { UiInteger *value = var->value; value->obj = w;
--- a/ui/motif/list.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/list.c Thu May 29 13:23:11 2025 +0200 @@ -34,36 +34,36 @@ #include "list.h" #include "../common/object.h" -UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) { +UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args) { Arg xargs[16]; int n = 0; UiContainerPrivate *ctn = ui_obj_container(obj); UI_APPLY_LAYOUT(ctn->layout, args); - if(args.multiselection) { + if(args->multiselection) { XtSetArg(xargs[n], XmNselectionPolicy, XmEXTENDED_SELECT); n++; } else { XtSetArg(xargs[n], XmNselectionPolicy, XmSINGLE_SELECT); n++; } - char *name = args.name ? (char*)args.name : "listview"; + char *name = args->name ? (char*)args->name : "listview"; Widget parent = ctn->prepare(ctn, xargs, &n); Widget widget = XmCreateScrolledList(parent, name, xargs, n); XtManageChild(widget); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); UiListView *listview = malloc(sizeof(UiListView)); memset(listview, 0, sizeof(UiListView)); listview->obj = obj; listview->widget = widget; - listview->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; + listview->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; listview->var = var; - listview->onactivate = args.onactivate; - listview->onactivatedata = args.onactivatedata; - listview->onselection = args.onselection; - listview->onselectiondata = args.onselectiondata; + listview->onactivate = args->onactivate; + listview->onactivatedata = args->onactivatedata; + listview->onselection = args->onselection; + listview->onselectiondata = args->onselectiondata; if(var) { UiList *list = var->value; @@ -227,30 +227,30 @@ } } -UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs args) { +UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs *args) { Arg xargs[16]; int n = 0; UiContainerPrivate *ctn = ui_obj_container(obj); UI_APPLY_LAYOUT(ctn->layout, args); - char *name = args.name ? (char*)args.name : "dropdown"; + char *name = args->name ? (char*)args->name : "dropdown"; Widget parent = ctn->prepare(ctn, xargs, &n); Widget widget = XmCreateDropDownList(parent, name, xargs, n); XtManageChild(widget); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST); UiListView *listview = malloc(sizeof(UiListView)); memset(listview, 0, sizeof(UiListView)); listview->obj = obj; listview->widget = widget; - listview->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue; + listview->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue; listview->var = var; - listview->onactivate = args.onactivate; - listview->onactivatedata = args.onactivatedata; - listview->onselection = args.onselection; - listview->onselectiondata = args.onselectiondata; + listview->onactivate = args->onactivate; + listview->onactivatedata = args->onactivatedata; + listview->onselection = args->onselection; + listview->onselectiondata = args->onselectiondata; if(var) { UiList *list = var->value;
--- a/ui/motif/text.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/text.c Thu May 29 13:23:11 2025 +0200 @@ -38,7 +38,7 @@ /* ------------------------------ Text Area ------------------------------ */ -UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { +UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { Arg xargs[16]; int n = 0; @@ -48,12 +48,12 @@ UI_APPLY_LAYOUT(ctn->layout, args); Widget parent = ctn->prepare(ctn, xargs, &n); - char *name = args.name ? (char*)args.name : "textarea"; + char *name = args->name ? (char*)args->name : "textarea"; XtSetArg(xargs[n], XmNwidth, 100); n++; Widget widget = XmCreateScrolledText(parent, name, xargs, n); XtManageChild(widget); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_TEXT); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT); UiTextArea *textarea = malloc(sizeof(UiTextArea)); memset(textarea, 0, sizeof(UiTextArea)); @@ -383,7 +383,7 @@ /* ------------------------------ Text Field ------------------------------ */ -static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, int frameless, int password) { +static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, int frameless, int password) { Arg xargs[16]; int n = 0; @@ -399,13 +399,13 @@ UI_APPLY_LAYOUT(ctn->layout, args); Widget parent = ctn->prepare(ctn, xargs, &n); - char *name = args.name ? (char*)args.name : "textfield"; + char *name = args->name ? (char*)args->name : "textfield"; Widget textfield = XmCreateTextField(parent, name, xargs, n); XtManageChild(textfield); - ui_set_widget_groups(obj->ctx, textfield, args.groups); + ui_set_widget_groups(obj->ctx, textfield, args->groups); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); if(var) { UiString *value = (UiString*)var->value; value->obj = textfield; @@ -420,15 +420,15 @@ return textfield; } -UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) { +UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { return create_textfield(obj, args, FALSE, FALSE); } -UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, args, TRUE, FALSE); } -UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, args, FALSE, FALSE); } @@ -965,7 +965,7 @@ event->callback(&evt, event->userdata); } -UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { +UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { Arg xargs[16]; int n = 0; @@ -977,18 +977,18 @@ PathBar *pathbar = CreatePathBar(parent, xargs, n); - if(!args.getpathelm) { + if(!args->getpathelm) { pathbar->getpathelm= default_pathelm_func; } else { - pathbar->getpathelm = args.getpathelm; - pathbar->getpathelmdata = args.getpathelmdata; + pathbar->getpathelm = args->getpathelm; + pathbar->getpathelmdata = args->getpathelmdata; } XtManageChild(pathbar->widget); ctn->add(ctn, pathbar->widget); - UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); if (var) { UiString* value = (UiString*)var->value; value->obj = pathbar; @@ -1002,10 +1002,10 @@ } } - if(args.onactivate) { + if(args->onactivate) { UiEventData *eventdata = malloc(sizeof(UiEventData)); - eventdata->callback = args.onactivate; - eventdata->userdata = args.onactivatedata; + eventdata->callback = args->onactivate; + eventdata->userdata = args->onactivatedata; eventdata->obj = obj; eventdata->value = 0;
--- a/ui/motif/widget.c Thu May 29 12:03:32 2025 +0200 +++ b/ui/motif/widget.c Thu May 29 13:23:11 2025 +0200 @@ -37,7 +37,7 @@ #include "../common/object.h" -UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) { +UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) { Arg xargs[64]; int n = 0; @@ -56,12 +56,11 @@ UIEXPORT UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args) { Arg xargs[64]; int n = 0; - UiWidgetArgs a = *args; UiContainerPrivate *ctn = ui_obj_container(obj); - UI_APPLY_LAYOUT(ctn->layout, a); + UI_APPLY_LAYOUT(ctn->layout, args); - char *name = a.name ? (char*)a.name : "separator"; + char *name = args->name ? (char*)args->name : "separator"; Widget parent = ctn->prepare(ctn, xargs, &n); Widget widget = XmCreateSeparator(parent, name, xargs, n); XtManageChild(widget);
--- a/ui/ui/widget.h Thu May 29 12:03:32 2025 +0200 +++ b/ui/ui/widget.h Thu May 29 13:23:11 2025 +0200 @@ -48,21 +48,21 @@ } UiWidgetArgs; #ifdef UI_GTK -typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata); #elif defined(UI_QT) -typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata); #elif defined(UI_MOTIF) -typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata, Widget parent, Arg *a, int n); +typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata, Widget parent, Arg *a, int n); #elif defined(UI_COCOA) -typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata); #elif defined(UI_WINUI) -typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata); #elif defined(UI_WIN32) -typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata); +typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata); #endif -UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args); +UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args); -#define ui_customwidget(obj, create_widget, userdata, ...) ui_customwidget_create(obj, create_widget, userdata, (UiWidgetArgs) { __VA_ARGS__ }) +#define ui_customwidget(obj, create_widget, userdata, ...) ui_customwidget_create(obj, create_widget, userdata, &(UiWidgetArgs) { __VA_ARGS__ }) UIEXPORT UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args);