From 0488fde04200c4d622e46bb60a1dc2b438f50b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 14 Oct 2021 17:21:44 +0200 Subject: Add implementation of QCocoaInputContext::commit() Without this we end up treating input method commits from the input items as cancellations, as the base class implementation doesn't do anything. Pick-to: 6.2 Change-Id: Ieeed71404ee32ab51287b2f4f2d70ffcf9d8e7ef Reviewed-by: Volker Hilsheimer --- src/plugins/platforms/cocoa/qcocoainputcontext.h | 1 + src/plugins/platforms/cocoa/qcocoainputcontext.mm | 27 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.h b/src/plugins/platforms/cocoa/qcocoainputcontext.h index 2b97ab6a82..3a8322461c 100644 --- a/src/plugins/platforms/cocoa/qcocoainputcontext.h +++ b/src/plugins/platforms/cocoa/qcocoainputcontext.h @@ -59,6 +59,7 @@ public: void setFocusObject(QObject *object) override; + void commit() override; void reset() override; QLocale locale() const override { return m_locale; } diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.mm b/src/plugins/platforms/cocoa/qcocoainputcontext.mm index d7fd6e8998..63d23b0f43 100644 --- a/src/plugins/platforms/cocoa/qcocoainputcontext.mm +++ b/src/plugins/platforms/cocoa/qcocoainputcontext.mm @@ -95,6 +95,33 @@ QCocoaInputContext::~QCocoaInputContext() { } +/*! + Commits the current composition if there is one, + by "unmarking" the text in the edit buffer, and + informing the system input context of this fact. +*/ +void QCocoaInputContext::commit() +{ + qCDebug(lcQpaInputMethods) << "Committing composition"; + + if (!m_focusWindow) + return; + + auto *platformWindow = m_focusWindow->handle(); + if (!platformWindow) + return; + + auto *cocoaWindow = static_cast(platformWindow); + QNSView *view = qnsview_cast(cocoaWindow->view()); + if (!view) + return; + + QMacAutoReleasePool pool; + [view unmarkText]; + [view.inputContext discardMarkedText]; +} + + /*! \brief Cancels a composition. */ -- cgit v1.2.3