aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickitem2
diff options
context:
space:
mode:
authorValery Volgutov <valery.volgutov@lge.com>2020-04-20 20:42:56 +0300
committerDominik Holland <dominik.holland@qt.io>2020-06-12 12:23:21 +0200
commitf07641b47a7c479894472e933d202bfcec0e222e (patch)
treefc3759295c675cb699b076a8d459f8157fd91c16 /tests/auto/quick/qquickitem2
parent185d9b5b72a2c062c4670b17385ec1e6e576c4d9 (diff)
Fix QQuickKeyNavigationAttached issue
When Repeater used for Item creation, we have following issue: When Repeater creates a new item and this item tries to set keyboard.left or keyboard.right to another Repeater-created sibling, these items haven't been created yet, and we have issue with navigation keys. Set rightSet to true if right really changed. When object calls KeyboardNavigation::setRight(null), rightSet = true, but right field did not change (null). After that, navigation keys work incorrectly. The same for other cases. Task-number: QTBUG-83356 Pick-to: 5.15 Change-Id: I9ea6d6a7d13ff989aac3d9e2d22467b48080de13 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'tests/auto/quick/qquickitem2')
-rw-r--r--tests/auto/quick/qquickitem2/data/keynavigationtest_repeater.qml37
-rw-r--r--tests/auto/quick/qquickitem2/tst_qquickitem.cpp17
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem2/data/keynavigationtest_repeater.qml b/tests/auto/quick/qquickitem2/data/keynavigationtest_repeater.qml
new file mode 100644
index 0000000000..12ce10e139
--- /dev/null
+++ b/tests/auto/quick/qquickitem2/data/keynavigationtest_repeater.qml
@@ -0,0 +1,37 @@
+import QtQuick 2.0
+
+Grid {
+ property var textModel: ["1", "2", "3", "4", "5"]
+ columns: 5
+ width: 50*textModel.length
+
+ Repeater {
+ id: repeater
+ model: textModel.length
+ Rectangle {
+ width: 50
+ height: 50
+ color: focus ? "red" : "lightgrey"
+ focus: index == 2
+ Text {
+ id: t
+ text: textModel[index]
+ }
+ KeyNavigation.left: repeater.itemAt(index - 1)
+ KeyNavigation.right: repeater.itemAt(index + 1)
+ }
+ }
+
+ function verify() {
+ for (var i = 0; i < repeater.count; i++) {
+ var item = repeater.itemAt(i);
+ var prev = repeater.itemAt(i - 1);
+ var next = repeater.itemAt(i + 1);
+ if (item.KeyNavigation.left != prev || item.KeyNavigation.right != next)
+ return false;
+ }
+
+ return true;
+ }
+}
+
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
index f01b3e25f1..f65650cf9c 100644
--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
@@ -92,6 +92,7 @@ private slots:
void keyNavigation_implicitDestroy();
void keyNavigation_focusReason();
void keyNavigation_loop();
+ void keyNavigation_repeater();
void layoutMirroring();
void layoutMirroringWindow();
void layoutMirroringIllegalParent();
@@ -2290,6 +2291,22 @@ void tst_QQuickItem::keyNavigation_loop()
delete window;
}
+void tst_QQuickItem::keyNavigation_repeater()
+{
+ // QTBUG-83356
+ QScopedPointer<QQuickView> window(new QQuickView());
+ window->setBaseSize(QSize(240,320));
+
+ window->setSource(testFileUrl("keynavigationtest_repeater.qml"));
+ window->show();
+ window->requestActivate();
+
+ QVariant result;
+ QVERIFY(QMetaObject::invokeMethod(window->rootObject(), "verify",
+ Q_RETURN_ARG(QVariant, result)));
+ QVERIFY(result.toBool());
+}
+
void tst_QQuickItem::smooth()
{
QQmlComponent component(&engine);