diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 37b103613d5c5349691b891deb98bab14037db43..37e94cddc06bd86386d069e2a1a59fd8589cfcf6 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2303,12 +2303,15 @@ void QQuickTextInput::resetPasswordMaskDelay() this property holds the text visible to the user, while the \l text property holds the actual entered text. + \note Unlike the TextInput::text property, this contains + partial text input from an input method. + \readonly */ QString QQuickTextInput::displayText() const { Q_D(const QQuickTextInput); - return d->m_textLayout.text(); + return d->m_textLayout.text().insert(d->m_textLayout.preeditAreaPosition(), d->m_textLayout.preeditAreaText()); } /*! diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index e5ef83ba323ea152b955e3b4b438bfb8e675d1f1..c50923b32fb845d77767f47bc6814fc0ca7e4c22 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -2234,25 +2234,34 @@ void tst_qquicktextinput::inputMethods() QTRY_COMPARE(qGuiApp->focusObject(), input); QGuiApplication::sendEvent(input, &event); QCOMPARE(input->text(), QString("My Hello world!")); + QCOMPARE(input->displayText(), QString("My Hello world!")); input->setCursorPosition(2); event.setCommitString("Your", -2, 2); QGuiApplication::sendEvent(input, &event); QCOMPARE(input->text(), QString("Your Hello world!")); + QCOMPARE(input->displayText(), QString("Your Hello world!")); QCOMPARE(input->cursorPosition(), 4); input->setCursorPosition(7); event.setCommitString("Goodbye", -2, 5); QGuiApplication::sendEvent(input, &event); QCOMPARE(input->text(), QString("Your Goodbye world!")); + QCOMPARE(input->displayText(), QString("Your Goodbye world!")); QCOMPARE(input->cursorPosition(), 12); input->setCursorPosition(8); event.setCommitString("Our", -8, 4); QGuiApplication::sendEvent(input, &event); QCOMPARE(input->text(), QString("Our Goodbye world!")); + QCOMPARE(input->displayText(), QString("Our Goodbye world!")); QCOMPARE(input->cursorPosition(), 7); + QInputMethodEvent preeditEvent("PREEDIT", QList<QInputMethodEvent::Attribute>()); + QGuiApplication::sendEvent(input, &preeditEvent); + QCOMPARE(input->text(), QString("Our Goodbye world!")); + QCOMPARE(input->displayText(), QString("Our GooPREEDITdbye world!")); + // input should reset selection even if replacement parameters are out of bounds input->setText("text"); input->setCursorPosition(0); @@ -2260,6 +2269,8 @@ void tst_qquicktextinput::inputMethods() event.setCommitString("replacement", -input->text().length(), input->text().length()); QGuiApplication::sendEvent(input, &event); QCOMPARE(input->selectionStart(), input->selectionEnd()); + QCOMPARE(input->text(), QString("replacement")); + QCOMPARE(input->displayText(), QString("replacement")); QInputMethodQueryEvent enabledQueryEvent(Qt::ImEnabled); QGuiApplication::sendEvent(input, &enabledQueryEvent);