ui/motif/button.c

changeset 1152
f560b35c8ca1
parent 1064
f415387fff6f
--- 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;

mercurial