diff options
-rw-r--r-- | src/gui/text/qtextengine.cpp | 20 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 13 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 13 |
3 files changed, 24 insertions, 22 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 7390b566e7..a95adc75de 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -3181,23 +3181,19 @@ int QTextEngine::lineNumberForTextPosition(int pos) void QTextEngine::insertionPointsForLine(int lineNum, QVector<int> &insertionPoints) { QTextLineItemIterator iterator(this, lineNum); - bool rtl = isRightToLeft(); bool lastLine = lineNum >= lines.size() - 1; while (!iterator.atEnd()) { - iterator.next(); - const QScriptItem *si = &layoutData->items[iterator.item]; - if (si->analysis.bidiLevel % 2) { - int i = iterator.itemEnd - 1, min = iterator.itemStart; - if (lastLine && (rtl ? iterator.atBeginning() : iterator.atEnd())) - i++; - for (; i >= min; i--) + const QScriptItem &si = iterator.next(); + + int end = iterator.itemEnd; + if (lastLine && iterator.item == iterator.lastItem) + ++end; // the last item in the last line -> insert eol position + if (si.analysis.bidiLevel % 2) { + for (int i = end - 1; i >= iterator.itemStart; --i) insertionPoints.push_back(i); } else { - int i = iterator.itemStart, max = iterator.itemEnd; - if (lastLine && (rtl ? iterator.atBeginning() : iterator.atEnd())) - max++; - for (; i < max; i++) + for (int i = iterator.itemStart; i < end; ++i) insertionPoints.push_back(i); } } 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<int>, 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 |