From cf3a868e3a556c30a7eb175e20c00b2f460ba0c0 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 31 Oct 2021 15:09:50 +1100 Subject: [PATCH] [mac] Support MenuUpdateApplicationMenu --- README.md | 2 +- v2/internal/frontend/desktop/darwin/Application.h | 1 + v2/internal/frontend/desktop/darwin/Application.m | 8 ++++++++ v2/internal/frontend/desktop/darwin/menu.go | 3 ++- v2/internal/frontend/desktop/darwin/window.go | 15 ++++----------- 5 files changed, 16 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c8641ea3a..11b3ac1f3 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ - [1. Internationalization](#nav-1) - [2. Table of Contents](#nav-2) -- [3. Introductions](#nav-3) +- [3. Introduction](#nav-3) - [3.1 Official Website](#nav-3-1) - [4. Features](#nav-4) - [5. Sponsors](#nav-5) diff --git a/v2/internal/frontend/desktop/darwin/Application.h b/v2/internal/frontend/desktop/darwin/Application.h index 8bee9b955..3cfbb853e 100644 --- a/v2/internal/frontend/desktop/darwin/Application.h +++ b/v2/internal/frontend/desktop/darwin/Application.h @@ -49,6 +49,7 @@ void* NewMenu(const char* name); void AppendSubmenu(void* parent, void* child); void AppendRole(void *inctx, void *inMenu, int role); void SetAsApplicationMenu(void *inctx, void *inMenu); +void UpdateApplicationMenu(void *inctx); void SetAbout(void *inctx, const char* title, const char* description, void* imagedata, int datalen); void* AppendMenuItem(void* inctx, void* nsmenu, const char* label, const char* shortcutKey, int modifiers, int disabled, int checked, int menuItemID); diff --git a/v2/internal/frontend/desktop/darwin/Application.m b/v2/internal/frontend/desktop/darwin/Application.m index c9af9c314..b38c2f6e1 100644 --- a/v2/internal/frontend/desktop/darwin/Application.m +++ b/v2/internal/frontend/desktop/darwin/Application.m @@ -256,6 +256,14 @@ void SetAsApplicationMenu(void *inctx, void *inMenu) { ctx.applicationMenu = menu; } +void UpdateApplicationMenu(void *inctx) { + WailsContext *ctx = (__bridge WailsContext*) inctx; + ON_MAIN_THREAD( + NSApplication *app = [NSApplication sharedApplication]; + [app setMainMenu:ctx.applicationMenu]; + ) +} + void SetAbout(void *inctx, const char* title, const char* description, void* imagedata, int datalen) { WailsContext *ctx = (__bridge WailsContext*) inctx; NSString *_title = safeInit(title); diff --git a/v2/internal/frontend/desktop/darwin/menu.go b/v2/internal/frontend/desktop/darwin/menu.go index 722df0eab..8afb63fb9 100644 --- a/v2/internal/frontend/desktop/darwin/menu.go +++ b/v2/internal/frontend/desktop/darwin/menu.go @@ -130,5 +130,6 @@ func (f *Frontend) MenuSetApplicationMenu(menu *menu.Menu) { } func (f *Frontend) MenuUpdateApplicationMenu() { - //processMenu(f.mainWindow, f.mainWindow.applicationMenu) + f.MenuSetApplicationMenu(f.frontendOptions.Menu) + f.mainWindow.UpdateApplicationMenu() } diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index 4bd65665d..5cf9e465d 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -215,19 +215,12 @@ func (w *Window) Size() (int, int) { return parseIntDuo(temp) } -//func (w *Window) parseMenu(inMenu *menu.Menu) { -// for index, item := range inMenu.Items { -// switch item.Type { -// case menu.TextType: -// // Create NSMenuItem -// // Append to NSMenu -// // Keep track of index -// } -// } -//} - func (w *Window) SetApplicationMenu(inMenu *menu.Menu) { mainMenu := NewNSMenu(w.context, "") processMenu(mainMenu, inMenu) C.SetAsApplicationMenu(w.context, mainMenu.nsmenu) } + +func (w *Window) UpdateApplicationMenu() { + C.UpdateApplicationMenu(w.context) +}