QQuickTextInput: added preeditText property

Task-number: QTBUG-49503
Change-Id: I803c9fc3bddba81d08e1dd450bc5a5f8a5605720
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
This commit is contained in:
Liang Qi 2015-12-30 10:43:22 +01:00
parent 1c5dd75ee6
commit 1a4346d112
4 changed files with 36 additions and 0 deletions

View File

@ -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()

View File

@ -2184,6 +2184,7 @@ void QQuickTextInput::resetPasswordMaskDelay()
partial text input from an input method.
\readonly
\sa preeditText
*/
QString QQuickTextInput::displayText() const
{
@ -2191,6 +2192,21 @@ QString QQuickTextInput::displayText() const
return d->m_textLayout.text().insert(d->m_textLayout.preeditAreaPosition(), d->m_textLayout.preeditAreaText());
}
/*!
\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
@ -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();

View File

@ -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);

View File

@ -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");