Sat, 25 Apr 2026 21:29:37 +0200
implement actions for toggle buttons (GTK)
| ui/gtk/button.c | file | annotate | diff | comparison | revisions | |
| ui/gtk/button.h | file | annotate | diff | comparison | revisions | |
| ui/gtk/headerbar.c | file | annotate | diff | comparison | revisions |
--- 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);
--- a/ui/gtk/button.h Fri Apr 24 18:17:20 2026 +0200 +++ b/ui/gtk/button.h Sat Apr 25 21:29:37 2026 +0200 @@ -72,6 +72,7 @@ UiInteger *value, ui_callback onchange, void *onchangedata, + const char *action, int enable_state); void ui_bind_togglebutton( @@ -84,6 +85,7 @@ void (*toggled_callback)(void*, void*), ui_callback onchange, void *onchangedata, + const char *action, void (*enable_state_func)(void*, void*), int enable_state);
--- a/ui/gtk/headerbar.c Fri Apr 24 18:17:20 2026 +0200 +++ b/ui/gtk/headerbar.c Sat Apr 25 21:29:37 2026 +0200 @@ -181,7 +181,7 @@ ui_set_widget_states(obj->ctx, button, item->args.states); ui_set_widget_visibility_states(obj->ctx, button, item->args.visibility_states); WIDGET_ADD_CSS_CLASS(button, "flat"); - ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, 0); + ui_setup_togglebutton(obj, button, item->args.label, item->args.icon, item->args.tooltip, item->args.varname, NULL, item->args.onchange, item->args.onchangedata, item->args.action, 0); headerbar_add(headerbar, box, button, pos); }