diff options
-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() |