diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-07-07 16:13:24 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-07-11 09:41:46 +0000 |
commit | 2d75c5366ea82cc600d1578278f88d5a5e97488b (patch) | |
tree | e1be1a182cb4f0c334090c173437619074bb1164 /src/quicktemplates2/qquickmenu.cpp | |
parent | 014466f46abad9868e4e8d09c5d9ac6164ccf2f5 (diff) |
QQuickMenu: fix parent menu handling
Set the parent menu when added as a sub-menu, and reset when removed
from the parent menu, instead of waiting until the sub-menu is being
opened and never reseting it. Furthermore, fix onItemTriggered() to
not overwrite the original parentMenu value when iterating the parent
menus to close them.
Change-Id: If4cf9cd8794e34275f38a3b991e5c403725a8706
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 4794e36b..8fe5014a 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -215,6 +215,8 @@ void QQuickMenuPrivate::insertItem(int index, QQuickItem *item) if (menuItem) { Q_Q(QQuickMenu); QQuickMenuItemPrivate::get(menuItem)->setMenu(q); + if (QQuickMenu *subMenu = menuItem->subMenu()) + QQuickMenuPrivate::get(subMenu)->parentMenu = 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); @@ -237,6 +239,8 @@ void QQuickMenuPrivate::removeItem(int index, QQuickItem *item) QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(item); if (menuItem) { QQuickMenuItemPrivate::get(menuItem)->setMenu(nullptr); + if (QQuickMenu *subMenu = menuItem->subMenu()) + QQuickMenuPrivate::get(subMenu)->parentMenu = 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); @@ -397,10 +401,10 @@ void QQuickMenuPrivate::onItemTriggered() openSubMenu(item, true); } else { // close the whole chain of menus - q->close(); - while (parentMenu) { - parentMenu->close(); - parentMenu = QQuickMenuPrivate::get(parentMenu)->parentMenu; + QQuickMenu *menu = q; + while (menu) { + menu->close(); + menu = QQuickMenuPrivate::get(menu)->parentMenu; } } } @@ -444,7 +448,6 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate) QQuickMenuPrivate *p = QQuickMenuPrivate::get(subMenu); p->allowHorizontalFlip = cascade; - p->parentMenu = q; if (activate) p->setCurrentIndex(0, Qt::PopupFocusReason); subMenu->setCascade(cascade); |