diff options
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 15 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.h | 6 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol.cpp | 18 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol_p.h | 6 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol_p_p.h | 1 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 20 |
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."); |