diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-07-12 14:15:32 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-07-12 14:24:03 +0000 |
commit | 5232a0c4005e743942c8f371aeb1ba024d4d4d03 (patch) | |
tree | 0432d1da2e9e10460f0497583788b935fe0d1c44 /src/quicktemplates2/qquickmenu.cpp | |
parent | 732b6608b9357d957eb9d2676fe7207b65c1b73f (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.cpp | 31 |
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()); } /*! |