aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2011-12-09 15:15:21 +0200
committerQt by Nokia <qt-info@nokia.com>2011-12-14 11:53:32 +0100
commit85328b975027c6e26bcaf2dd660acd3118049fd2 (patch)
tree64a241bc3155f01227a7c2867ae358005e75005e
parentb0133b8fa4b1ad9a887fa6718983711b560a35ef (diff)
TextEdits to include tentative commit in text property
Similar to what qtbase 1dbfbf4c66187e7522888c19d78024cfceaea570 did for QTextEdit. Now available only in plain text, html support pending. Change-Id: I0b23a45fc484512d3354f66e1a6134e2d70eb8b5 Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com> Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
-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