From 0b5911f37619acc20463f01df5588764e22a35b0 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 4 Apr 2014 07:28:20 +0300 Subject: QTextLayout: Fix visual cursor movement in some cases To guarantee proper positioning at the end of the last line in a bidirectional text we have to insert the eol position into the insertion points vector, accordingly to the visual ordering. Detection of the last *logical* item in a *visual* line is unrelaed to the text direction, it is simply `iterator.item == iterator.lastItem`. [ChangeLog][QtGui][QTextLayout] Fixed visual cursor movement in bidirectional text. Task-number: QTBUG-18060 (partially related) Change-Id: I53b6ab889ef580ab0560b620b808b1e09efc0fbd Reviewed-by: Lars Knoll Reviewed-by: Ahmed Saidi --- tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 13 ++++++++----- tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 45167bac60..077e1aa1df 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -3903,7 +3903,7 @@ void tst_QLineEdit::bidiVisualMovement() do { oldPos = newPos; - QVERIFY(oldPos == positionList[i]); + QCOMPARE(oldPos, positionList[i]); if (basicDir == QChar::DirL) { QTest::keyClick(&le, Qt::Key_Right); } else @@ -3913,12 +3913,12 @@ void tst_QLineEdit::bidiVisualMovement() i++; } while (moved); - QVERIFY(i == positionList.size()); + QCOMPARE(i, positionList.size()); do { i--; oldPos = newPos; - QVERIFY(oldPos == positionList[i]); + QCOMPARE(oldPos, positionList[i]); if (basicDir == QChar::DirL) { QTest::keyClick(&le, Qt::Key_Left); } else @@ -3939,6 +3939,7 @@ void tst_QLineEdit::bidiLogicalMovement() { QFETCH(QString, logical); QFETCH(int, basicDir); + QFETCH(IntList, positionList); QLineEdit le; le.setText(logical); @@ -3951,7 +3952,7 @@ void tst_QLineEdit::bidiLogicalMovement() do { oldPos = newPos; - QVERIFY(oldPos == i); + QCOMPARE(oldPos, i); if (basicDir == QChar::DirL) { QTest::keyClick(&le, Qt::Key_Right); } else @@ -3961,10 +3962,12 @@ void tst_QLineEdit::bidiLogicalMovement() i++; } while (moved); + QCOMPARE(i, positionList.size()); + do { i--; oldPos = newPos; - QVERIFY(oldPos == i); + QCOMPARE(oldPos, i); if (basicDir == QChar::DirL) { QTest::keyClick(&le, Qt::Key_Left); } else diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 8695c8b29a..fbd8b46466 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -2304,7 +2304,7 @@ void tst_QTextEdit::bidiVisualMovement() do { oldPos = newPos; - QVERIFY(oldPos == positionList[i]); + QCOMPARE(oldPos, positionList[i]); if (basicDir == QChar::DirL) { ed->moveCursor(QTextCursor::Right); } else @@ -2316,12 +2316,12 @@ void tst_QTextEdit::bidiVisualMovement() i++; } while (moved); - QVERIFY(i == positionList.size()); + QCOMPARE(i, positionList.size()); do { i--; oldPos = newPos; - QVERIFY(oldPos == positionList[i]); + QCOMPARE(oldPos, positionList[i]); if (basicDir == QChar::DirL) { ed->moveCursor(QTextCursor::Left); } else @@ -2342,6 +2342,7 @@ void tst_QTextEdit::bidiLogicalMovement() { QFETCH(QString, logical); QFETCH(int, basicDir); + QFETCH(QList, positionList); ed->setText(logical); @@ -2358,7 +2359,7 @@ void tst_QTextEdit::bidiLogicalMovement() do { oldPos = newPos; - QVERIFY(oldPos == i); + QCOMPARE(oldPos, i); if (basicDir == QChar::DirL) { ed->moveCursor(QTextCursor::Right); } else @@ -2370,10 +2371,12 @@ void tst_QTextEdit::bidiLogicalMovement() i++; } while (moved); + QCOMPARE(i, positionList.size()); + do { i--; oldPos = newPos; - QVERIFY(oldPos == i); + QCOMPARE(oldPos, i); if (basicDir == QChar::DirL) { ed->moveCursor(QTextCursor::Left); } else -- cgit v1.2.3