diff options
author | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2012-01-20 14:07:20 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 15:38:09 +0100 |
commit | ed576da6712d881b87a3fffcbddbae925157d265 (patch) | |
tree | 57fc5d5e2fd8ef7fd27fa45e18d5b94771effa4c /src | |
parent | 8aa187fec80810d37107341ca6dc53264187ae9d (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.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquickitem.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 23 |
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) |