From dc3446c1e35fb451070654709fe3c9b71eef7bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Tue, 26 Jan 2021 12:53:25 +0100 Subject: [PATCH] Make setSelectionOnFocusObject() take native pixels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the setSelectionOnFocusObject() to take geometry arguments in native pixels, in order to be consistent with other QPlatformInputContext API. Calling code which pass non-native geometry must be updated (in practice only the Android platform plugin). Change-Id: I1c61b8cf583afe607567d6056ca7ff23cc3de3f3 Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qplatforminputcontext.cpp | 14 +++++++++----- .../platforms/android/qandroidinputcontext.cpp | 7 +------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/gui/kernel/qplatforminputcontext.cpp b/src/gui/kernel/qplatforminputcontext.cpp index e5a1368fe8..0326744482 100644 --- a/src/gui/kernel/qplatforminputcontext.cpp +++ b/src/gui/kernel/qplatforminputcontext.cpp @@ -271,16 +271,20 @@ void QPlatformInputContextPrivate::setInputMethodAccepted(bool accepted) } /*! - * \brief QPlatformInputContext::setSelectionOnFocusObject - * \param anchorPos Beginning of selection in currently active window coordinates - * \param cursorPos End of selection in currently active window coordinates - */ -void QPlatformInputContext::setSelectionOnFocusObject(const QPointF &anchorPos, const QPointF &cursorPos) + \brief QPlatformInputContext::setSelectionOnFocusObject + \param anchorPos Beginning of selection in currently active window native coordinates + \param cursorPos End of selection in currently active window native coordinates +*/ +void QPlatformInputContext::setSelectionOnFocusObject(const QPointF &nativeAnchorPos, const QPointF &nativeCursorPos) { QObject *focus = qApp->focusObject(); if (!focus) return; + QWindow *window = qApp->focusWindow(); + const QPointF &anchorPos = QHighDpi::fromNativePixels(nativeAnchorPos, window); + const QPointF &cursorPos = QHighDpi::fromNativePixels(nativeCursorPos, window); + QInputMethod *im = QGuiApplication::inputMethod(); const QTransform mapToLocal = im->inputItemTransform().inverted(); bool success; diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 24cb261e6f..211f0e4d95 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -824,12 +824,7 @@ void QAndroidInputContext::longPress(int x, int y) BatchEditLock batchEditLock(this); focusObjectStopComposing(); - - const double pixelDensity = - QGuiApplication::focusWindow() - ? QHighDpiScaling::factor(QGuiApplication::focusWindow()) - : QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen()); - const QPointF touchPoint(x / pixelDensity, y / pixelDensity); + const QPointF touchPoint(x, y); setSelectionOnFocusObject(touchPoint, touchPoint); QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImTextBeforeCursor | Qt::ImTextAfterCursor);