summaryrefslogtreecommitdiffstats
path: root/src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp')
-rw-r--r--src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp b/src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp
new file mode 100644
index 000000000..355e77338
--- /dev/null
+++ b/src/compositor/extensions/qwaylandqttextinputmethodmanager.cpp
@@ -0,0 +1,102 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qwaylandqttextinputmethodmanager.h"
+#include "qwaylandqttextinputmethodmanager_p.h"
+
+#include <QtWaylandCompositor/QWaylandCompositor>
+#include <QtWaylandCompositor/QWaylandSeat>
+
+#include "qwaylandqttextinputmethod.h"
+
+QT_BEGIN_NAMESPACE
+
+QWaylandQtTextInputMethodManagerPrivate::QWaylandQtTextInputMethodManagerPrivate()
+{
+}
+
+void QWaylandQtTextInputMethodManagerPrivate::text_input_method_manager_v1_get_text_input_method(Resource *resource, uint32_t id, struct ::wl_resource *seatResource)
+{
+ Q_Q(QWaylandQtTextInputMethodManager);
+ QWaylandCompositor *compositor = static_cast<QWaylandCompositor *>(q->extensionContainer());
+ QWaylandSeat *seat = QWaylandSeat::fromSeatResource(seatResource);
+ QWaylandQtTextInputMethod *textInput = QWaylandQtTextInputMethod::findIn(seat);
+ if (textInput == nullptr)
+ textInput = new QWaylandQtTextInputMethod(seat, compositor);
+ textInput->add(resource->client(), id, wl_resource_get_version(resource->handle));
+ QWaylandClient *client = QWaylandClient::fromWlClient(compositor, resource->client());
+ QWaylandClient::TextInputProtocols p = client->textInputProtocols();
+ client->setTextInputProtocols(p.setFlag(QWaylandClient::TextInputProtocol::QtTextInputMethodV1));
+
+ if (!textInput->isInitialized())
+ textInput->initialize();
+}
+
+/*!
+ \qmltype QtTextInputMethodManager
+ \instantiates QWaylandQtTextInputMethodManager
+ \inqmlmodule QtWayland.Compositor
+ \since 6.0
+ \brief Provides access to input methods in the compositor.
+
+ The \c QtTextInputMethodManager corresponds to the \c qt-text-input-method-manager interface
+ in the \c qt-text-input-method-unstable-v1 extension protocol. It is specifically designed
+ to be used with a Qt-based input method, such as Qt Virtual Keyboard.
+
+ Instantiating this as child of a \l WaylandCompositor adds it to the list of interfaces available
+ to the client. If a client binds to it, then it will be used to communciate text input to
+ that client.
+*/
+
+/*!
+ \class QWaylandQtTextInputMethodManager
+ \inmodule QtWaylandCompositor
+ \since 6.0
+ \brief Provides access to input methods in the compositor.
+
+ The \c QWaylandQtTextInputMethodManager class corresponds to the \c qt-text-input-method-manager interface
+ in the \c qt-text-input-method-unstable-v1 extension protocol. It is specifically designed
+ to be used with a Qt-based input method, such as Qt Virtual Keyboard.
+
+ Instantiating this as child of a \l WaylandCompositor adds it to the list of interfaces available
+ to the client. If a client binds to it, then it will be used to communciate text input to
+ that client.
+*/
+
+QWaylandQtTextInputMethodManager::QWaylandQtTextInputMethodManager()
+ : QWaylandCompositorExtensionTemplate<QWaylandQtTextInputMethodManager>(*new QWaylandQtTextInputMethodManagerPrivate)
+{
+}
+
+QWaylandQtTextInputMethodManager::QWaylandQtTextInputMethodManager(QWaylandCompositor *compositor)
+ : QWaylandCompositorExtensionTemplate<QWaylandQtTextInputMethodManager>(compositor, *new QWaylandQtTextInputMethodManagerPrivate)
+{
+}
+
+void QWaylandQtTextInputMethodManager::initialize()
+{
+ Q_D(QWaylandQtTextInputMethodManager);
+
+ QWaylandCompositorExtensionTemplate::initialize();
+ QWaylandCompositor *compositor = static_cast<QWaylandCompositor *>(extensionContainer());
+ if (compositor == nullptr) {
+ qWarning() << "Failed to find QWaylandCompositor when initializing QWaylandQtTextInputMethodManager";
+ return;
+ }
+
+ d->init(compositor->display(), 1);
+}
+
+const wl_interface *QWaylandQtTextInputMethodManager::interface()
+{
+ return QWaylandQtTextInputMethodManagerPrivate::interface();
+}
+
+QByteArray QWaylandQtTextInputMethodManager::interfaceName()
+{
+ return QWaylandQtTextInputMethodManagerPrivate::interfaceName();
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qwaylandqttextinputmethodmanager.cpp"