summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandtextinputv2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylandtextinputv2.cpp')
-rw-r--r--src/client/qwaylandtextinputv2.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/client/qwaylandtextinputv2.cpp b/src/client/qwaylandtextinputv2.cpp
index 402f5b557..9d462f7d6 100644
--- a/src/client/qwaylandtextinputv2.cpp
+++ b/src/client/qwaylandtextinputv2.cpp
@@ -11,6 +11,7 @@
#include <QtCore/qloggingcategory.h>
#include <QtGui/QGuiApplication>
#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/private/qhighdpiscaling_p.h>
#include <QtGui/qpa/qplatformintegration.h>
#include <QtGui/qevent.h>
#include <QtGui/qwindow.h>
@@ -27,7 +28,7 @@ namespace QtWaylandClient {
namespace {
-const Qt::InputMethodQueries supportedQueries = Qt::ImEnabled |
+const Qt::InputMethodQueries supportedQueries2 = Qt::ImEnabled |
Qt::ImSurroundingText |
Qt::ImCursorPosition |
Qt::ImAnchorPosition |
@@ -46,6 +47,7 @@ QWaylandTextInputv2::~QWaylandTextInputv2()
{
if (m_resetCallback)
wl_callback_destroy(m_resetCallback);
+ destroy();
}
void QWaylandTextInputv2::reset()
@@ -58,9 +60,14 @@ void QWaylandTextInputv2::reset()
void QWaylandTextInputv2::commit()
{
if (QObject *o = QGuiApplication::focusObject()) {
- QInputMethodEvent event;
- event.setCommitString(m_preeditCommit);
- QCoreApplication::sendEvent(o, &event);
+ if (!m_preeditCommit.isEmpty()) {
+
+ QInputMethodEvent event;
+ event.setCommitString(m_preeditCommit);
+ m_preeditCommit = QString();
+
+ QCoreApplication::sendEvent(o, &event);
+ }
}
reset();
@@ -93,7 +100,7 @@ void QWaylandTextInputv2::updateState(Qt::InputMethodQueries queries, uint32_t f
if (!surface || (surface != m_surface))
return;
- queries &= supportedQueries;
+ queries &= supportedQueries2;
// Surrounding text, cursor and anchor positions are transferred together
if ((queries & Qt::ImSurroundingText) || (queries & Qt::ImCursorPosition) || (queries & Qt::ImAnchorPosition))
@@ -128,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());
}