aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2012-01-20 14:07:20 +0200
committerQt by Nokia <qt-info@nokia.com>2012-01-27 15:38:09 +0100
commited576da6712d881b87a3fffcbddbae925157d265 (patch)
tree57fc5d5e2fd8ef7fd27fa45e18d5b94771effa4c /src
parent8aa187fec80810d37107341ca6dc53264187ae9d (diff)
Enhance editors notifying input panel for input method changes
Introduced protected QQuickItem::updateInputMethod() and removed similar, but badly named updateMicroFocus(). Added some missing notifications from the editors and avoided unnecessary updates when not having focus. Change-Id: Id5c00e87dc26fd35c3f919006817511d4ed6418d Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com> Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickitem.cpp16
-rw-r--r--src/quick/items/qquickitem.h3
-rw-r--r--src/quick/items/qquicktextedit.cpp4
-rw-r--r--src/quick/items/qquicktextinput.cpp23
4 files changed, 26 insertions, 20 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index 49084639d5..844d1ede6b 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -3081,13 +3081,6 @@ void QQuickItem::setInputMethodHints(Qt::InputMethodHints hints)
qApp->inputPanel()->update(Qt::ImHints);
}
-void QQuickItem::updateMicroFocus()
-{
- QInputPanel *p = qApp->inputPanel();
- if (p->inputItem() == this)
- qApp->inputPanel()->update(Qt::ImQueryInput);
-}
-
QVariant QQuickItem::inputMethodQuery(Qt::InputMethodQuery query) const
{
Q_D(const QQuickItem);
@@ -3608,6 +3601,15 @@ void QQuickItem::itemChange(ItemChange change, const ItemChangeData &value)
Q_UNUSED(value);
}
+/*!
+ Notify input method on updated query values if needed. \a indicates changed attributes.
+*/
+void QQuickItem::updateInputMethod(Qt::InputMethodQueries queries)
+{
+ if (hasActiveFocus())
+ qApp->inputPanel()->update(queries);
+}
+
/*! \internal */
// XXX todo - do we want/need this anymore?
// Note that it's now used for varying clip rect
diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h
index 0dd896af3d..684910a112 100644
--- a/src/quick/items/qquickitem.h
+++ b/src/quick/items/qquickitem.h
@@ -324,7 +324,6 @@ public:
public Q_SLOTS:
void update();
- void updateMicroFocus();
Q_SIGNALS:
void childrenRectChanged(const QRectF &);
@@ -359,6 +358,8 @@ protected:
bool isComponentComplete() const;
virtual void itemChange(ItemChange, const ItemChangeData &);
+ void updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput);
+
void setImplicitWidth(qreal);
bool widthValid() const; // ### better name?
void setImplicitHeight(qreal);
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index 37c76c09a3..126003906e 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -373,6 +373,7 @@ void QQuickTextEdit::setFont(const QFont &font)
}
updateSize();
updateDocument();
+ updateInputMethod(Qt::ImCursorRectangle | Qt::ImFont);
}
emit fontChanged(d->sourceFont);
}
@@ -1248,6 +1249,7 @@ void QQuickTextEdit::setReadOnly(bool r)
if (!r)
d->control->moveCursor(QTextCursor::End);
+ updateInputMethod(Qt::ImEnabled);
q_canPasteChanged();
emit readOnlyChanged(r);
}
@@ -1853,7 +1855,7 @@ void QQuickTextEdit::moveCursorDelegate()
{
Q_D(QQuickTextEdit);
d->determineHorizontalAlignment();
- updateMicroFocus();
+ updateInputMethod();
emit cursorRectangleChanged();
if (!d->cursor)
return;
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index 08892e1922..9d36ded9cc 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -306,7 +306,7 @@ void QQuickTextInput::setFont(const QFont &font)
if (oldFont != d->font) {
d->updateLayout();
updateCursorRectangle();
- qApp->inputPanel()->update(Qt::ImCursorRectangle | Qt::ImFont);
+ updateInputMethod(Qt::ImCursorRectangle | Qt::ImFont);
}
emit fontChanged(d->sourceFont);
}
@@ -575,6 +575,7 @@ void QQuickTextInput::setReadOnly(bool ro)
d->m_readOnly = ro;
if (!ro)
d->setCursorPosition(d->end());
+ updateInputMethod(Qt::ImEnabled);
q_canPasteChanged();
d->emitUndoRedoChanged();
emit readOnlyChanged(ro);
@@ -2508,6 +2509,7 @@ void QQuickTextInput::updateCursorRectangle()
d->cursorItem->setPos(r.topLeft());
d->cursorItem->setHeight(r.height());
}
+ updateInputMethod(Qt::ImCursorRectangle);
}
void QQuickTextInput::selectionChanged()
@@ -2873,8 +2875,8 @@ void QQuickTextInputPrivate::setSelection(int start, int length)
}
emit q->selectionChanged();
emitCursorPositionChanged();
- qApp->inputPanel()->update(Qt::ImCursorRectangle | Qt::ImAnchorPosition
- | Qt::ImCursorPosition | Qt::ImCurrentSelection);
+ q->updateInputMethod(Qt::ImCursorRectangle | Qt::ImAnchorPosition
+ | Qt::ImCursorPosition | Qt::ImCurrentSelection);
}
/*!
@@ -2964,7 +2966,7 @@ void QQuickTextInputPrivate::moveCursor(int pos, bool mark)
emit q->selectionChanged();
}
emitCursorPositionChanged();
- q->updateMicroFocus();
+ q->updateInputMethod();
}
/*!
@@ -3065,7 +3067,6 @@ void QQuickTextInputPrivate::processInputMethodEvent(QInputMethodEvent *event)
emitCursorPositionChanged();
} else if (m_preeditCursor != oldPreeditCursor) {
q->updateCursorRectangle();
- qApp->inputPanel()->update(Qt::ImCursorRectangle);
}
bool tentativeCommitChanged = m_tentativeCommit != event->tentativeCommitString();
@@ -3080,8 +3081,8 @@ void QQuickTextInputPrivate::processInputMethodEvent(QInputMethodEvent *event)
if (selectionChange) {
emit q->selectionChanged();
- qApp->inputPanel()->update(Qt::ImCursorRectangle | Qt::ImAnchorPosition
- | Qt::ImCursorPosition | Qt::ImCurrentSelection);
+ q->updateInputMethod(Qt::ImCursorRectangle | Qt::ImAnchorPosition
+ | Qt::ImCursorPosition | Qt::ImCurrentSelection);
}
}
@@ -3123,7 +3124,7 @@ bool QQuickTextInputPrivate::finishChange(int validateFromState, bool update, bo
Q_Q(QQuickTextInput);
Q_UNUSED(update)
- bool notifyInputPanel = m_textDirty || m_selDirty;
+ bool inputMethodAttributesChanged = m_textDirty || m_selDirty;
bool alignmentChanged = false;
if (m_textDirty) {
@@ -3194,9 +3195,9 @@ bool QQuickTextInputPrivate::finishChange(int validateFromState, bool update, bo
emit q->selectionChanged();
}
- notifyInputPanel |= (m_cursor == m_lastCursorPos);
- if (notifyInputPanel)
- q->updateMicroFocus();
+ inputMethodAttributesChanged |= (m_cursor == m_lastCursorPos);
+ if (inputMethodAttributesChanged)
+ q->updateInputMethod();
emitUndoRedoChanged();
if (!emitCursorPositionChanged() && alignmentChanged)