diff options
3 files changed, 24 insertions, 2 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 4987818a..5f9d1b76 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1077,7 +1077,7 @@ void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev) int cursorPosition = d->control->cursor(); if (cursorPosition == 0) ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Left : Qt::Key_Right); - if (cursorPosition == d->control->text().length()) + if (!ignore && cursorPosition == d->control->text().length()) ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Right : Qt::Key_Left); } if (ignore) { diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index fe152442..b67b7101 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -1932,7 +1932,7 @@ void tst_qdeclarativetextedit::navigation() QVERIFY(canvas->rootObject() != 0); - QDeclarativeItem *input = qobject_cast<QDeclarativeItem *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); + QDeclarativeTextEdit *input = qobject_cast<QDeclarativeTextEdit *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); QVERIFY(input != 0); QTRY_VERIFY(input->hasActiveFocus() == true); @@ -1947,6 +1947,16 @@ void tst_qdeclarativetextedit::navigation() 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); + delete canvas; } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 1769345f..cdeb606b 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1617,6 +1617,18 @@ void tst_qdeclarativetextinput::navigation() 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_Left); + QCOMPARE(input->hasActiveFocus(), false); + simulateKey(canvas, Qt::Key_Right); + QCOMPARE(input->hasActiveFocus(), true); + simulateKey(canvas, Qt::Key_Right); + QCOMPARE(input->hasActiveFocus(), false); + simulateKey(canvas, Qt::Key_Left); + QCOMPARE(input->hasActiveFocus(), true); + delete canvas; } |