summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qtextedit.cpp15
-rw-r--r--src/widgets/widgets/qtextedit.h6
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp18
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p.h6
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p_p.h1
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp20
6 files changed, 56 insertions, 10 deletions
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index f345cb2f7c..73d78171db 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -1099,13 +1099,17 @@ void QTextEdit::setPlainText(const QString &text)
}
/*!
- \fn QString QTextEdit::toPlainText() const
+ QString QTextEdit::toPlainText() const
Returns the text of the text edit as plain text.
\sa QTextEdit::setPlainText()
*/
-
+QString QTextEdit::toPlainText() const
+{
+ Q_D(const QTextEdit);
+ return d->control->toPlainText();
+}
/*!
\property QTextEdit::html
@@ -1135,8 +1139,15 @@ void QTextEdit::setHtml(const QString &text)
d->control->setHtml(text);
d->preferRichText = true;
}
+
+QString QTextEdit::toHtml() const
+{
+ Q_D(const QTextEdit);
+ return d->control->toHtml();
+}
#endif
+
/*! \reimp
*/
void QTextEdit::keyPressEvent(QKeyEvent *e)
diff --git a/src/widgets/widgets/qtextedit.h b/src/widgets/widgets/qtextedit.h
index 1fcf87cdf7..ae9865977f 100644
--- a/src/widgets/widgets/qtextedit.h
+++ b/src/widgets/widgets/qtextedit.h
@@ -162,11 +162,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
void ensureCursorVisible();
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index d48ee9a2ae..b6432ee53f 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -1991,7 +1991,10 @@ void QWidgetTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
}
}
layout->setAdditionalFormats(overrides);
+ tentativeCommit = e->tentativeCommitString();
+
cursor.endEditBlock();
+
if (cursor.d)
cursor.d->setX();
if (oldPreeditCursor != preeditCursor)
@@ -2909,7 +2912,22 @@ bool QWidgetTextControl::find(const QString &exp, QTextDocument::FindFlags optio
return true;
}
+QString QWidgetTextControl::toPlainText() const
+{
+ Q_D(const QWidgetTextControl);
+ QString plainText = document()->toPlainText();
+ if (!d->tentativeCommit.isEmpty())
+ plainText.insert(textCursor().position(), d->tentativeCommit);
+ return plainText;
+}
+#ifndef QT_NO_TEXTHTMLPARSER
+QString QWidgetTextControl::toHtml() const
+{
+ // note: currently not including tentative commit
+ return document()->toHtml();
+}
+#endif
void QWidgetTextControlPrivate::append(const QString &text, Qt::TextFormat format)
{
diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h
index f1ac09d459..1550959ebe 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p.h
@@ -114,11 +114,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/widgets/widgets/qwidgettextcontrol_p_p.h b/src/widgets/widgets/qwidgettextcontrol_p_p.h
index 613d1a6097..f53e0808b8 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p_p.h
@@ -208,6 +208,7 @@ public:
int preeditCursor;
bool hideCursor; // used to hide the cursor in the preedit area
+ QString tentativeCommit;
QVector<QAbstractTextDocumentLayout::Selection> extraSelections;
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index a9c063a086..ab128a2ce2 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
@@ -202,6 +202,7 @@ private slots:
void bidiLogicalMovement_data();
void bidiLogicalMovement();
+ void inputMethodEvent();
void inputMethodSelection();
void inputMethodQuery();
@@ -2363,6 +2364,25 @@ void tst_QTextEdit::bidiLogicalMovement()
} while (moved && i >= 0);
}
+void tst_QTextEdit::inputMethodEvent()
+{
+ // test that text change with an input method event triggers change signal
+ QSignalSpy spy(ed, SIGNAL(textChanged()));
+
+ QInputMethodEvent event;
+ event.setCommitString("text");
+ QApplication::sendEvent(ed, &event);
+ QCOMPARE(spy.count(), 1);
+ spy.clear();
+
+ QList<QInputMethodEvent::Attribute> attributes;
+ QInputMethodEvent event2("preedit", attributes);
+ event2.setTentativeCommitString("string");
+ QApplication::sendEvent(ed, &event2);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(ed->toPlainText(), QString("textstring"));
+}
+
void tst_QTextEdit::inputMethodSelection()
{
ed->setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");