aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickmenu.cpp18
-rw-r--r--src/quicktemplates2/qquickmenu_p_p.h1
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;