From 72d68339c4ff4ad2a45e057c7ea026cf33de5499 Mon Sep 17 00:00:00 2001 From: Jarkko Koivikko Date: Thu, 29 Dec 2016 23:31:38 +0200 Subject: 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 --- src/virtualkeyboard/inputcontext.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/virtualkeyboard/inputcontext.cpp') 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; -- cgit v1.2.3