aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-02-09 03:02:20 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-02-09 03:02:21 +0100
commit7b48bda18f836671cda6d47d6570fc522a4361ec (patch)
treeba0093c597b5581aa6fc86964c3d95d7fe9bfe36 /src/quicktemplates2/qquickmenu.cpp
parent3afec43b69991753416380d88e22b5382b8b0832 (diff)
parent4e5601ac1c7aec6aba9ba09fe7adb7a0462da2f0 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp31
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();
}
}