diff options
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoansmenu.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoansmenu.mm | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.mm b/src/plugins/platforms/cocoa/qcocoansmenu.mm index 996a4ff194..6be2569dbc 100644 --- a/src/plugins/platforms/cocoa/qcocoansmenu.mm +++ b/src/plugins/platforms/cocoa/qcocoansmenu.mm @@ -40,6 +40,8 @@ #import "qcocoansmenu.h" #include "qcocoamenu.h" #include "qcocoamenuitem.h" +#include "qcocoamenubar.h" +#include "qcocoawindow.h" #import "qnsview.h" #include <QtCore/qmetaobject.h> @@ -291,6 +293,19 @@ static NSString *qt_mac_removePrivateUnicode(NSString* string) return nil; } +// Cocoa will query the menu item's target for the worksWhenModal selector. +// So we need to implement this to allow the items to be handled correctly +// when a modal dialog is visible. +- (BOOL)worksWhenModal +{ + if (!QGuiApplication::modalWindow()) + return YES; + const auto &qpaMenu = static_cast<QCocoaNSMenu *>(self).qpaMenu; + if (auto *mb = qobject_cast<QCocoaMenuBar *>(qpaMenu->menuParent())) + return QGuiApplication::modalWindow()->handle() == mb->cocoaWindow() ? YES : NO; + return YES; +} + @end #undef CHECK_MENU_CLASS |