From 1467d6bb49cf3417527f3afcdf71ad3a78ae0fb7 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 11 Jul 2017 17:09:24 +0200 Subject: QQuickMenu: control close policy from prepareEnterTransition() Moving stuff away from openSubMenu() until we can remove it... Change-Id: I0a979a6a0de25584a213b59e1d29d3b9f78b184e Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickmenu.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/quicktemplates2/qquickmenu.cpp') 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)); } -- cgit v1.2.3