fix global menu list binding

Sat, 04 Oct 2025 14:43:18 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 04 Oct 2025 14:43:18 +0200
changeset 797
47008843b468
parent 796
4d04cb879daa
child 798
504c45926386

fix global menu list binding

application/main.c file | annotate | diff | comparison | revisions
ui/common/object.c file | annotate | diff | comparison | revisions
ui/gtk/menu.c file | annotate | diff | comparison | revisions
--- a/application/main.c	Sat Oct 04 12:29:44 2025 +0200
+++ b/application/main.c	Sat Oct 04 14:43:18 2025 +0200
@@ -202,6 +202,7 @@
     UiString *link;
     UiString *link_label;
     UiString *link_uri;
+    UiList *submenulist;
 } MyDocument;
 
 MyDocument *doc1;
@@ -307,6 +308,13 @@
 MyDocument* create_doc(void) {
     MyDocument *doc = ui_document_new(sizeof(MyDocument));
     UiContext *docctx = ui_document_context(doc);
+    doc->submenulist = ui_list_new(docctx, "sub_menulist");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 1");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 2");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 3");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 4");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 5");
+    ui_list_append(doc->submenulist, "Sub Menu List Item 6");
     doc->str1 = ui_string_new(docctx, "str1");
     doc->str1 = ui_string_new(docctx, "str2");
     doc->path = ui_string_new(docctx, "path");
@@ -832,6 +840,9 @@
         ui_menuseparator();
         ui_menu_itemlist(.varname = "menulist", .onselect=action_menu_list);
         ui_menuseparator();
+        ui_menu("Sub Menu List") {
+            ui_menu_itemlist(.varname = "sub_menulist");
+        }
         ui_menuitem("last", .onclick = action_add_menu_item);
     }
     
--- a/ui/common/object.c	Sat Oct 04 12:29:44 2025 +0200
+++ b/ui/common/object.c	Sat Oct 04 14:43:18 2025 +0200
@@ -136,6 +136,7 @@
     CxMempool *mp = cxMempoolCreateSimple(256);
     UiObject *obj = cxCalloc(mp->allocator, 1, sizeof(UiObject));
     obj->ctx = uic_context(obj, mp);
+    obj->ctx->parent = ui_global_context();
     uic_object_created(obj);
     return obj;
 }
--- a/ui/gtk/menu.c	Sat Oct 04 12:29:44 2025 +0200
+++ b/ui/gtk/menu.c	Sat Oct 04 14:43:18 2025 +0200
@@ -576,8 +576,12 @@
     ls->oldcount = 0;
     ls->getvalue = il->getvalue;
     
-    //UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST);
-    UiVar* var = uic_create_var(obj->ctx, il->varname, UI_VAR_LIST);
+    GSimpleAction *action = g_simple_action_new(item->id, g_variant_type_new("i"));
+    g_action_map_add_action(obj->ctx->action_map, G_ACTION(action));
+    snprintf(ls->action, 32, "win.%s", item->id);
+    
+    UiVar* var = uic_create_var(ui_global_context(), il->varname, UI_VAR_LIST);
+    //UiVar* var = uic_create_var(obj->ctx, il->varname, UI_VAR_LIST);
     ls->var = var;
     if(var) {
         UiList *list = var->value;
@@ -604,10 +608,6 @@
     ls->callback = il->callback;
     ls->userdata = il->userdata;
     
-    GSimpleAction *action = g_simple_action_new(item->id, g_variant_type_new("i"));
-    g_action_map_add_action(obj->ctx->action_map, G_ACTION(action));
-    snprintf(ls->action, 32, "win.%s", item->id);
-    
     
     UiEventData *event = malloc(sizeof(UiEventData));
     event->obj = obj;
@@ -650,6 +650,10 @@
     UiVar *var = event->customdata;
     UiList *list = var->value;
     
+    if(!event->callback) {
+        return;
+    }
+    
     UiEvent evt;
     evt.obj = event->obj;
     evt.window = event->obj->window;

mercurial