From a7017465152d544a4217d5ce4f6f84b80cb9b8b9 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Fri, 27 Apr 2012 11:06:12 +1000 Subject: [PATCH] Propagate left key presses to the parent item when TextInput is empty. Don't overwrite the ignore value once it's been set to true. Task-number: QTBUG-25447 Change-Id: I7284147bc525d0971564570f0dd0599cec190905 Reviewed-by: Yann Bodson --- src/quick/items/qquicktextinput.cpp | 2 +- .../quick/qquicktextedit/tst_qquicktextedit.cpp | 12 +++++++++++- .../quick/qquicktextinput/tst_qquicktextinput.cpp | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index b21843e..8637294 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -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) { diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index 4cebc3e..1a5f52f 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -2172,7 +2172,7 @@ void tst_qquicktextedit::navigation() QVERIFY(canvas.rootObject() != 0); - QQuickItem *input = qobject_cast(qvariant_cast(canvas.rootObject()->property("myInput"))); + QQuickTextEdit *input = qobject_cast(qvariant_cast(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() { diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index ab664ae..6f75698 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -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() -- 1.7.2.5