break;
}
case QTextCursor::PreviousCharacter:
- newPosition = priv->previousCursorPosition(position, QTextLayout::SkipCharacters);
+ if (mode == QTextCursor::MoveAnchor && position != adjusted_anchor)
+ newPosition = qMin(position, adjusted_anchor);
+ else
+ newPosition = priv->previousCursorPosition(position, QTextLayout::SkipCharacters);
break;
case QTextCursor::Left:
- newPosition = visualMovement ? priv->leftCursorPosition(position)
- : priv->previousCursorPosition(position, QTextLayout::SkipCharacters);
+ if (mode == QTextCursor::MoveAnchor && position != adjusted_anchor)
+ newPosition = visualMovement ? qMax(position, adjusted_anchor)
+ : qMin(position, adjusted_anchor);
+ else
+ newPosition = visualMovement ? priv->leftCursorPosition(position)
+ : priv->previousCursorPosition(position, QTextLayout::SkipCharacters);
break;
case QTextCursor::StartOfWord: {
if (relativePos == 0)
break;
}
case QTextCursor::NextCharacter:
- newPosition = priv->nextCursorPosition(position, QTextLayout::SkipCharacters);
+ if (mode == QTextCursor::MoveAnchor && position != adjusted_anchor)
+ newPosition = qMax(position, adjusted_anchor);
+ else
+ newPosition = priv->nextCursorPosition(position, QTextLayout::SkipCharacters);
break;
case QTextCursor::Right:
- newPosition = visualMovement ? priv->rightCursorPosition(position)
- : priv->nextCursorPosition(position, QTextLayout::SkipCharacters);
+ if (mode == QTextCursor::MoveAnchor && position != adjusted_anchor)
+ newPosition = visualMovement ? qMin(position, adjusted_anchor)
+ : qMax(position, adjusted_anchor);
+ else
+ newPosition = visualMovement ? priv->rightCursorPosition(position)
+ : priv->nextCursorPosition(position, QTextLayout::SkipCharacters);
break;
case QTextCursor::NextWord:
case QTextCursor::WordRight:
QCOMPARE(selectionChangedSpy.count(), 3);
QTest::keyClick(ed, Qt::Key_Right);
- QCOMPARE(ed->textCursor().position(), 5);
+ QCOMPARE(ed->textCursor().position(), 4);
QCOMPARE(selectionChangedSpy.count(), 4);
QTest::keyClick(ed, Qt::Key_Right);
- QCOMPARE(ed->textCursor().position(), 6);
+ QCOMPARE(ed->textCursor().position(), 5);
QCOMPARE(selectionChangedSpy.count(), 4);
}
QCOMPARE(selectionChangedSpy.count(), 3);
QTest::keyClick(ed, Qt::Key_Right);
- QCOMPARE(ed->textCursor().position(), 5);
+ QCOMPARE(ed->textCursor().position(), 4);
QCOMPARE(selectionChangedSpy.count(), 4);
QTest::keyClick(ed, Qt::Key_Right);
- QCOMPARE(ed->textCursor().position(), 6);
+ QCOMPARE(ed->textCursor().position(), 5);
QCOMPARE(selectionChangedSpy.count(), 4);
}