aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextedit.cpp4
-rw-r--r--src/quick/items/qquicktextcontrol.cpp19
-rw-r--r--src/quick/items/qquicktextcontrol_p.h6
-rw-r--r--src/quick/items/qquicktextcontrol_p_p.h1
-rw-r--r--src/quick/items/qquicktextedit.cpp4
-rw-r--r--tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp14
6 files changed, 39 insertions, 9 deletions
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp b/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp
index b547deacca..8013d40a2d 100644
--- a/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp
@@ -130,10 +130,10 @@ QString QDeclarative1TextEdit::text() const
#ifndef QT_NO_TEXTHTMLPARSER
if (d->richText)
- return d->document->toHtml();
+ return d->control->toHtml();
else
#endif
- return d->document->toPlainText();
+ return d->control->toPlainText();
}
/*!
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp
index cd4d853a88..436b6b7ae9 100644
--- a/src/quick/items/qquicktextcontrol.cpp
+++ b/src/quick/items/qquicktextcontrol.cpp
@@ -1869,7 +1869,10 @@ void QQuickTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
}
}
layout->setAdditionalFormats(overrides);
+ tentativeCommit = e->tentativeCommitString();
+
cursor.endEditBlock();
+
QTextCursorPrivate *cursor_d = QTextCursorPrivate::getPrivate(&cursor);
if (cursor_d)
cursor_d->setX();
@@ -2696,6 +2699,22 @@ void QQuickTextControl::appendPlainText(const QString &text)
d->append(text, Qt::PlainText);
}
+QString QQuickTextControl::toPlainText() const
+{
+ Q_D(const QQuickTextControl);
+ QString plainText = document()->toPlainText();
+ if (!d->tentativeCommit.isEmpty())
+ plainText.insert(textCursor().position(), d->tentativeCommit);
+ return plainText;
+}
+
+#ifndef QT_NO_TEXTHTMLPARSER
+QString QQuickTextControl::toHtml() const
+{
+ // note: currently not including tentative commit
+ return document()->toHtml();
+}
+#endif
void QQuickTextControl::ensureCursorVisible()
{
diff --git a/src/quick/items/qquicktextcontrol_p.h b/src/quick/items/qquicktextcontrol_p.h
index e8bfe14766..2e42625fdc 100644
--- a/src/quick/items/qquicktextcontrol_p.h
+++ b/src/quick/items/qquicktextcontrol_p.h
@@ -115,11 +115,9 @@ public:
bool find(const QString &exp, QTextDocument::FindFlags options = 0);
- inline QString toPlainText() const
- { return document()->toPlainText(); }
+ QString toPlainText() const;
#ifndef QT_NO_TEXTHTMLPARSER
- inline QString toHtml() const
- { return document()->toHtml(); }
+ QString toHtml() const;
#endif
virtual void ensureCursorVisible();
diff --git a/src/quick/items/qquicktextcontrol_p_p.h b/src/quick/items/qquicktextcontrol_p_p.h
index e75c53714a..8c06899e02 100644
--- a/src/quick/items/qquicktextcontrol_p_p.h
+++ b/src/quick/items/qquicktextcontrol_p_p.h
@@ -202,6 +202,7 @@ public:
int preeditCursor;
bool hideCursor; // used to hide the cursor in the preedit area
+ QString tentativeCommit;
QVector<QAbstractTextDocumentLayout::Selection> extraSelections;
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 91b0b0d90b..f0679c4861 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -129,10 +129,10 @@ QString QQuickTextEdit::text() const
#ifndef QT_NO_TEXTHTMLPARSER
if (d->richText)
- return d->document->toHtml();
+ return d->control->toHtml();
else
#endif
- return d->document->toPlainText();
+ return d->control->toPlainText();
}
/*!
diff --git a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp
index c34d8255ba..9e8af5617d 100644
--- a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp
+++ b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp
@@ -1984,16 +1984,28 @@ void tst_qquicktextedit::textInput()
QVERIFY(edit);
QVERIFY(edit->hasActiveFocus() == true);
- // test that input method event is committed
+ // test that input method event is committed and change signal is emitted
+ QSignalSpy spy(edit, SIGNAL(textChanged(QString)));
QInputMethodEvent event;
event.setCommitString( "Hello world!", 0, 0);
QGuiApplication::sendEvent(qGuiApp->inputPanel()->inputItem(), &event);
QCOMPARE(edit->text(), QString("Hello world!"));
+ QCOMPARE(spy.count(), 1);
// QTBUG-12339
// test that document and internal text attribute are in sync
QQuickTextEditPrivate *editPrivate = static_cast<QQuickTextEditPrivate*>(QQuickItemPrivate::get(edit));
QCOMPARE(editPrivate->text, QString("Hello world!"));
+
+ // test that tentative commit is included in text property
+ edit->setText("");
+ spy.clear();
+ QList<QInputMethodEvent::Attribute> attributes;
+ QInputMethodEvent event2("preedit", attributes);
+ event2.setTentativeCommitString("string");
+ QGuiApplication::sendEvent(qGuiApp->inputPanel()->inputItem(), &event2);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(edit->text(), QString("string"));
}
class PlatformInputContext : public QPlatformInputContext