ui/gtk/menu.c

changeset 117
b174e721663e
parent 115
e57ca2747782
--- a/ui/gtk/menu.c	Wed Dec 17 22:36:41 2025 +0100
+++ b/ui/gtk/menu.c	Sat Dec 27 22:47:56 2025 +0100
@@ -130,7 +130,7 @@
     gtk_menu_shell_append(GTK_MENU_SHELL(parent), widget);
     
     if(i->states) {
-        CxList *states = cxArrayListCreateSimple(sizeof(int), i->nstates);
+        CxList *states = cxArrayListCreate(NULL, sizeof(int), i->nstates);
         cxListAddArray(states, i->states, i->nstates);
         uic_add_state_widget(obj->ctx, widget, (ui_enablefunc)ui_set_enabled, states);
         cxListFree(states);
@@ -220,7 +220,7 @@
         // binding object is a list of all connected UiActiveMenuItemList.
         CxList *bindings = list->obj;
         if(!bindings) {
-            bindings = cxLinkedListCreate(var->from_ctx->mp->allocator, NULL, CX_STORE_POINTERS);
+            bindings = cxLinkedListCreate(var->from_ctx->mp->allocator, CX_STORE_POINTERS);
             list->obj = bindings;
         }
         cxListAdd(bindings, ls);
@@ -463,7 +463,7 @@
     g_object_unref(action);
     
     if(i->states) {
-        CxList *groups = cxArrayListCreateSimple(sizeof(int), i->nstates);
+        CxList *groups = cxArrayListCreate(NULL, sizeof(int), i->nstates);
         cxListAddArray(groups, i->states, i->nstates);
         uic_add_state_widget(obj->ctx, action, (ui_enablefunc)action_enable, groups);
         cxListFree(groups);
@@ -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) {
@@ -569,7 +572,7 @@
 
 static UiMenuRadioGroup* create_radio_group(UiObject *obj, UiMenuRadioItem *item, GSimpleAction *action) {
     UiMenuRadioGroup *group = cxZalloc(obj->ctx->allocator, sizeof(UiMenuRadioGroup));
-    group->callbacks = cxArrayListCreate(obj->ctx->allocator, NULL, sizeof(UiCallbackData), 8);
+    group->callbacks = cxArrayListCreate(obj->ctx->allocator, sizeof(UiCallbackData), 8);
     group->var = uic_create_var(ui_global_context(), item->varname, UI_VAR_INTEGER);
     group->obj = obj;
     group->action = action;
@@ -577,7 +580,7 @@
         UiInteger *i = group->var->value;
         CxList *bindings = i->obj;
         if(!bindings) {
-            bindings = cxLinkedListCreate(group->var->from_ctx->mp->allocator, NULL, CX_STORE_POINTERS);
+            bindings = cxLinkedListCreate(group->var->from_ctx->mp->allocator, CX_STORE_POINTERS);
             i->obj = bindings;
             i->set = ui_action_set_state;
             i->get = ui_action_get_state;
@@ -711,7 +714,7 @@
         // binding object is a list of all connected UiActiveMenuItemList.
         CxList *bindings = list->obj;
         if(!bindings) {
-            bindings = cxLinkedListCreate(var->from_ctx->mp->allocator, NULL, CX_STORE_POINTERS);
+            bindings = cxLinkedListCreate(var->from_ctx->mp->allocator, CX_STORE_POINTERS);
             list->obj = bindings;
         }
         cxListAdd(bindings, ls);

mercurial