diff options
-rw-r--r-- | src/quick/items/qquickitemsmodule.cpp | 1 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 19 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput_p.h | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp | 13 |
4 files changed, 36 insertions, 0 deletions
diff --git a/src/quick/items/qquickitemsmodule.cpp b/src/quick/items/qquickitemsmodule.cpp index 70915584fd..3fa889c80c 100644 --- a/src/quick/items/qquickitemsmodule.cpp +++ b/src/quick/items/qquickitemsmodule.cpp @@ -277,6 +277,7 @@ static void qt_quickitems_defineModule(const char *uri, int major, int minor) qmlRegisterType<QQuickListView, 7>(uri, 2, 7, "ListView"); qmlRegisterType<QQuickGridView, 7>(uri, 2, 7, "GridView"); + qmlRegisterType<QQuickTextInput, 7>(uri, 2, 7, "TextInput"); } static void initResources() diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 37b8b12fdd..6d4be60131 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2184,6 +2184,7 @@ void QQuickTextInput::resetPasswordMaskDelay() partial text input from an input method. \readonly + \sa preeditText */ QString QQuickTextInput::displayText() const { @@ -2192,6 +2193,21 @@ QString QQuickTextInput::displayText() const } /*! + \qmlproperty string QtQuick::TextInput::preeditText + \readonly + \since 5.7 + + This property contains partial text input from an input method. + + \sa displayText +*/ +QString QQuickTextInput::preeditText() const +{ + Q_D(const QQuickTextInput); + return d->m_textLayout.preeditAreaText(); +} + +/*! \qmlproperty bool QtQuick::TextInput::selectByMouse Defaults to false. @@ -3263,7 +3279,10 @@ void QQuickTextInputPrivate::processInputMethodEvent(QInputMethodEvent *event) cursorPositionChanged = true; } } + QString oldPreeditString = m_textLayout.preeditAreaText(); m_textLayout.setPreeditArea(m_cursor, event->preeditString()); + if (oldPreeditString != m_textLayout.preeditAreaText()) + emit q->preeditTextChanged(); const int oldPreeditCursor = m_preeditCursor; m_preeditCursor = event->preeditString().length(); hasImState = !event->preeditString().isEmpty(); diff --git a/src/quick/items/qquicktextinput_p.h b/src/quick/items/qquicktextinput_p.h index 8733b31960..2dcc67a856 100644 --- a/src/quick/items/qquicktextinput_p.h +++ b/src/quick/items/qquicktextinput_p.h @@ -88,6 +88,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTextInput : public QQuickImplicitSizeItem Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged) Q_PROPERTY(int passwordMaskDelay READ passwordMaskDelay WRITE setPasswordMaskDelay RESET resetPasswordMaskDelay NOTIFY passwordMaskDelayChanged REVISION 3) Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged) + Q_PROPERTY(QString preeditText READ preeditText NOTIFY preeditTextChanged REVISION 7) Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged) Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged) Q_PROPERTY(SelectionMode mouseSelectionMode READ mouseSelectionMode WRITE setMouseSelectionMode NOTIFY mouseSelectionModeChanged) @@ -233,6 +234,7 @@ public: void resetPasswordMaskDelay(); QString displayText() const; + Q_REVISION(7) QString preeditText() const; QQmlComponent* cursorDelegate() const; void setCursorDelegate(QQmlComponent*); @@ -324,6 +326,7 @@ Q_SIGNALS: void passwordCharacterChanged(); Q_REVISION(3) void passwordMaskDelayChanged(int delay); void displayTextChanged(); + Q_REVISION(7) void preeditTextChanged(); void activeFocusOnPressChanged(bool activeFocusOnPress); void autoScrollChanged(bool autoScroll); void selectByMouseChanged(bool selectByMouse); diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index 2a687b3c69..1e5b7b3848 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -2252,6 +2252,19 @@ void tst_qquicktextinput::inputMethods() QGuiApplication::sendEvent(input, &preeditEvent); QCOMPARE(input->text(), QString("Our Goodbye world!")); QCOMPARE(input->displayText(), QString("Our GooPREEDITdbye world!")); + QCOMPARE(input->preeditText(), QString("PREEDIT")); + + QInputMethodEvent preeditEvent2("PREEDIT2", QList<QInputMethodEvent::Attribute>()); + QGuiApplication::sendEvent(input, &preeditEvent2); + QCOMPARE(input->text(), QString("Our Goodbye world!")); + QCOMPARE(input->displayText(), QString("Our GooPREEDIT2dbye world!")); + QCOMPARE(input->preeditText(), QString("PREEDIT2")); + + QInputMethodEvent preeditEvent3("", QList<QInputMethodEvent::Attribute>()); + QGuiApplication::sendEvent(input, &preeditEvent3); + QCOMPARE(input->text(), QString("Our Goodbye world!")); + QCOMPARE(input->displayText(), QString("Our Goodbye world!")); + QCOMPARE(input->preeditText(), QString("")); // input should reset selection even if replacement parameters are out of bounds input->setText("text"); |