From 6c20d552b9917ea736c52a7d436dafbf542bff30 Mon Sep 17 00:00:00 2001 From: Marcel Schuette Date: Fri, 25 May 2012 16:46:29 +0200 Subject: 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. Backport from Qt 5.0 to Qt 4.8 (commit a7017465152d544a4217d5ce4f6f84b80cb9b8b9) Task-number: QTBUG-25447 Change-Id: I2232806b1235b0c901aab21116b5bc70c65d0500 Reviewed-by: Andrew den Exter --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 2 +- .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 12 +++++++++++- .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 4264587..d8d2ac9 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1073,7 +1073,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 31da832..6a1bb43 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -1895,7 +1895,7 @@ void tst_qdeclarativetextedit::navigation() QVERIFY(canvas->rootObject() != 0); - QDeclarativeItem *input = qobject_cast(qvariant_cast(canvas->rootObject()->property("myInput"))); + QDeclarativeTextEdit *input = qobject_cast(qvariant_cast(canvas->rootObject()->property("myInput"))); QVERIFY(input != 0); QTRY_VERIFY(input->hasActiveFocus() == true); @@ -1910,6 +1910,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 df598be..55b4b89 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1613,6 +1613,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; } -- cgit v0.12