From bd8188ebd4a4d8819a5d3bf85f01ce69d41f4f1e Mon Sep 17 00:00:00 2001 From: Pekka Vuorela Date: Tue, 15 Nov 2011 18:05:27 +0200 Subject: Support better committing preedit in QLineController Similar as 7851568c65e0560056c6fa541039543d43a63e20 for QWidgetLineController Change-Id: I7c1a1dc22e9b73515a5a72093866ac747a80896f Reviewed-by: Lars Knoll --- src/gui/text/qlinecontrol.cpp | 28 ++++++++++++++++++++++++++++ src/gui/text/qlinecontrol_p.h | 1 + 2 files changed, 29 insertions(+) (limited to 'src/gui') diff --git a/src/gui/text/qlinecontrol.cpp b/src/gui/text/qlinecontrol.cpp index 91a07d926e..62f4515fcc 100644 --- a/src/gui/text/qlinecontrol.cpp +++ b/src/gui/text/qlinecontrol.cpp @@ -148,6 +148,30 @@ void QLineControl::paste(QClipboard::Mode clipboardMode) #endif // !QT_NO_CLIPBOARD +/*! + \internal + + Exits preedit mode and commits parts marked as tentative commit +*/ +void QLineControl::commitPreedit() +{ + if (!composeMode()) + return; + + qApp->inputPanel()->reset(); + + if (!m_tentativeCommit.isEmpty()) { + internalInsert(m_tentativeCommit); + m_tentativeCommit.clear(); + finishChange(-1, true/*not used, not documented*/, false); + } + + m_preeditCursor = 0; + setPreeditArea(-1, QString()); + m_textLayout.clearAdditionalFormats(); + updateDisplayText(/*force*/ true); +} + /*! \internal @@ -243,6 +267,8 @@ void QLineControl::clear() */ void QLineControl::setSelection(int start, int length) { + commitPreedit(); + if(start < 0 || start > (int)m_text.length()){ qWarning("QLineControl::setSelection: Invalid start position"); return; @@ -403,6 +429,8 @@ bool QLineControl::fixup() // this function assumes that validate currently retu */ void QLineControl::moveCursor(int pos, bool mark) { + commitPreedit(); + if (pos != m_cursor) { separate(); if (m_maskData) diff --git a/src/gui/text/qlinecontrol_p.h b/src/gui/text/qlinecontrol_p.h index 7f5244ee07..4970a8c05e 100644 --- a/src/gui/text/qlinecontrol_p.h +++ b/src/gui/text/qlinecontrol_p.h @@ -209,6 +209,7 @@ public: QString text() const; QString realText() const; void setText(const QString &txt); + void commitPreedit(); QString displayText() const { return m_textLayout.text(); } -- cgit v1.2.3