--- a/ui/motif/button.c Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/button.c Fri May 29 22:43:47 2026 +0200 @@ -32,6 +32,7 @@ #include "button.h" #include "container.h" #include "../common/context.h" +#include "../common/action.h" #include <cx/mempool.h> #include <cx/linked_list.h> @@ -70,6 +71,7 @@ eventdata->userdata = args->onclickdata; eventdata->obj = obj; eventdata->value = 0; + eventdata->action = args->action ? strdup(args->action) : NULL; XtAddCallback( button, XmNactivateCallback, @@ -78,7 +80,7 @@ XtAddCallback( button, XmNdestroyCallback, - (XtCallbackProc)ui_destroy_data, + (XtCallbackProc)ui_destroy_event_data, eventdata); } @@ -95,6 +97,10 @@ e.intval = event->value; e.set = 0; event->callback(&e, event->userdata); + + if(event->action) { + uic_action_callback(&e, event->action); + } } UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) { @@ -122,7 +128,7 @@ ui_set_widget_groups(obj->ctx, button, args->states); - ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_state); + ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->action, args->enable_state); XmStringFree(label); return button; @@ -151,7 +157,7 @@ ui_set_widget_groups(obj->ctx, button, args->states); - ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_state); + ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->action, args->enable_state); XmStringFree(label); return button; @@ -184,6 +190,10 @@ event->callback(&e, event->userdata); } + if(event->action) { + uic_action_callback(&e, event->action); + } + if(event->var && event->var->value) { UiInteger *v = event->var->value; v->value = e.intval; @@ -198,6 +208,7 @@ UiInteger *value, ui_callback onchange, void *onchangedata, + const char *action, int enable_state) { UiVar* var = uic_widget_var(obj->ctx, obj->ctx, value, varname, UI_VAR_INTEGER); @@ -216,6 +227,7 @@ event->obj = obj; event->callback = onchange; event->userdata = onchangedata; + event->action = action ? strdup(action) : NULL; event->var = var; event->observers = NULL; event->value = enable_state; @@ -227,7 +239,7 @@ XtAddCallback( widget, XmNdestroyCallback, - (XtCallbackProc)ui_destroy_data, + (XtCallbackProc)ui_destroy_var_event_data, event); } @@ -294,12 +306,16 @@ event->callback(&e, event->userdata); } + if(event->action) { + uic_action_callback(&e, event->action); + } + if(value) { ui_notify_evt(value->observers, &e); } } -void ui_bind_radiobutton(UiObject *obj, Widget rbutton, UiInteger *value, const char *varname, ui_callback onchange, void *onchangedata, int enable_group) { +void ui_bind_radiobutton(UiObject *obj, Widget rbutton, UiInteger *value, const char *varname, ui_callback onchange, void *onchangedata, const char *action, int enable_group) { UiVar* var = uic_widget_var(obj->ctx, obj->ctx, value, varname, UI_VAR_INTEGER); if(var) { UiInteger *value = var->value; @@ -333,6 +349,7 @@ event->obj = obj; event->callback = onchange; event->userdata = onchangedata; + event->action = action ? strdup(action) : NULL; event->observers = NULL; event->var = var; event->value = enable_group; @@ -404,6 +421,7 @@ event->obj = obj; event->callback = args->onchange; event->userdata = args->onchangedata; + event->action = args->action ? strdup(args->action) : NULL; event->observers = NULL; event->var = var; event->value = args->enable_state;