From 04b0d1b217229494e317ab0dfcd0b15436d67f70 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Fri, 11 Oct 2019 08:45:39 +0200 Subject: QQuickTextInput::remove: Fix selection logic Fixes: QTBUG-77814 Change-Id: I96b8990656117430eb12fc4b294a8ece612d3a4b Reviewed-by: Qt CI Bot Reviewed-by: Simon Hausmann Reviewed-by: Ulf Hermann --- src/quick/items/qquicktextinput.cpp | 4 ++-- .../auto/quick/qquicktextinput/data/qtbug77841.qml | 22 ++++++++++++++++++++++ .../quick/qquicktextinput/tst_qquicktextinput.cpp | 13 +++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 tests/auto/quick/qquicktextinput/data/qtbug77841.qml diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index cd601a8059..182889b14e 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2258,8 +2258,8 @@ void QQuickTextInput::remove(int start, int end) d->m_cursor -= qMin(d->m_cursor, end) - start; if (d->m_selstart > start) d->m_selstart -= qMin(d->m_selstart, end) - start; - if (d->m_selend > end) - d->m_selend -= qMin(d->m_selend, end) - start; + if (d->m_selend >= end) + d->m_selend -= end - start; } d->addCommand(QQuickTextInputPrivate::Command( QQuickTextInputPrivate::SetSelection, d->m_cursor, 0, d->m_selstart, d->m_selend)); diff --git a/tests/auto/quick/qquicktextinput/data/qtbug77841.qml b/tests/auto/quick/qquicktextinput/data/qtbug77841.qml new file mode 100644 index 0000000000..ebb43a8f82 --- /dev/null +++ b/tests/auto/quick/qquicktextinput/data/qtbug77841.qml @@ -0,0 +1,22 @@ +import QtQuick 2.12 + +Item { + id: root + width: 600 + height: 300 + + TextInput { + id: qwe + objectName: "qwe" + width: 500 + height: 100 + font.pixelSize: 50 + text: "123456" + focus: true + } + + Component.onCompleted: { + qwe.insert(0, "***") + qwe.remove(0, 3) + } +} diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index ed2d535fda..cab4e1145f 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -230,6 +230,7 @@ private slots: void padding(); void QTBUG_51115_readOnlyResetsSelection(); + void QTBUG_77814_InsertRemoveNoSelection(); private: void simulateKey(QWindow *, int key); @@ -7003,6 +7004,18 @@ void tst_qquicktextinput::QTBUG_51115_readOnlyResetsSelection() QCOMPARE(obj->selectedText(), QString()); } +void tst_qquicktextinput::QTBUG_77814_InsertRemoveNoSelection() +{ + QQuickView view; + view.setSource(testFileUrl("qtbug77841.qml")); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QQuickTextInput *textInput = view.rootObject()->findChild("qwe"); + QVERIFY(textInput); + + QCOMPARE(textInput->selectedText(), QString()); +} + QTEST_MAIN(tst_qquicktextinput) #include "tst_qquicktextinput.moc" -- cgit v1.2.3