diff --git a/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp b/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp index bb449c9d60d..d98a7a5fca9 100644 --- a/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp +++ b/src/plugins/platforms/wayland/qwaylandtextinputv3.cpp @@ -129,6 +129,14 @@ void QWaylandTextInputv3::zwp_text_input_v3_done(uint32_t serial) return; } + if ((m_pendingPreeditString == m_currentPreeditString) + && (m_pendingCommitString.isEmpty() && m_pendingDeleteBeforeText == 0 + && m_pendingDeleteAfterText == 0)) { + // Current done doesn't need additional updates + m_pendingPreeditString.clear(); + return; + } + qCDebug(qLcQpaWaylandTextInput) << Q_FUNC_INFO << "PREEDIT" << m_pendingPreeditString.text << m_pendingPreeditString.cursorBegin; QList attributes; diff --git a/src/plugins/platforms/wayland/qwaylandtextinputv3_p.h b/src/plugins/platforms/wayland/qwaylandtextinputv3_p.h index 8e32e514dd8..4ea82b1f592 100644 --- a/src/plugins/platforms/wayland/qwaylandtextinputv3_p.h +++ b/src/plugins/platforms/wayland/qwaylandtextinputv3_p.h @@ -74,6 +74,11 @@ private: cursorBegin = 0; cursorEnd = 0; } + friend bool operator==(const PreeditInfo& lhs, const PreeditInfo& rhs) { + return (lhs.text == rhs.text) + && (lhs.cursorBegin == rhs.cursorBegin) + && (lhs.cursorEnd == rhs.cursorEnd); + } }; PreeditInfo m_pendingPreeditString;