Sat, 04 Oct 2025 14:43:18 +0200
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;