Fix nested GridView key navigation with a single row or column.
authorAndrew den Exter <andrew.den-exter@nokia.com>
Mon, 28 May 2012 23:50:13 +0000 (09:50 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 29 May 2012 06:55:09 +0000 (08:55 +0200)
Don't ignore key events when the currentIndex is unchanged due to
wrapping.
.

Task-number: QTBUG-21999
Change-Id: Idc82d472ca7ec495669207761bfe7de58b8781f9
Reviewed-by: Bea Lam <bea.lam@nokia.com>

src/quick/items/qquickgridview.cpp
tests/auto/quick/qquickgridview/data/gridview1.qml
tests/auto/quick/qquickgridview/tst_qquickgridview.cpp

index 61bd202..48d04bf 100644 (file)
@@ -2091,7 +2091,7 @@ void QQuickGridView::keyPressEvent(QKeyEvent *event)
         default:
             break;
         }
-        if (oldCurrent != currentIndex()) {
+        if (oldCurrent != currentIndex() || d->wrap) {
             event->accept();
             return;
         }
index 1424955..c381101 100644 (file)
@@ -8,6 +8,7 @@ Rectangle {
     property real cacheBuffer: 0
     property int added: -1
     property variant removed
+    property int lastKey: 0
 
     width: 240
     height: 320
@@ -66,4 +67,6 @@ Rectangle {
         cacheBuffer: root.cacheBuffer
         focus: true
     }
+
+    Keys.onPressed: lastKey = event.key
 }
index 04cc79d..235c29f 100644 (file)
@@ -2027,6 +2027,25 @@ void tst_QQuickGridView::keyNavigation()
     QTRY_COMPARE(gridview->contentX(), contentPosAtFirstItem.x());
     QTRY_COMPARE(gridview->contentY(), contentPosAtFirstItem.y());
 
+    // Test key press still accepted when position wraps to same index.
+    canvas->rootObject()->setProperty("lastKey", 0);
+    model.removeItems(1, model.count() - 1);
+
+    QTest::keyClick(canvas, backwardsKey);
+    QCOMPARE(canvas->rootObject()->property("lastKey").toInt(), 0);
+
+    QTest::keyClick(canvas, forwardsKey);
+    QCOMPARE(canvas->rootObject()->property("lastKey").toInt(), 0);
+
+    // Test key press not accepted at limits when wrap is disabled.
+    gridview->setWrapEnabled(false);
+
+    QTest::keyClick(canvas, backwardsKey);
+    QCOMPARE(canvas->rootObject()->property("lastKey").toInt(), int(backwardsKey));
+
+    QTest::keyClick(canvas, forwardsKey);
+    QCOMPARE(canvas->rootObject()->property("lastKey").toInt(), int(forwardsKey));
+
     releaseView(canvas);
 }