diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2016-12-29 23:31:38 +0200 |
---|---|---|
committer | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-01-14 10:43:01 +0000 |
commit | 72d68339c4ff4ad2a45e057c7ea026cf33de5499 (patch) | |
tree | 9c41811cb1ee177a5f200566e5ae0ab445761881 /src/virtualkeyboard/inputcontext.cpp | |
parent | 0b52c34bdc390788c9e5cb8ea3e9d3ca6f9d7695 (diff) |
Prefer single input method query instead of multiple
QInputMethodQueryEvent supports multiple queries.
This change uses this feature in InputContext::update() method.
Using single combined query is little faster (approx. 35-40%) than 7
separate queries.
Change-Id: Ie968f40c91f6b61ad52c051eccf1ca932e8d2cc5
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/virtualkeyboard/inputcontext.cpp')
-rw-r--r-- | src/virtualkeyboard/inputcontext.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/virtualkeyboard/inputcontext.cpp b/src/virtualkeyboard/inputcontext.cpp index cc8b9ef8..280c2225 100644 --- a/src/virtualkeyboard/inputcontext.cpp +++ b/src/virtualkeyboard/inputcontext.cpp @@ -659,13 +659,16 @@ void InputContext::update(Qt::InputMethodQueries queries) Q_UNUSED(queries); // fetch - Qt::InputMethodHints inputMethodHints = Qt::InputMethodHints(d->inputContext->inputMethodQuery(Qt::ImHints).toInt()); - const int cursorPosition = d->inputContext->inputMethodQuery(Qt::ImCursorPosition).toInt(); - const int anchorPosition = d->inputContext->inputMethodQuery(Qt::ImAnchorPosition).toInt(); + QInputMethodQueryEvent imQueryEvent(Qt::InputMethodQueries(Qt::ImHints | + Qt::ImQueryInput | Qt::ImInputItemClipRectangle)); + d->inputContext->sendEvent(&imQueryEvent); + Qt::InputMethodHints inputMethodHints = Qt::InputMethodHints(imQueryEvent.value(Qt::ImHints).toInt()); + const int cursorPosition = imQueryEvent.value(Qt::ImCursorPosition).toInt(); + const int anchorPosition = imQueryEvent.value(Qt::ImAnchorPosition).toInt(); QRectF anchorRectangle = qApp->inputMethod()->anchorRectangle(); QRectF cursorRectangle = qApp->inputMethod()->cursorRectangle(); - QString surroundingText = d->inputContext->inputMethodQuery(Qt::ImSurroundingText).toString(); - QString selectedText = d->inputContext->inputMethodQuery(Qt::ImCurrentSelection).toString(); + QString surroundingText = imQueryEvent.value(Qt::ImSurroundingText).toString(); + QString selectedText = imQueryEvent.value(Qt::ImCurrentSelection).toString(); // check against changes bool newInputMethodHints = inputMethodHints != d->inputMethodHints; @@ -677,9 +680,9 @@ void InputContext::update(Qt::InputMethodQueries queries) bool selectionControlVisible = d->inputContext->isInputPanelVisible() && (cursorPosition != anchorPosition); bool newSelectionControlVisible = selectionControlVisible != d->selectionControlVisible; - QRectF inputItemClipRect = d->inputContext->inputMethodQuery(Qt::ImInputItemClipRectangle).toRectF(); - QRectF anchorRect = d->inputContext->inputMethodQuery(Qt::ImAnchorRectangle).toRectF(); - QRectF cursorRect = d->inputContext->inputMethodQuery(Qt::ImCursorRectangle).toRectF(); + QRectF inputItemClipRect = imQueryEvent.value(Qt::ImInputItemClipRectangle).toRectF(); + QRectF anchorRect = imQueryEvent.value(Qt::ImAnchorRectangle).toRectF(); + QRectF cursorRect = imQueryEvent.value(Qt::ImCursorRectangle).toRectF(); bool anchorRectIntersectsClipRect = inputItemClipRect.intersects(anchorRect); bool newAnchorRectIntersectsClipRect = anchorRectIntersectsClipRect != d->anchorRectIntersectsClipRect; |