--- a/ui/cocoa/button.m Mon Apr 20 21:19:13 2026 +0200 +++ b/ui/cocoa/button.m Tue Apr 21 10:11:44 2026 +0200 @@ -30,6 +30,7 @@ #import "EventData.h" #import "container.h" #import "image.h" +#import "action.h" #import <objc/runtime.h> #import <cx/buffer.h> @@ -47,7 +48,7 @@ } if(args->onclick) { - EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata]; + EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata action:args->action]; event.obj = obj; button.target = event; button.action = @selector(handleEvent:); @@ -88,8 +89,8 @@ i->set = ui_togglebutton_set; } - if(args->onchange) { - EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; + if(args->onchange || args->action) { + EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action]; event.get_eventdata = togglebutton_eventdata; event.obj = obj; event.var = var; @@ -97,6 +98,8 @@ button.target = event; button.action = @selector(handleEventWithEventData:); objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); + + ui_cocoa_view_bind_action(obj->ctx, button, args->action); } UiLayout layout = UI_INIT_LAYOUT(args); @@ -149,8 +152,8 @@ i->set = ui_switch_set; } - if(args->onchange) { - EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; + if(args->onchange || args->action) { + EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action]; event.get_eventdata = switch_eventdata; event.obj = obj; event.var = var; @@ -158,6 +161,7 @@ button.target = event; button.action = @selector(handleEventWithEventData:); objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); + ui_cocoa_view_bind_action(obj->ctx, button, args->action); } UiLayout layout = UI_INIT_LAYOUT(args); @@ -238,18 +242,19 @@ objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN); } - if(args->onchange || var) { - EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata]; + if(args->onchange || args->action || var) { + EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata action:args->action]; event.get_eventdata = radiobutton_eventdata; event.obj = obj; event.var = var; event.vartype = UI_VAR_INTEGER; button.target = event; - button.action = @selector(handleEventWithEventData:); objc_setAssociatedObject(button, "eventdata", event, OBJC_ASSOCIATION_RETAIN); + + ui_cocoa_view_bind_action(obj->ctx, button, args->action); } UiLayout layout = UI_INIT_LAYOUT(args);