Tue, 27 Jan 2026 12:23:40 +0100
create all menus in ui_create_main_menu (Win32)
| application/main.c | file | annotate | diff | comparison | revisions | |
| ui/win32/menu.c | file | annotate | diff | comparison | revisions |
--- a/application/main.c Sun Jan 25 16:27:12 2026 +0100 +++ b/application/main.c Tue Jan 27 12:23:40 2026 +0100 @@ -1238,6 +1238,8 @@ #ifdef UI_WIN32 +static UiList *menu_list; + static void action_button(UiEvent *event, void *data) { printf("button clicked\n"); } @@ -1301,12 +1303,23 @@ ui_show(obj); } +void action_menu_item(UiEvent *event, void *userdata) { + printf("menu item clicked\n"); +} + int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //int main() { ui_init("app1", 0, NULL); + menu_list = ui_list_new(ui_global_context(), "menulist"); + ui_list_append(menu_list, "List Item 0"); + ui_list_append(menu_list, "List Item 1"); + ui_list_append(menu_list, "List Item 2"); + ui_list_append(menu_list, "List Item 3"); + ui_list_append(menu_list, "List Item 4"); + ui_menu("File") { - ui_menuitem("Open"); + ui_menuitem("Open", .onclick = action_menu_item); ui_menu_toggleitem("Test"); ui_menuseparator(); ui_menu_radioitem(.label = "Option 1", .varname = "radio"); @@ -1316,6 +1329,13 @@ ui_menuseparator(); ui_menuitem("Close"); } + ui_menu("Test") { + ui_menuitem("Item 0"); + ui_menuseparator(); + ui_menu_itemlist(.varname = "menulist"); + ui_menuseparator(); + ui_menuitem("Item X"); + } ui_onstartup(application_startup, NULL);
--- a/ui/win32/menu.c Sun Jan 25 16:27:12 2026 +0100 +++ b/ui/win32/menu.c Tue Jan 27 12:23:40 2026 +0100 @@ -49,8 +49,11 @@ } HMENU hMenu = CreateMenu(); - ui_add_menu(hMenu, 0, &menu->item, obj); - + while (menu) { + ui_add_menu(hMenu, 0, &menu->item, obj); + UiMenuItemI *next = menu->item.next; + menu = next && next->type == UI_MENU ? (UiMenu*)next : NULL; + } return hMenu;