From b19408d0692a9ca426b2014d84a2d568d9f281b2 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sat, 6 Jan 2024 23:15:05 +0400 Subject: [PATCH] client: Fix text-input set_cursor_rectangle coordinates They should be converted to native ones and shouldn't contain server-side decorations Pick-to: 6.7 6.6 6.5 Change-Id: Ia701edc22b68bec2fa46e95d7a812621142dcde0 Reviewed-by: David Edmundson --- src/plugins/platforms/wayland/qwaylandtextinputv1.cpp | 6 ++++-- src/plugins/platforms/wayland/qwaylandtextinputv2.cpp | 6 ++++-- src/plugins/platforms/wayland/qwaylandtextinputv3.cpp | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandtextinputv1.cpp b/src/plugins/platforms/wayland/qwaylandtextinputv1.cpp index da8bbae71b8..3b45322b13e 100644 --- a/src/plugins/platforms/wayland/qwaylandtextinputv1.cpp +++ b/src/plugins/platforms/wayland/qwaylandtextinputv1.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -127,8 +128,9 @@ void QWaylandTextInputv1::updateState(Qt::InputMethodQueries queries, uint32_t f if (queries & Qt::ImCursorRectangle) { const QRect &cRect = event.value(Qt::ImCursorRectangle).toRect(); const QRect &windowRect = QGuiApplication::inputMethod()->inputItemTransform().mapRect(cRect); - const QMargins margins = window->frameMargins(); - const QRect &surfaceRect = windowRect.translated(margins.left(), margins.top()); + const QRect &nativeRect = QHighDpi::toNativePixels(windowRect, QGuiApplication::focusWindow()); + const QMargins margins = window->clientSideMargins(); + const QRect &surfaceRect = nativeRect.translated(margins.left(), margins.top()); set_cursor_rectangle(surfaceRect.x(), surfaceRect.y(), surfaceRect.width(), surfaceRect.height()); } diff --git a/src/plugins/platforms/wayland/qwaylandtextinputv2.cpp b/src/plugins/platforms/wayland/qwaylandtextinputv2.cpp index 89a8a6d77d7..9d462f7d60b 100644 --- a/src/plugins/platforms/wayland/qwaylandtextinputv2.cpp +++ b/src/plugins/platforms/wayland/qwaylandtextinputv2.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -134,8 +135,9 @@ void QWaylandTextInputv2::updateState(Qt::InputMethodQueries queries, uint32_t f if (queries & Qt::ImCursorRectangle) { const QRect &cRect = event.value(Qt::ImCursorRectangle).toRect(); const QRect &windowRect = QGuiApplication::inputMethod()->inputItemTransform().mapRect(cRect); - const QMargins margins = window->frameMargins(); - const QRect &surfaceRect = windowRect.translated(margins.left(), margins.top()); + const QRect &nativeRect = QHighDpi::toNativePixels(windowRect, QGuiApplication::focusWindow()); + const QMargins margins = window->clientSideMargins(); + const QRect &surfaceRect = nativeRect.translated(margins.left(), margins.top()); set_cursor_rectangle(surfaceRect.x(), surfaceRect.y(), surfaceRect.width(), surfaceRect.height()); } diff --git a/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp b/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp index ad43ff1bc09..4344667a2e3 100644 --- a/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp +++ b/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -236,8 +237,9 @@ void QWaylandTextInputv3::updateState(Qt::InputMethodQueries queries, uint32_t f if (queries & Qt::ImCursorRectangle) { const QRect &cRect = event.value(Qt::ImCursorRectangle).toRect(); const QRect &windowRect = QGuiApplication::inputMethod()->inputItemTransform().mapRect(cRect); - const QMargins margins = window->frameMargins(); - const QRect &surfaceRect = windowRect.translated(margins.left(), margins.top()); + const QRect &nativeRect = QHighDpi::toNativePixels(windowRect, QGuiApplication::focusWindow()); + const QMargins margins = window->clientSideMargins(); + const QRect &surfaceRect = nativeRect.translated(margins.left(), margins.top()); if (surfaceRect != m_cursorRect) { set_cursor_rectangle(surfaceRect.x(), surfaceRect.y(), surfaceRect.width(), surfaceRect.height()); m_cursorRect = surfaceRect;