macOS: fix duplicate Window menu in translated UIs - #683
Open
evilja wants to merge 1 commit into
Open
Conversation
wx locates the macOS Window menu by comparing each top-level menu title against wxApp::s_macWindowMenuTitleName and against its own translation of "Window" (context "macOS menu name"). Aegisub never sets the former, so in any non-English UI the menubar's translated Window title matches neither and wxMenuBarCocoaImpl::MacCreateOrFindWindowMenu() falls through to creating a second, untranslated "Window" menu, inserting it after Help. The result is two Window menus side by side, e.g. "Pencere" and "Window" in a Turkish UI. Every translated macOS build is affected. Set s_macWindowMenuTitleName from the menubar's already-translated title, mirroring how the Help menu title is handled, and mark the macOS menubar's Window entry so it can be recognised. Since wx then matches Aegisub's own menu, no extra menu is created and the title stays translated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
On macOS, any non-English UI shows two Window menus in the menu bar — the app's own translated one plus an untranslated "Window" appended after Help. In a Turkish UI that reads
Pencere…YardımWindow.Cause
wxMenuBarCocoaImpl::MacCreateOrFindWindowMenu()(src/osx/cocoa/menu.mm) locates the Window menu by comparing each top-level menu title against two strings:wxStripMenuCodes(wxApp::s_macWindowMenuTitleName), and"Window"in context"macOS menu name".Aegisub never sets
s_macWindowMenuTitleName, so it keeps wx's default"Window". wx's contextual translation is also"Window"unless a catalog supplies that exact msgctxt/msgid pair. A translated menubar title therefore matches neither, and wx falls through to the branch that allocates a freshNSMenutitled"Window"and inserts it after the Help menu.Aegisub already tells wx the translated Help title via
wxApp::s_macHelpMenuTitleName; there is simply no equivalent for Window.Fix
Set
s_macWindowMenuTitleNamefrom the menubar entry's already-translated title while the menubar is built, and mark the macOS menubar's Window entry with"special": "window"so the loop can recognise it. wx then matches Aegisub's existing menu, creates nothing extra, and the title stays translated.The title is assigned before
MacSetCommonMenuBar(), so it is in place by the time wx installs the menubar.Testing
Reproduced on macOS 26 (arm64) with the UI language set to Turkish: two menus,
PencereandWindow.The matching behaviour was confirmed by driving wx's other match path — adding
msgctxt "macOS menu name" / msgid "Window" / msgstr "Pencere"to the Turkish catalog makes wx recognise the existing menu, and the duplicate disappears while the title staysPencere. This patch achieves the same match from the application side, so it works for every locale without requiring a catalog entry per language.Note, not addressed here
The menubar's
"special": "help"marker appears to be dead: menubar entries are handled by the loop inmenu::GetMenuBar, which readsspecialonly in theelsebranch (when nosubmenuis present), whiles_macHelpMenuTitleNameis set inprocess_menu_item, which only ever sees entries inside a menu. Help detection currently works via wx's_("&Help")fallback. Left alone to keep this change focused.