aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-07-07 16:13:24 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-07-11 09:41:46 +0000
commit2d75c5366ea82cc600d1578278f88d5a5e97488b (patch)
treee1be1a182cb4f0c334090c173437619074bb1164 /src/quicktemplates2/qquickmenu.cpp
parent014466f46abad9868e4e8d09c5d9ac6164ccf2f5 (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.cpp13
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);