summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoamenubar.mm
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2023-03-17 08:41:56 +0000
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2023-03-17 16:19:51 +0000
commitf03fedfaecd7cfacfd80b30e8058cf1d81a360de (patch)
treefad7f35a5b174bf699c1cd481661c0b9ea5ce3ce /src/plugins/platforms/cocoa/qcocoamenubar.mm
parent5c7a3ea783b780bc5f924849091f1f3ffb4b892c (diff)
Revert "QCocoaMenuBar: avoid duplication of 'special' entries in the 'Edit' menu"
This reverts commit 6c2387571a6ccace9edb600ce6798f75affd961d. Caused a regression when the edit menu did not have any entries from the system. Fixing that regression (out of bound index, crash), revealed that the original patch is simply not working anymore - items are still duplicated anyway. Fixes: QTBUG-111798 Pick-to: 6.5 Change-Id: Id4a88f30e2cf300bc63181c4bc7aa113a8b13ac6 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoamenubar.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm
index f46e5b3ed6..9fa0d7b27a 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm
@@ -166,6 +166,18 @@ void QCocoaMenuBar::syncMenu_helper(QPlatformMenu *menu, bool menubarUpdate)
for (QCocoaMenuItem *item : cocoaMenu->items())
cocoaMenu->syncMenuItem_helper(item, menubarUpdate);
+ const QString captionNoAmpersand = QString::fromNSString(cocoaMenu->nsMenu().title)
+ .remove(u'&');
+ if (captionNoAmpersand == QCoreApplication::translate("QCocoaMenu", "Edit")) {
+ // prevent recursion from QCocoaMenu::insertMenuItem - when the menu is visible
+ // it calls syncMenu again. QCocoaMenu::setVisible just sets the bool, which then
+ // gets evaluated in the code after this block.
+ const bool wasVisible = cocoaMenu->isVisible();
+ cocoaMenu->setVisible(false);
+ insertDefaultEditItems(cocoaMenu);
+ cocoaMenu->setVisible(wasVisible);
+ }
+
BOOL shouldHide = YES;
if (cocoaMenu->isVisible()) {
// If the NSMenu has no visible items, or only separators, we should hide it
@@ -302,22 +314,6 @@ void QCocoaMenuBar::updateMenuBarImmediately()
[NSApp setMainMenu:mb->nsMenu()];
insertWindowMenu();
[loader qtTranslateApplicationMenu];
-
- for (auto menu : std::as_const(mb->m_menus)) {
- if (!menu)
- continue;
-
- const QString captionNoAmpersand = QString::fromNSString(menu->nsMenu().title).remove(u'&');
- if (captionNoAmpersand != QCoreApplication::translate("QCocoaMenu", "Edit"))
- continue;
-
- NSMenuItem *item = mb->nativeItemForMenu(menu);
- auto *nsMenu = item.submenu;
- if ([nsMenu indexOfItemWithTarget:NSApp andAction:@selector(startDictation:)] == -1) {
- // AppKit was not able to recognize the special role of this menu item.
- mb->insertDefaultEditItems(menu);
- }
- }
}
void QCocoaMenuBar::insertWindowMenu()