aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:33:03 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:24:08 +0000
commitd5be2fdb90f02258c60545b69e3247ad0919672c (patch)
tree6524a20e4206e43f688ba60e34e06b18eb4d1b35 /src
parentf1797a43d6d0812aab1077a9ebeeaeb68c60b845 (diff)
QQuickMenu: override reposition() to position sub-menus
Change-Id: Ia63148beee6b574e435a120be245601b3a0b3322 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp23
-rw-r--r--src/quicktemplates2/qquickmenu_p_p.h1
2 files changed, 18 insertions, 6 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index a5546306..18997928 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -359,6 +359,23 @@ void QQuickMenuPrivate::itemGeometryChanged(QQuickItem *, QQuickGeometryChange,
resizeItems();
}
+void QQuickMenuPrivate::reposition()
+{
+ Q_Q(QQuickMenu);
+ if (parentMenu) {
+ if (cascade) {
+ if (popupItem->isMirrored())
+ q->setPosition(QPointF(-q->width() - parentMenu->leftPadding() + q->overlap(), -q->topPadding()));
+ else if (parentItem)
+ q->setPosition(QPointF(parentItem->width() + parentMenu->rightPadding() - q->overlap(), -q->topPadding()));
+ } else {
+ q->setPosition(QPointF(parentMenu->x() + (parentMenu->width() - q->width()) / 2,
+ parentMenu->y() + (parentMenu->height() - q->height()) / 2));
+ }
+ }
+ QQuickPopupPrivate::reposition();
+}
+
bool QQuickMenuPrivate::prepareEnterTransition()
{
Q_Q(QQuickMenu);
@@ -461,15 +478,9 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate)
if (cascade) {
subMenu->setParentItem(item);
- if (popupItem->isMirrored())
- subMenu->setPosition(QPointF(-subMenu->width() - q->leftPadding() + subMenu->overlap(), -subMenu->topPadding()));
- else
- subMenu->setPosition(QPointF(item->width() + q->rightPadding() - subMenu->overlap(), -subMenu->topPadding()));
} else {
q->close();
subMenu->setParentItem(parentItem);
- subMenu->setPosition(QPointF(q->x() + (q->width() - subMenu->width()) / 2,
- q->y() + (q->height() - subMenu->height()) / 2));
}
if (activate)
diff --git a/src/quicktemplates2/qquickmenu_p_p.h b/src/quicktemplates2/qquickmenu_p_p.h
index b52f0f3f..7a1c631f 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;
+ void reposition() override;
bool prepareEnterTransition() override;
bool prepareExitTransition() override;
bool blockInput(QQuickItem *item, const QPointF &point) const override;