diff options
| author | Tor Arne Vestbø <[email protected]> | 2024-06-17 15:33:34 +0200 |
|---|---|---|
| committer | Tor Arne Vestbø <[email protected]> | 2024-07-01 22:50:42 +0200 |
| commit | daad2b28fdb884e6d796ab024bcb962155cf5534 (patch) | |
| tree | e8e6beb3fa83218836556910fcf73b74286d599d /src | |
| parent | db328ca975bc63f3baf3d021dcff1ea37fa6b6a0 (diff) | |
macOS: Track menu bar clicks for popup closing in QCocoaIntegration
A static member in QCocoaMenuBar relies on the app having at least
one QCocoaMenuBar, and also stays around after the qGuiApp has gone
away, potentially leading to a crash.
As a drive-by, clarify the comment and variable name to point out
that we're closing popups on _any_ native menu opening, not just
menus in the main menu bar (NSApp.mainMenu).
Pick-to: 6.8 6.7 6.5
Change-Id: Ib14919e317d70e4c76f3d89c78331edb958bf048
Reviewed-by: Volker Hilsheimer <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/platforms/cocoa/qcocoaintegration.h | 2 | ||||
| -rw-r--r-- | src/plugins/platforms/cocoa/qcocoaintegration.mm | 6 | ||||
| -rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenubar.mm | 5 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index 664700cf513..f5173110259 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -119,6 +119,8 @@ private: #endif QCocoaWindowManager m_windowManager; + + QMacNotificationObserver m_menuTrackingObserver; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QCocoaIntegration::Options) diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index 2ce39ff8977..ad767a0694a 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -168,6 +168,12 @@ QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList) connect(qGuiApp, &QGuiApplication::focusWindowChanged, this, &QCocoaIntegration::focusWindowChanged); + + // Opening of a native menu should close all popup windows + m_menuTrackingObserver = QMacNotificationObserver(nil, + NSMenuDidBeginTrackingNotification, ^{ + QGuiApplicationPrivate::instance()->closeAllPopups(); + }); } QCocoaIntegration::~QCocoaIntegration() diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 2493d90724a..f938d8ad5c5 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -25,11 +25,6 @@ QCocoaMenuBar::QCocoaMenuBar() { static_menubars.append(this); - // clicks into the menu bar should close all popup windows - static QMacNotificationObserver menuBarClickObserver(nil, NSMenuDidBeginTrackingNotification, ^{ - QGuiApplicationPrivate::instance()->closeAllPopups(); - }); - m_nativeMenu = [[NSMenu alloc] init]; qCDebug(lcQpaMenus) << "Constructed" << this << "with" << m_nativeMenu; } |
