diff -r 7ebc5a747c6f -r 93b9f502cb88 ui/common/toolbar.c --- a/ui/common/toolbar.c Wed Oct 11 10:54:24 2023 +0200 +++ b/ui/common/toolbar.c Wed Oct 11 19:11:38 2023 +0200 @@ -34,6 +34,9 @@ static CxList* toolbar_defaults; +static UiToolbarMenuItem* ui_appmenu; + + void uic_toolbar_init(void) { toolbar_items = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 16); toolbar_defaults = cxLinkedListCreateSimple(CX_STORE_POINTERS); @@ -79,6 +82,33 @@ cxMapPut(toolbar_items, name, item); } +static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs args) { + UiToolbarMenuArgs newargs; + newargs.label = nl_strdup(args.label); + newargs.stockid = nl_strdup(args.stockid); + newargs.icon = nl_strdup(args.icon); + return newargs; +} + +UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args) { + UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem)); + item->item.type = UI_TOOLBAR_MENU; + memset(&item->menu, 0, sizeof(UiMenu)); + item->args = menuargs_copy(args); + + item->end = 0; + + if (!name) { + // special appmenu + ui_appmenu = item; + } else { + // toplevel menu + cxMapPut(toolbar_items, name, item); + } + + uic_add_menu_to_stack(&item->menu); +} + CxMap* uic_get_toolbar_items(void) { return toolbar_items; @@ -100,3 +130,7 @@ UiToolbarItemI* uic_toolbar_get_item(const char* name) { return cxMapGet(toolbar_items, name); } + +UiToolbarMenuItem* uic_get_appmenu(void) { + return ui_appmenu; +}