summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.mm27
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()