diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-10-12 10:24:38 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-10-14 05:35:05 +0000 |
commit | 0789923f391f1e5bebe07b676a41c85a820b2533 (patch) | |
tree | bd514620afeea27760752dad3c818d49dc232316 /src/quick | |
parent | 1551187f9c17bfa15686626d896ccbdd04d1f37a (diff) |
QQuickItem: detect loop in KeyNavigation chain
Task-number: QTBUG-47229
Change-Id: I22dbe5ee1fff4e9a8de4fa69b43e4d9a87677192
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index ab93974f60..fbea3a0ee1 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -724,6 +724,7 @@ void QQuickKeyNavigationAttached::setFocusNavigation(QQuickItem *currentItem, co { QQuickItem *initialItem = currentItem; bool isNextItem = false; + QVector<QQuickItem *> visitedItems; do { isNextItem = false; if (currentItem->isVisible() && currentItem->isEnabled()) { @@ -734,13 +735,14 @@ void QQuickKeyNavigationAttached::setFocusNavigation(QQuickItem *currentItem, co if (attached) { QQuickItem *tempItem = qvariant_cast<QQuickItem*>(attached->property(dir)); if (tempItem) { + visitedItems.append(currentItem); currentItem = tempItem; isNextItem = true; } } } } - while (currentItem != initialItem && isNextItem); + while (currentItem != initialItem && isNextItem && !visitedItems.contains(currentItem)); } struct SigMap { |