summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qlinecontrol.cpp
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2011-11-15 15:09:55 +0200
committerQt by Nokia <qt-info@nokia.com>2011-11-21 22:45:36 +0100
commit7a0c0602685ddf0c5f15a8f3bd6ae8336cf9c858 (patch)
tree1d6a109c94d18f3d2e252cf67ea6d61230efd090 /src/gui/text/qlinecontrol.cpp
parent9eba201a48874c93f398c7c1c053b5ddbeda7712 (diff)
Support input method tentative commit string in QLineControl
Implements similar behavior as 8bd40fef0733a4796a308b3bc137a05296e142c4 did for QLineEdit. Change-Id: I55de1f9a6703aca629f2e84398e481636c96eeca Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/gui/text/qlinecontrol.cpp')
-rw-r--r--src/gui/text/qlinecontrol.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/src/gui/text/qlinecontrol.cpp b/src/gui/text/qlinecontrol.cpp
index 7b7b2ac132..91a07d926e 100644
--- a/src/gui/text/qlinecontrol.cpp
+++ b/src/gui/text/qlinecontrol.cpp
@@ -347,6 +347,30 @@ QRect QLineControl::cursorRect() const
return QRect(cix-5, 0, w+9, ch);
}
+QString QLineControl::text() const
+{
+ QString content = m_text;
+ if (!m_tentativeCommit.isEmpty())
+ content.insert(m_cursor, m_tentativeCommit);
+ QString res = m_maskData ? stripString(content) : content;
+ return (res.isNull() ? QString::fromLatin1("") : res);
+}
+
+// like text() but doesn't include preedit
+QString QLineControl::realText() const
+{
+ QString res = m_maskData ? stripString(m_text) : m_text;
+ return (res.isNull() ? QString::fromLatin1("") : res);
+}
+
+void QLineControl::setText(const QString &txt)
+{
+ if (composeMode())
+ qApp->inputPanel()->reset();
+ m_tentativeCommit.clear();
+ internalSetText(txt, -1, false);
+}
+
/*!
\internal
@@ -414,7 +438,7 @@ void QLineControl::moveCursor(int pos, bool mark)
*/
void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
{
- int priorState = 0;
+ int priorState = -1;
bool isGettingInput = !event->commitString().isEmpty()
|| event->preeditString() != preeditAreaText()
|| event->replacementLength() > 0;
@@ -499,7 +523,15 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
emitCursorPositionChanged();
else if (m_preeditCursor != oldPreeditCursor)
emit updateMicroFocus();
- if (isGettingInput)
+
+ bool tentativeCommitChanged = (m_tentativeCommit != event->tentativeCommitString());
+
+ if (tentativeCommitChanged) {
+ m_textDirty = true;
+ m_tentativeCommit = event->tentativeCommitString();
+ }
+
+ if (isGettingInput || tentativeCommitChanged)
finishChange(priorState);
if (selectionChange)
@@ -598,7 +630,6 @@ bool QLineControl::finishChange(int validateFromState, bool update, bool edited)
m_validInput = true;
#ifndef QT_NO_VALIDATOR
if (m_validator) {
- m_validInput = false;
QString textCopy = m_text;
int cursorCopy = m_cursor;
m_validInput = (m_validator->validate(textCopy, cursorCopy) != QValidator::Invalid);
@@ -608,6 +639,15 @@ bool QLineControl::finishChange(int validateFromState, bool update, bool edited)
return true;
}
m_cursor = cursorCopy;
+
+ if (!m_tentativeCommit.isEmpty()) {
+ textCopy.insert(m_cursor, m_tentativeCommit);
+ bool validInput = (m_validator->validate(textCopy, cursorCopy) != QValidator::Invalid);
+ if (!validInput)
+ m_tentativeCommit.clear();
+ }
+ } else {
+ m_tentativeCommit.clear();
}
}
#endif