diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-27 20:23:57 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-27 22:10:06 +0200 |
commit | abe319c9cb811832bb4c9c95290564dfa7b3603a (patch) | |
tree | e93b7e554b3cd497b86f0be3bd46450a91ea088e /src/controls/qquickmenu.cpp | |
parent | efdd81ce80b018b7b5779876e94f1b722af7fb9a (diff) | |
parent | 69b3136bae16897492d27558c5909cd61a5e598e (diff) | |
download | qtquickcontrols-abe319c9cb811832bb4c9c95290564dfa7b3603a.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts:
tests/auto/qquicktreemodeladaptor/tst_qquicktreemodeladaptor.cpp
Change-Id: I0b6018fdac65a5385136e4c3561fba1c52ecd32e
Diffstat (limited to 'src/controls/qquickmenu.cpp')
-rw-r--r-- | src/controls/qquickmenu.cpp | 17 |
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; |