diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-02-09 03:02:20 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-02-09 03:02:21 +0100 |
commit | 7b48bda18f836671cda6d47d6570fc522a4361ec (patch) | |
tree | ba0093c597b5581aa6fc86964c3d95d7fe9bfe36 /src/quicktemplates2/qquickmenu.cpp | |
parent | 3afec43b69991753416380d88e22b5382b8b0832 (diff) | |
parent | 4e5601ac1c7aec6aba9ba09fe7adb7a0462da2f0 (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I8aded0949d38315d4d22fa511f83331d7caf3145
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index f52405c9..f91d15a5 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -468,10 +468,12 @@ void QQuickMenuPrivate::onItemTriggered() if (!item) return; - if (QQuickMenu *subMenu = item->subMenu()) - subMenu->popup(subMenu->itemAt(0)); - else + if (QQuickMenu *subMenu = item->subMenu()) { + auto subMenuPrivate = QQuickMenuPrivate::get(subMenu); + subMenu->popup(subMenuPrivate->firstEnabledMenuItem()); + } else { q->dismiss(); + } } void QQuickMenuPrivate::onItemActiveFocusChanged() @@ -600,7 +602,7 @@ bool QQuickMenuPrivate::activateNextItem() int count = contentModel->count(); while (++index < count) { QQuickItem *item = itemAt(index); - if (!item || !item->activeFocusOnTab()) + if (!item || !item->activeFocusOnTab() || !item->isEnabled()) continue; setCurrentIndex(index, Qt::TabFocusReason); return true; @@ -613,7 +615,7 @@ bool QQuickMenuPrivate::activatePreviousItem() int index = currentIndex; while (--index >= 0) { QQuickItem *item = itemAt(index); - if (!item || !item->activeFocusOnTab()) + if (!item || !item->activeFocusOnTab() || !item->isEnabled()) continue; setCurrentIndex(index, Qt::BacktabFocusReason); return true; @@ -621,6 +623,22 @@ bool QQuickMenuPrivate::activatePreviousItem() return false; } +QQuickMenuItem *QQuickMenuPrivate::firstEnabledMenuItem() const +{ + for (int i = 0; i < contentModel->count(); ++i) { + QQuickItem *item = itemAt(i); + if (!item || !item->isEnabled()) + continue; + + QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(item); + if (!menuItem) + continue; + + return menuItem; + } + return nullptr; +} + void QQuickMenuPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObject *obj) { QQuickMenu *q = qobject_cast<QQuickMenu *>(prop->object); @@ -1419,7 +1437,8 @@ void QQuickMenu::keyPressEvent(QKeyEvent *event) } } else { if (QQuickMenu *subMenu = d->currentSubMenu()) { - subMenu->popup(subMenu->itemAt(0)); + auto subMenuPrivate = QQuickMenuPrivate::get(subMenu); + subMenu->popup(subMenuPrivate->firstEnabledMenuItem()); event->accept(); } } |