From 9d66bec7f60a9767b7ec0acac747dbfecc87899c Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 28 Mar 2021 07:55:21 +0300 Subject: macOS: Recreate menus after language changes IssueID #192 --- src/macos.h | 1 + src/macos.m | 6 ++++++ src/ui/window.c | 30 ++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/macos.h b/src/macos.h index a59351e6..0d3f097a 100644 --- a/src/macos.h +++ b/src/macos.h @@ -32,6 +32,7 @@ void enableMomentumScroll_MacOS (void); void registerURLHandler_MacOS (void); void setupApplication_MacOS (void); void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count); +void removeMenu_MacOS (int atIndex); void enableMenu_MacOS (const char *menuLabel, iBool enable); void enableMenuItem_MacOS (const char *menuItemCommand, iBool enable); void enableMenuItemsByKey_MacOS (int key, int kmods, iBool enable); diff --git a/src/macos.m b/src/macos.m index 019533bd..0dcc3ef5 100644 --- a/src/macos.m +++ b/src/macos.m @@ -460,6 +460,12 @@ static void setShortcut_NSMenuItem_(NSMenuItem *item, int key, int kmods) { delete_String(str); } +void removeMenu_MacOS(int atIndex) { + NSApplication *app = [NSApplication sharedApplication]; + NSMenu *appMenu = [app mainMenu]; + [appMenu removeItemAtIndex:atIndex]; +} + void insertMenuItems_MacOS(const char *menuLabel, int atIndex, const iMenuItem *items, size_t count) { NSApplication *app = [NSApplication sharedApplication]; MyDelegate *myDel = (MyDelegate *) app.delegate; diff --git a/src/ui/window.c b/src/ui/window.c index 9b132da1..a3675ae5 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -320,6 +320,24 @@ static const iMenuItem helpMenuItems_[] = { { "${menu.aboutpages}", 0, 0, "!open url:about:about" }, { "${menu.debug}", 0, 0, "!open url:about:debug" }, }; + +static void insertMacMenus_(void) { + insertMenuItems_MacOS("${menu.title.file}", 1, fileMenuItems_, iElemCount(fileMenuItems_)); + insertMenuItems_MacOS("${menu.title.edit}", 2, editMenuItems_, iElemCount(editMenuItems_)); + insertMenuItems_MacOS("${menu.title.view}", 3, viewMenuItems_, iElemCount(viewMenuItems_)); + insertMenuItems_MacOS("${menu.title.bookmarks}", 4, bookmarksMenuItems_, iElemCount(bookmarksMenuItems_)); + insertMenuItems_MacOS("${menu.title.identity}", 5, identityMenuItems_, iElemCount(identityMenuItems_)); + insertMenuItems_MacOS("${menu.title.help}", 7, helpMenuItems_, iElemCount(helpMenuItems_)); +} + +static void removeMacMenus_(void) { + removeMenu_MacOS(7); + removeMenu_MacOS(5); + removeMenu_MacOS(4); + removeMenu_MacOS(3); + removeMenu_MacOS(2); + removeMenu_MacOS(1); +} #endif #if defined (iPlatformAppleMobile) @@ -1055,12 +1073,7 @@ static void setupUserInterface_Window(iWindow *d) { setAlignVisually_LabelWidget(navMenu, iTrue); setId_Widget(addChildFlags_Widget(navBar, iClob(navMenu), collapse_WidgetFlag), "navbar.menu"); #else - insertMenuItems_MacOS("${menu.title.file}", 1, fileMenuItems_, iElemCount(fileMenuItems_)); - insertMenuItems_MacOS("${menu.title.edit}", 2, editMenuItems_, iElemCount(editMenuItems_)); - insertMenuItems_MacOS("${menu.title.view}", 3, viewMenuItems_, iElemCount(viewMenuItems_)); - insertMenuItems_MacOS("${menu.title.bookmarks}", 4, bookmarksMenuItems_, iElemCount(bookmarksMenuItems_)); - insertMenuItems_MacOS("${menu.title.identity}", 5, identityMenuItems_, iElemCount(identityMenuItems_)); - insertMenuItems_MacOS("${menu.title.help}", 7, helpMenuItems_, iElemCount(helpMenuItems_)); + insertMacMenus_(); #endif } /* Tab bar. */ { @@ -1821,6 +1834,11 @@ iBool processEvent_Window(iWindow *d, const SDL_Event *ev) { updateMetrics_Window_(d); } if (isCommand_UserEvent(&event, "lang.changed")) { +#if defined (iPlatformAppleDesktop) + /* Retranslate the menus. */ + removeMacMenus_(); + insertMacMenus_(); +#endif invalidate_Window_(d); arrange_Widget(d->root); } -- cgit v1.2.3