aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:15:32 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:24:03 +0000
commit5232a0c4005e743942c8f371aeb1ba024d4d4d03 (patch)
tree0432d1da2e9e10460f0497583788b935fe0d1c44 /src/quicktemplates2/qquickmenu.cpp
parent732b6608b9357d957eb9d2676fe7207b65c1b73f (diff)
Add QQuickMenuPrivate::setParentMenu()
To help propagating the cascade-property automatically, instead of doing it manually in openSubMenu() that we're trying to get rid of. Change-Id: I3a3d59cafccc85d6affc325eb60e717e22b8f812 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index ce10b612..bc19a707 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -215,7 +215,7 @@ void QQuickMenuPrivate::insertItem(int index, QQuickItem *item)
Q_Q(QQuickMenu);
QQuickMenuItemPrivate::get(menuItem)->setMenu(q);
if (QQuickMenu *subMenu = menuItem->subMenu())
- QQuickMenuPrivate::get(subMenu)->parentMenu = q;
+ QQuickMenuPrivate::get(subMenu)->setParentMenu(q);
QObjectPrivate::connect(menuItem, &QQuickMenuItem::triggered, this, &QQuickMenuPrivate::onItemTriggered);
QObjectPrivate::connect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
QObjectPrivate::connect(menuItem, &QQuickControl::hoveredChanged, this, &QQuickMenuPrivate::onItemHovered);
@@ -239,7 +239,7 @@ void QQuickMenuPrivate::removeItem(int index, QQuickItem *item)
if (menuItem) {
QQuickMenuItemPrivate::get(menuItem)->setMenu(nullptr);
if (QQuickMenu *subMenu = menuItem->subMenu())
- QQuickMenuPrivate::get(subMenu)->parentMenu = nullptr;
+ QQuickMenuPrivate::get(subMenu)->setParentMenu(nullptr);
QObjectPrivate::disconnect(menuItem, &QQuickMenuItem::triggered, this, &QQuickMenuPrivate::onItemTriggered);
QObjectPrivate::disconnect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
QObjectPrivate::disconnect(menuItem, &QQuickControl::hoveredChanged, this, &QQuickMenuPrivate::onItemHovered);
@@ -472,10 +472,24 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate)
p->allowHorizontalFlip = cascade;
if (activate)
p->setCurrentIndex(0, Qt::PopupFocusReason);
- subMenu->setCascade(cascade);
subMenu->open();
}
+void QQuickMenuPrivate::setParentMenu(QQuickMenu *parent)
+{
+ Q_Q(QQuickMenu);
+ if (parentMenu == parent)
+ return;
+
+ if (parentMenu)
+ QObject::disconnect(parentMenu.data(), &QQuickMenu::cascadeChanged, q, &QQuickMenu::setCascade);
+ if (parent)
+ QObject::connect(parent, &QQuickMenu::cascadeChanged, q, &QQuickMenu::setCascade);
+
+ parentMenu = parent;
+ q->resetCascade();
+}
+
void QQuickMenuPrivate::startHoverTimer()
{
Q_Q(QQuickMenu);
@@ -1005,7 +1019,16 @@ void QQuickMenu::setCascade(bool cascade)
if (d->cascade == cascade)
return;
d->cascade = cascade;
- emit cascadeChanged();
+ emit cascadeChanged(cascade);
+}
+
+void QQuickMenu::resetCascade()
+{
+ Q_D(QQuickMenu);
+ if (d->parentMenu)
+ setCascade(d->parentMenu->cascade());
+ else
+ setCascade(shouldCascade());
}
/*!