fix gtk4 menu radiobutton enumeration default tip

Sun, 24 May 2026 14:12:39 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 24 May 2026 14:12:39 +0200
changeset 1138
999911de398b
parent 1137
db9c3838fd4d

fix gtk4 menu radiobutton enumeration

application/main.c file | annotate | diff | comparison | revisions
ui/gtk/menu.c file | annotate | diff | comparison | revisions
--- a/application/main.c	Sun May 24 08:53:45 2026 +0200
+++ b/application/main.c	Sun May 24 14:12:39 2026 +0200
@@ -370,6 +370,8 @@
     doc->link_label = ui_string_new(docctx, "link_label");
     doc->link_uri = ui_string_new(docctx, "link_uri");
     
+    ui_int_new(docctx, "menu_radio");
+    
     //doc->text = ui_text_new(docctx, "text");
     return doc;
 }
@@ -624,7 +626,10 @@
 }
 
 static void action_menu_radio(UiEvent *event, void *userdata) {
-    printf("option: %d\n", event->intval);
+    if(event->intval) {
+        int i = ui_var_get_int(event->obj->ctx, "menu_radio");
+        printf("menu radio option: %d\n", i);
+    }
 }
 
 static void action_menu_toggle(UiEvent *event, void *userdata) {
@@ -899,11 +904,11 @@
         ui_menu_toggleitem(.label = "Toggle 1", .varname = "menu_toggle1", .onchange = action_menu_toggle);
         ui_menu_toggleitem(.label = "Toggle 2", .varname = "menu_toggle2", .onchange = action_menu_toggle);
         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 4", .varname = "menu_radio");
-        ui_menu_radioitem(.label = "Option 5", .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_menu_radioitem(.label = "Option 4", .varname = "menu_radio", .onchange = action_menu_radio);
+        ui_menu_radioitem(.label = "Option 5", .varname = "menu_radio", .onchange = action_menu_radio);
         ui_menuseparator();
     }
     
--- a/ui/gtk/menu.c	Sun May 24 08:53:45 2026 +0200
+++ b/ui/gtk/menu.c	Sun May 24 14:12:39 2026 +0200
@@ -677,7 +677,7 @@
     
     CxIterator iter = cxListIterator(group->callbacks);
     cx_foreach(UiCallbackData *, cb, iter) {
-        event.intval = intval == iter.index;
+        event.intval = intval-1 == iter.index;
         if(cb->callback) {
             cb->callback(&event, cb->userdata);
         }
@@ -801,7 +801,7 @@
     cxListAdd(group->callbacks, &cb);
     
     
-    cxmutstr action_name = cx_asprintf("win.%s::%d", i->varname, (int)item_index);
+    cxmutstr action_name = cx_asprintf("win.%s::%d", i->varname, (int)item_index+1);
     g_menu_append(parent, i->label, action_name.ptr);
     free(action_name.ptr);
 }

mercurial