diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2021-10-14 17:21:44 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2021-10-16 14:33:29 +0200 |
commit | 0488fde04200c4d622e46bb60a1dc2b438f50b11 (patch) | |
tree | ceb6bd829e8a08e8e6e12c19afc5635cf35a2092 | |
parent | c67f46877c72d1c04cb643f33e820d86e64128d1 (diff) |
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 <volker.hilsheimer@qt.io>
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoainputcontext.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoainputcontext.mm | 27 |
2 files changed, 28 insertions, 0 deletions
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 @@ -96,6 +96,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<QCocoaWindow *>(platformWindow); + QNSView *view = qnsview_cast(cocoaWindow->view()); + if (!view) + return; + + QMacAutoReleasePool pool; + [view unmarkText]; + [view.inputContext discardMarkedText]; +} + + +/*! \brief Cancels a composition. */ void QCocoaInputContext::reset() |