summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandinputcontext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylandinputcontext.cpp')
-rw-r--r--src/client/qwaylandinputcontext.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/client/qwaylandinputcontext.cpp b/src/client/qwaylandinputcontext.cpp
index 8a711955e..e189b9451 100644
--- a/src/client/qwaylandinputcontext.cpp
+++ b/src/client/qwaylandinputcontext.cpp
@@ -124,6 +124,18 @@ void QWaylandTextInput::updateState()
commit_state(++m_serial);
}
+void QWaylandTextInput::text_input_preedit_string(uint32_t serial, const QString &text, const QString &commit)
+{
+ Q_UNUSED(serial)
+ if (!QGuiApplication::focusObject())
+ return;
+
+ m_commit = commit;
+ QList<QInputMethodEvent::Attribute> attributes;
+ QInputMethodEvent event(text, attributes);
+ QCoreApplication::sendEvent(QGuiApplication::focusObject(), &event);
+}
+
void QWaylandTextInput::text_input_commit_string(uint32_t serial, const QString &text)
{
Q_UNUSED(serial);
@@ -133,6 +145,8 @@ void QWaylandTextInput::text_input_commit_string(uint32_t serial, const QString
QInputMethodEvent event;
event.setCommitString(text);
QCoreApplication::sendEvent(QGuiApplication::focusObject(), &event);
+
+ m_commit = QString();
}
void QWaylandTextInput::text_input_enter(wl_surface *)
@@ -143,6 +157,8 @@ void QWaylandTextInput::text_input_enter(wl_surface *)
void QWaylandTextInput::text_input_leave()
{
+ if (!m_commit.isEmpty())
+ text_input_commit_string(0, m_commit);
}
void QWaylandTextInput::text_input_keysym(uint32_t serial, uint32_t time, uint32_t sym, uint32_t state, uint32_t modifiers)