diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-06-15 11:41:19 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-06-15 11:41:19 +0200 |
commit | b669a429d0b2d4c58d47a6b3513d12ca57cf8fb6 (patch) | |
tree | 0316635d6ebebb2f0fe3667016828d291af0c419 /src/quicktemplates2/qquickmenu.cpp | |
parent | a8dd4f7d5b8f61b52a5aea7b8418a6a3961cae1e (diff) | |
parent | 513363e940e0978931083544374bfe092107b9fb (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
src/imports/controls/ButtonGroup.qml
tests/auto/controls/data/tst_container.qml
tests/auto/menu/tst_menu.cpp
Change-Id: Ie8ee7e4f83f3fda6a09507b060576ebda929a7cd
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 5a2ad066..8639e504 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -330,10 +330,14 @@ void QQuickMenuPrivate::itemSiblingOrderChanged(QQuickItem *) // reorder the restacked items (eg. by a Repeater) Q_Q(QQuickMenu); QList<QQuickItem *> siblings = contentItem->childItems(); + + int to = 0; for (int i = 0; i < siblings.count(); ++i) { QQuickItem* sibling = siblings.at(i); + if (QQuickItemPrivate::get(sibling)->isTransparentForPositioner()) + continue; int index = contentModel->indexOf(sibling, nullptr); - q->moveItem(index, i); + q->moveItem(index, to++); } } @@ -513,6 +517,31 @@ void QQuickMenuPrivate::setCurrentIndex(int index) } } +void QQuickMenuPrivate::activateNextItem() +{ + int index = currentIndex(); + int count = contentModel->count(); + while (++index < count) { + QQuickItem *item = itemAt(index); + if (!item || !item->activeFocusOnTab()) + continue; + item->forceActiveFocus(Qt::TabFocusReason); + break; + } +} + +void QQuickMenuPrivate::activatePreviousItem() +{ + int index = currentIndex(); + while (--index >= 0) { + QQuickItem *item = itemAt(index); + if (!item || !item->activeFocusOnTab()) + continue; + item->forceActiveFocus(Qt::BacktabFocusReason); + break; + } +} + void QQuickMenuPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObject *obj) { QQuickMenu *q = qobject_cast<QQuickMenu *>(prop->object); @@ -1158,13 +1187,11 @@ void QQuickMenu::keyReleaseEvent(QKeyEvent *event) // shown at once. switch (event->key()) { case Qt::Key_Up: - if (d->contentItem->metaObject()->indexOfMethod("decrementCurrentIndex()") != -1) - QMetaObject::invokeMethod(d->contentItem, "decrementCurrentIndex"); + d->activatePreviousItem(); break; case Qt::Key_Down: - if (d->contentItem->metaObject()->indexOfMethod("incrementCurrentIndex()") != -1) - QMetaObject::invokeMethod(d->contentItem, "incrementCurrentIndex"); + d->activateNextItem(); break; case Qt::Key_Left: @@ -1180,11 +1207,6 @@ void QQuickMenu::keyReleaseEvent(QKeyEvent *event) default: break; } - - int index = d->currentIndex(); - QQuickItem *item = itemAt(index); - if (item) - item->forceActiveFocus(); } void QQuickMenu::timerEvent(QTimerEvent *event) |