--- a/ui/gtk/button.c Fri Apr 24 18:17:20 2026 +0200 +++ b/ui/gtk/button.c Sat Apr 25 21:29:37 2026 +0200 @@ -188,7 +188,14 @@ e.eventdatatype = 0; e.intval = gtk_toggle_button_get_active(widget); e.set = ui_get_setop(); - event->callback(&e, event->userdata); + + if(event->callback) { + event->callback(&e, event->userdata); + } + + if(event->action) { + uic_action_callback(&e, event->action); + } } static void ui_togglebutton_enable_state_callback(GtkToggleButton *widget, UiEventData *event) { @@ -209,6 +216,7 @@ UiInteger *value, ui_callback onchange, void *onchangedata, + const char *action, int enable_state) { if(label) { @@ -219,6 +227,14 @@ gtk_widget_set_tooltip_text(togglebutton, tooltip); } + if(action) { + uic_bind_action(obj->ctx, action, togglebutton, (ui_enablefunc)ui_set_enabled); + UiAction *ui_action = uic_resolve_action(obj->ctx, action); + if(!ui_action) { + ui_set_enabled(togglebutton, FALSE); + } + } + ui_bind_togglebutton( obj, togglebutton, @@ -229,6 +245,7 @@ (ui_toggled_func)ui_toggled_callback, onchange, onchangedata, + action, (ui_toggled_func)ui_togglebutton_enable_state_callback, enable_state ); @@ -244,6 +261,7 @@ void (*toggled_callback)(void*, void*), ui_callback onchange, void *onchangedata, + const char *action, void (*enable_state_func)(void*, void*), int enable_state) { @@ -280,6 +298,7 @@ event->obj = obj; event->userdata = onchangedata; event->callback = onchange; + event->action = action ? strdup(action) : NULL, event->value = 0; event->customdata = NULL; event->customint = 0; @@ -292,10 +311,10 @@ g_signal_connect( widget, "destroy", - G_CALLBACK(ui_destroy_userdata), + G_CALLBACK(ui_destroy_eventdata), event); } - + if(enable_state > 0) { UiEventData *event = malloc(sizeof(UiEventData)); event->obj = obj; @@ -329,6 +348,7 @@ args->value, args->onchange, args->onchangedata, + args->action, args->enable_state); ui_set_name_and_style(widget, args->name, args->style_class); ui_set_widget_states(obj->ctx, widget, args->states); @@ -391,6 +411,7 @@ (ui_toggled_func)ui_checkbox_callback, args->onchange, args->onchangedata, + args->action, (ui_toggled_func)ui_checkbox_enable_state, args->enable_state);