diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-05-16 21:42:23 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-05-26 12:44:22 +0200 |
commit | 2996ca031efcd97ef9866186ae53e96ed75c9fbf (patch) | |
tree | e915ae4ebbf79b340ca089ae92d71b23c8627ab1 /src/plugins/platforms/cocoa | |
parent | 734c9f2df26b12b89c8a4de4ae43a15726ff1886 (diff) |
macOS: create application menu as QCocoaNSMenu with delegate
This way we can handle keyboard shortcuts for actions in that menu as
well in our menuHasKeyEquivalent implementation. This allows the focus
widget to accept the override, and e.g. a QKeySequenceEdit to record
Cmd+Q which with a plain NSMenu will just quit the application.
Pick-to: 6.3 6.2
Fixes: QTBUG-103590
Change-Id: I84597307aef8f0ab65d97d78e5aa15e5cf2e707d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenuloader.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoansmenu.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoansmenu.mm | 7 |
3 files changed, 9 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm index 8357171776..6d3c668b87 100644 --- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm +++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm @@ -56,7 +56,7 @@ NSMenuItem *appItem = [[[NSMenuItem alloc] init] autorelease]; appItem.title = appName; [theMenu addItem:appItem]; - appMenu = [[NSMenu alloc] initWithTitle:appName]; + appMenu = [[QCocoaNSMenu alloc] initWithoutPlatformMenu:appName]; appItem.submenu = appMenu; // About Application diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.h b/src/plugins/platforms/cocoa/qcocoansmenu.h index e2415d53c5..533aba1a21 100644 --- a/src/plugins/platforms/cocoa/qcocoansmenu.h +++ b/src/plugins/platforms/cocoa/qcocoansmenu.h @@ -28,6 +28,7 @@ QT_DECLARE_NAMESPACED_OBJC_INTERFACE(QCocoaNSMenuDelegate, NSObject <NSMenuDeleg QT_DECLARE_NAMESPACED_OBJC_INTERFACE(QCocoaNSMenu, NSMenu @property (readonly, nonatomic) QCocoaMenu *platformMenu; - (instancetype)initWithPlatformMenu:(QCocoaMenu *)menu; +- (instancetype)initWithoutPlatformMenu:(NSString *)menu; ) QT_DECLARE_NAMESPACED_OBJC_INTERFACE(QCocoaNSMenuItem, NSMenuItem diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.mm b/src/plugins/platforms/cocoa/qcocoansmenu.mm index c6990b6b24..84a625ed66 100644 --- a/src/plugins/platforms/cocoa/qcocoansmenu.mm +++ b/src/plugins/platforms/cocoa/qcocoansmenu.mm @@ -51,6 +51,13 @@ static NSString *qt_mac_removePrivateUnicode(NSString *string) return self; } +- (instancetype)initWithoutPlatformMenu:(NSString *)title +{ + if (self = [super initWithTitle:title]) + self.delegate = [QCocoaNSMenuDelegate sharedMenuDelegate]; + return self; +} + - (QCocoaMenu *)platformMenu { return _platformMenu.data(); |