diff options
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 18 | ||||
-rw-r--r-- | src/quicktemplates2/qquickmenu_p_p.h | 1 |
2 files changed, 16 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)); } diff --git a/src/quicktemplates2/qquickmenu_p_p.h b/src/quicktemplates2/qquickmenu_p_p.h index a4a5a7cc..283c3708 100644 --- a/src/quicktemplates2/qquickmenu_p_p.h +++ b/src/quicktemplates2/qquickmenu_p_p.h @@ -93,6 +93,7 @@ public: void itemDestroyed(QQuickItem *item) override; void itemGeometryChanged(QQuickItem *, QQuickGeometryChange change, const QRectF &diff) override; + bool prepareEnterTransition() override; bool prepareExitTransition() override; bool blockInput(QQuickItem *item, const QPointF &point) const override; |