From 5232a0c4005e743942c8f371aeb1ba024d4d4d03 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 12 Jul 2017 14:15:32 +0200 Subject: 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 --- src/quicktemplates2/qquickmenu.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src/quicktemplates2/qquickmenu.cpp') 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()); } /*! -- cgit v1.2.3