change intval in menu radio button onchange event to contain the button state

Tue, 23 Dec 2025 18:24:04 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 23 Dec 2025 18:24:04 +0100
changeset 1020
cae4af417424
parent 1019
9fe8bff5c652
child 1021
fa372f87cf54

change intval in menu radio button onchange event to contain the button state

application/main.c file | annotate | diff | comparison | revisions
ui/gtk/menu.c file | annotate | diff | comparison | revisions
--- a/application/main.c	Mon Dec 22 09:19:24 2025 +0100
+++ b/application/main.c	Tue Dec 23 18:24:04 2025 +0100
@@ -616,6 +616,10 @@
     ui_draw_rect(g, (g->width/2)-80, (g->height/2)-40, 160, 80, FALSE);
 }
 
+static void action_menu_radio(UiEvent *event, void *userdata) {
+    printf("option: %d\n", event->intval);
+}
+
 void application_startup(UiEvent *event, void *data) {
     // global list
     UiContext *global = ui_global_context();
@@ -898,9 +902,9 @@
         ui_menuitem("Save");
         
         ui_menuseparator();
-        ui_menu_radioitem(.label = "Option 1", .varname = "menu_radio");
-        ui_menu_radioitem(.label = "Option 2", .varname = "menu_radio");
-        ui_menu_radioitem(.label = "Option 3", .varname = "menu_radio");
+        ui_menu_radioitem(.label = "Option 1", .varname = "menu_radio", .onchange = action_menu_radio);
+        ui_menu_radioitem(.label = "Option 2", .varname = "menu_radio", .onchange = action_menu_radio);
+        ui_menu_radioitem(.label = "Option 3", .varname = "menu_radio", .onchange = action_menu_radio);
         ui_menuseparator();
         
         ui_menuitem("Close");
--- a/ui/gtk/menu.c	Mon Dec 22 09:19:24 2025 +0100
+++ b/ui/gtk/menu.c	Tue Dec 23 18:24:04 2025 +0100
@@ -525,22 +525,25 @@
 }
 
 static void stateful_action_notify_group(UiMenuRadioGroup *group, UiInteger *i) {
+    int intval = ui_get(i);
+    
     UiEvent event;
     event.obj = group->obj;
     event.window = event.obj->window;
     event.document = event.obj->ctx->document;
     event.eventdata = NULL;
     event.eventdatatype = 0;
-    event.intval = (int)i->value;
     event.set = ui_get_setop();
     
     CxIterator iter = cxListIterator(group->callbacks);
     cx_foreach(UiCallbackData *, cb, iter) {
+        event.intval = intval == iter.index;
         if(cb->callback) {
             cb->callback(&event, cb->userdata);
         }
     }
     
+    event.intval = intval;
     UiObserver *obs = i->observers;
     while(obs) {
         if(obs->callback) {

mercurial