Fri, 29 May 2026 22:43:47 +0200
implement buttion actions (Motif)
| ui/motif/button.c | file | annotate | diff | comparison | revisions | |
| ui/motif/button.h | file | annotate | diff | comparison | revisions | |
| ui/motif/menu.c | file | annotate | diff | comparison | revisions | |
| ui/motif/text.c | file | annotate | diff | comparison | revisions | |
| ui/motif/toolkit.c | file | annotate | diff | comparison | revisions | |
| ui/motif/toolkit.h | file | annotate | diff | comparison | revisions |
--- 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;
--- a/ui/motif/button.h Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/button.h Fri May 29 22:43:47 2026 +0200 @@ -45,12 +45,13 @@ UiInteger *value, ui_callback onchange, void *onchangedata, + const char *action, int enable_state); int64_t ui_togglebutton_get(UiInteger *i); void ui_togglebutton_set(UiInteger *i, int64_t value); -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); int64_t ui_radiobutton_get(UiInteger *i); void ui_radiobutton_set(UiInteger *i, int64_t value);
--- a/ui/motif/menu.c Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/menu.c Fri May 29 22:43:47 2026 +0200 @@ -179,7 +179,7 @@ XmStringFree(s); } - ui_bind_togglebutton(obj, checkbox, it->varname, NULL, it->callback, it->userdata, 0); + ui_bind_togglebutton(obj, checkbox, it->varname, NULL, it->callback, it->userdata, NULL, 0); ui_set_widget_groups(obj->ctx, checkbox, it->states); }
--- a/ui/motif/text.c Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/text.c Fri May 29 22:43:47 2026 +0200 @@ -98,6 +98,10 @@ var); } + if(args->onchange || args->action) { + + } + return widget; }
--- a/ui/motif/toolkit.c Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/toolkit.c Fri May 29 22:43:47 2026 +0200 @@ -348,6 +348,16 @@ free(data); } +void ui_destroy_event_data(Widget w, UiEventData *data, XtPointer d) { + free(data->action); + free(data); +} + +void ui_destroy_var_event_data(Widget w, UiVarEventData *data, XtPointer d) { + free(data->action); + free(data); +} + void ui_set_widget_groups(UiContext *ctx, Widget widget, const int *groups) { if(!groups) { return;
--- a/ui/motif/toolkit.h Fri May 29 15:49:51 2026 +0200 +++ b/ui/motif/toolkit.h Fri May 29 22:43:47 2026 +0200 @@ -44,6 +44,7 @@ void *userdata; int value; void *customdata; + char *action; } UiEventData; typedef struct UiEventDataExt { @@ -68,6 +69,7 @@ UiObserver **observers; ui_callback callback; void *userdata; + char *action; int value; } UiVarEventData; @@ -94,6 +96,10 @@ void ui_destroy_data(Widget w, XtPointer data, XtPointer d); +void ui_destroy_event_data(Widget w, UiEventData *data, XtPointer d); + +void ui_destroy_var_event_data(Widget w, UiVarEventData *data, XtPointer d); + void ui_set_widget_groups(UiContext *ctx, Widget widget, const int *groups) ; void ui_set_widget_ngroups(UiContext *ctx, Widget widget, const int *groups, size_t ngroups);