aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickitemsmodule.cpp1
-rw-r--r--src/quick/items/qquicktextinput.cpp19
-rw-r--r--src/quick/items/qquicktextinput_p.h3
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp13
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");