summaryrefslogtreecommitdiff
path: root/src/controls/qquickmenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controls/qquickmenu.cpp')
-rw-r--r--src/controls/qquickmenu.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/controls/qquickmenu.cpp b/src/controls/qquickmenu.cpp
index ddb25790..67682ad3 100644
--- a/src/controls/qquickmenu.cpp
+++ b/src/controls/qquickmenu.cpp
@@ -442,6 +442,10 @@ void QQuickMenu1::__popup(const QRectF &targetRect, int atItemIndex, MenuType me
// parentWindow may not be a QQuickWindow (happens when using QQuickWidget)
if (m_platformMenu) {
+ if (m_windowConnection)
+ QObject::disconnect(m_windowConnection);
+ m_windowConnection = connect(parentWindow, &QWindow::visibleChanged, this,
+ &QQuickMenu1::platformMenuWindowVisibleChanged, Qt::UniqueConnection);
QRectF globalTargetRect = targetRect.translated(m_xOffset, m_yOffset);
if (visualItem()) {
if (qGuiApp->isRightToLeft()) {
@@ -571,6 +575,19 @@ void QQuickMenu1::windowVisibleChanged(bool v)
}
}
+void QQuickMenu1::platformMenuWindowVisibleChanged(bool visible)
+{
+ if (!visible) {
+ if (m_windowConnection) {
+ QObject::disconnect(m_windowConnection);
+ m_windowConnection = QMetaObject::Connection();
+ }
+ if (m_platformMenu) {
+ m_platformMenu->dismiss();
+ }
+ }
+}
+
void QQuickMenu1::clearPopupWindow()
{
m_popupWindow = 0;