aboutsummaryrefslogtreecommitdiffstats
path: root/src/virtualkeyboard/inputcontext.cpp
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2016-12-29 23:31:38 +0200
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2017-01-14 10:43:01 +0000
commit72d68339c4ff4ad2a45e057c7ea026cf33de5499 (patch)
tree9c41811cb1ee177a5f200566e5ae0ab445761881 /src/virtualkeyboard/inputcontext.cpp
parent0b52c34bdc390788c9e5cb8ea3e9d3ca6f9d7695 (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.cpp19
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;