Propagate left key presses to the parent item when TextInput is empty.
authorAndrew den Exter <andrew.den-exter@nokia.com>
Fri, 27 Apr 2012 01:06:12 +0000 (11:06 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 27 Apr 2012 01:45:16 +0000 (03:45 +0200)
Don't overwrite the ignore value once it's been set to true.

Task-number: QTBUG-25447
Change-Id: I7284147bc525d0971564570f0dd0599cec190905
Reviewed-by: Yann Bodson <yann.bodson@nokia.com>
src/quick/items/qquicktextinput.cpp
tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp

index b21843e..8637294 100644 (file)
@@ -1382,7 +1382,7 @@ void QQuickTextInput::keyPressEvent(QKeyEvent* ev)
         int cursorPosition = d->m_cursor;
         if (cursorPosition == 0)
             ignore = ev->key() == (d->layoutDirection() == Qt::LeftToRight ? Qt::Key_Left : Qt::Key_Right);
-        if (cursorPosition == text().length())
+        if (!ignore && cursorPosition == text().length())
             ignore = ev->key() == (d->layoutDirection() == Qt::LeftToRight ? Qt::Key_Right : Qt::Key_Left);
     }
     if (ignore) {
index 4cebc3e..1a5f52f 100644 (file)
@@ -2172,7 +2172,7 @@ void tst_qquicktextedit::navigation()
 
     QVERIFY(canvas.rootObject() != 0);
 
-    QQuickItem *input = qobject_cast<QQuickItem *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput")));
+    QQuickTextEdit *input = qobject_cast<QQuickTextEdit *>(qvariant_cast<QObject *>(canvas.rootObject()->property("myInput")));
 
     QVERIFY(input != 0);
     QTRY_VERIFY(input->hasActiveFocus() == true);
@@ -2186,6 +2186,16 @@ void tst_qquicktextedit::navigation()
     QVERIFY(input->hasActiveFocus() == false);
     simulateKey(&canvas, Qt::Key_Left);
     QVERIFY(input->hasActiveFocus() == true);
+
+    // Test left and right navigation works if the TextEdit is empty (QTBUG-25447).
+    input->setText(QString());
+    QCOMPARE(input->cursorPosition(), 0);
+    simulateKey(&canvas, Qt::Key_Right);
+    QCOMPARE(input->hasActiveFocus(), false);
+    simulateKey(&canvas, Qt::Key_Left);
+    QCOMPARE(input->hasActiveFocus(), true);
+    simulateKey(&canvas, Qt::Key_Left);
+    QCOMPARE(input->hasActiveFocus(), false);
 }
 
 void tst_qquicktextedit::copyAndPaste() {
index ab664ae..6f75698 100644 (file)
@@ -2079,6 +2079,16 @@ void tst_qquicktextinput::navigation()
     QCOMPARE(input->cursorPosition(),2);
     simulateKey(&canvas, Qt::Key_Down);
     QCOMPARE(input->cursorPosition(),2);
+
+    // Test left and right navigation works if the TextInput is empty (QTBUG-25447).
+    input->setText(QString());
+    QCOMPARE(input->cursorPosition(), 0);
+    simulateKey(&canvas, Qt::Key_Right);
+    QCOMPARE(input->hasActiveFocus(), false);
+    simulateKey(&canvas, Qt::Key_Left);
+    QCOMPARE(input->hasActiveFocus(), true);
+    simulateKey(&canvas, Qt::Key_Left);
+    QCOMPARE(input->hasActiveFocus(), false);
 }
 
 void tst_qquicktextinput::navigation_RTL()