diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-07-11 17:09:24 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-07-12 10:24:26 +0000 |
commit | 1467d6bb49cf3417527f3afcdf71ad3a78ae0fb7 (patch) | |
tree | c5ccd98996f64ea0322fffdfa3e3ee27f37f77b1 /src/quicktemplates2/qquickmenu.cpp | |
parent | c298bc51f7ae784a4d91cabe2075c47b0ef71167 (diff) |
QQuickMenu: control close policy from prepareEnterTransition()
Moving stuff away from openSubMenu() until we can remove it...
Change-Id: I0a979a6a0de25584a213b59e1d29d3b9f78b184e
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index d9ef4072..7cc5a565 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -170,7 +170,6 @@ static const int SUBMENU_DELAY = 225; \sa {Customizing Menu}, MenuItem, {Menu Controls}, {Popup Controls} */ -static const QQuickPopup::ClosePolicy defaultMenuClosePolicy = QQuickPopup::CloseOnEscape | QQuickPopup::CloseOnPressOutside; static const QQuickPopup::ClosePolicy cascadingSubMenuClosePolicy = QQuickPopup::CloseOnEscape | QQuickPopup::CloseOnPressOutsideParent; static bool shouldCascade() @@ -360,6 +359,21 @@ void QQuickMenuPrivate::itemGeometryChanged(QQuickItem *, QQuickGeometryChange, resizeItems(); } +bool QQuickMenuPrivate::prepareEnterTransition() +{ + Q_Q(QQuickMenu); + if (!QQuickPopupPrivate::prepareEnterTransition()) + return false; + + if (!hasClosePolicy) { + if (cascade && parentMenu) + closePolicy = cascadingSubMenuClosePolicy; + else + q->resetClosePolicy(); + } + return true; +} + bool QQuickMenuPrivate::prepareExitTransition() { if (!QQuickPopupPrivate::prepareExitTransition()) @@ -443,7 +457,6 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate) if (cascade) { subMenu->setParentItem(item); - subMenu->setClosePolicy(cascadingSubMenuClosePolicy); if (popupItem->isMirrored()) subMenu->setPosition(QPointF(-subMenu->width() - q->leftPadding() + subMenu->overlap(), -subMenu->topPadding())); else @@ -451,7 +464,6 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate) } else { q->close(); subMenu->setParentItem(parentItem); - subMenu->setClosePolicy(defaultMenuClosePolicy); subMenu->setPosition(QPointF(q->x() + (q->width() - subMenu->width()) / 2, q->y() + (q->height() - subMenu->height()) / 2)); } |