summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <[email protected]>2024-06-17 15:33:34 +0200
committerTor Arne Vestbø <[email protected]>2024-07-01 22:50:42 +0200
commitdaad2b28fdb884e6d796ab024bcb962155cf5534 (patch)
treee8e6beb3fa83218836556910fcf73b74286d599d /src
parentdb328ca975bc63f3baf3d021dcff1ea37fa6b6a0 (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.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm6
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm5
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 &paramList)
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;
}