Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qwaylandinputmethodcontrol.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
6
8#include "qwaylandseat.h"
9#include "qwaylandsurface.h"
10#include "qwaylandview.h"
11#include "qwaylandtextinput.h"
12#if QT_WAYLAND_TEXT_INPUT_V4_WIP
13#include "qwaylandtextinputv4.h"
14#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
16
17#include <QtGui/QInputMethodEvent>
18
20 : QObject(*new QWaylandInputMethodControlPrivate(surface), surface)
21{
22 connect(d_func()->compositor, &QWaylandCompositor::defaultSeatChanged,
23 this, &QWaylandInputMethodControl::defaultSeatChanged);
24
26
27#if QT_WAYLAND_TEXT_INPUT_V4_WIP
28 QWaylandTextInputV4 *textInputV4 = d_func()->textInputV4();
29 if (textInputV4) {
30 connect(textInputV4, &QWaylandTextInputV4::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled);
31 connect(textInputV4, &QWaylandTextInputV4::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled);
33 }
34#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
35
36 QWaylandQtTextInputMethod *textInputMethod = d_func()->textInputMethod();
37 if (textInputMethod) {
38 connect(textInputMethod, &QWaylandQtTextInputMethod::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled);
39 connect(textInputMethod, &QWaylandQtTextInputMethod::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled);
41 }
42}
43
45{
47
48 QWaylandTextInput *textInput = d->textInput();
49 if (textInput != nullptr && textInput->focus() == d->surface)
50 return textInput->inputMethodQuery(query, argument);
51
52#if QT_WAYLAND_TEXT_INPUT_V4_WIP
53 QWaylandTextInputV4 *textInputV4 = d->textInputV4();
54 if (textInputV4 != nullptr && textInputV4->focus() == d->surface)
55 return textInputV4->inputMethodQuery(query, argument);
56#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
57
58 QWaylandQtTextInputMethod *textInputMethod = d_func()->textInputMethod();
59 if (textInputMethod && textInputMethod->focusedSurface() == d->surface)
60 return textInputMethod->inputMethodQuery(query, argument);
61
62 return QVariant();
63}
64
66{
68
69 if (QWaylandTextInput *textInput = d->textInput()) {
70 textInput->sendInputMethodEvent(event);
71#if QT_WAYLAND_TEXT_INPUT_V4_WIP
72 } else if (QWaylandTextInputV4 *textInputV4 = d->textInputV4()) {
73 textInputV4->sendInputMethodEvent(event);
74#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
75 } else if (QWaylandQtTextInputMethod *textInputMethod = d->textInputMethod()) {
76 textInputMethod->sendInputMethodEvent(event);
77 } else {
78 event->ignore();
79 }
80}
81
83{
85
86 return d->enabled;
87}
88
90{
92
93 if (d->enabled == enabled)
94 return;
95
96 d->enabled = enabled;
99}
100
101void QWaylandInputMethodControl::surfaceEnabled(QWaylandSurface *surface)
102{
104
105 if (surface == d->surface)
106 setEnabled(true);
107}
108
109void QWaylandInputMethodControl::surfaceDisabled(QWaylandSurface *surface)
110{
112
113 if (surface == d->surface)
114 setEnabled(false);
115}
116
118{
120
121 if (d->surface == surface)
122 return;
123
124 d->surface = surface;
125
126 QWaylandTextInput *textInput = d->textInput();
127#if QT_WAYLAND_TEXT_INPUT_V4_WIP
128 QWaylandTextInputV4 *textInputV4 = d->textInputV4();
129#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
130 QWaylandQtTextInputMethod *textInputMethod = d->textInputMethod();
131 setEnabled((textInput && textInput->isSurfaceEnabled(d->surface))
132#if QT_WAYLAND_TEXT_INPUT_V4_WIP
133 || (textInputV4 && textInputV4->isSurfaceEnabled(d->surface))
134#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
135 || (textInputMethod && textInputMethod->isSurfaceEnabled(d->surface)));
136}
137
139{
140 QWaylandTextInput *textInput = d_func()->textInput();
141
142 if (textInput) {
143 connect(textInput, &QWaylandTextInput::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled, Qt::UniqueConnection);
144 connect(textInput, &QWaylandTextInput::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled, Qt::UniqueConnection);
146 }
147}
148
149void QWaylandInputMethodControl::defaultSeatChanged()
150{
152
153 disconnect(d->textInput(), nullptr, this, nullptr);
154#if QT_WAYLAND_TEXT_INPUT_V4_WIP
155 disconnect(d->textInputV4(), nullptr, this, nullptr);
156#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
157 disconnect(d->textInputMethod(), nullptr, this, nullptr);
158
159 d->seat = d->compositor->defaultSeat();
160 QWaylandTextInput *textInput = d->textInput();
161#if QT_WAYLAND_TEXT_INPUT_V4_WIP
162 QWaylandTextInputV4 *textInputV4 = d->textInputV4();
163#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
164 QWaylandQtTextInputMethod *textInputMethod = d->textInputMethod();
165
166 if (textInput) {
167 connect(textInput, &QWaylandTextInput::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled);
168 connect(textInput, &QWaylandTextInput::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled);
169 }
170
171#if QT_WAYLAND_TEXT_INPUT_V4_WIP
172 if (textInputV4) {
173 connect(textInputV4, &QWaylandTextInputV4::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled);
174 connect(textInputV4, &QWaylandTextInputV4::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled);
175 }
176#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
177
178 if (textInputMethod) {
179 connect(textInputMethod, &QWaylandQtTextInputMethod::surfaceEnabled, this, &QWaylandInputMethodControl::surfaceEnabled);
180 connect(textInputMethod, &QWaylandQtTextInputMethod::surfaceDisabled, this, &QWaylandInputMethodControl::surfaceDisabled);
181 }
182
183 setEnabled((textInput && textInput->isSurfaceEnabled(d->surface))
184#if QT_WAYLAND_TEXT_INPUT_V4_WIP
185 || (textInputV4 && textInputV4->isSurfaceEnabled(d->surface))
186#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
187 || (textInputMethod && textInputMethod->isSurfaceEnabled(d->surface)));
188}
189
191 : compositor(surface->compositor())
192 , seat(compositor->defaultSeat())
193 , surface(surface)
194{
195}
196
198{
200 return nullptr;
202}
203
205{
207 return nullptr;
209}
210
211#if QT_WAYLAND_TEXT_INPUT_V4_WIP
212QWaylandTextInputV4 *QWaylandInputMethodControlPrivate::textInputV4() const
213{
215}
216#endif // QT_WAYLAND_TEXT_INPUT_V4_WIP
217
218#include "moc_qwaylandinputmethodcontrol.cpp"
The QInputMethodEvent class provides parameters for input method events.
Definition qevent.h:624
\inmodule QtCore
Definition qobject.h:90
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2823
\inmodule QtCore
Definition qvariant.h:64
TextInputProtocols textInputProtocols() const
static QWaylandQtTextInputMethod * findIn(QWaylandObject *container)
If any instance of the interface has been registered with container, this is returned.
QWaylandInputMethodControlPrivate(QWaylandSurface *surface)
QWaylandQtTextInputMethod * textInputMethod() const
void enabledChanged(bool enabled)
QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const
void inputMethodEvent(QInputMethodEvent *event)
void updateInputMethod(Qt::InputMethodQueries queries)
QWaylandInputMethodControl(QWaylandSurface *surface)
void setSurface(QWaylandSurface *surface)
void updateInputMethod(Qt::InputMethodQueries queries)
bool isSurfaceEnabled(QWaylandSurface *surface) const
void surfaceEnabled(QWaylandSurface *surface)
QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const
QWaylandSurface * focusedSurface() const
void surfaceDisabled(QWaylandSurface *surface)
\qmltype WaylandSurface \instantiates QWaylandSurface \inqmlmodule QtWayland.Compositor
QWaylandClient * client
\qmlproperty WaylandClient QtWayland.Compositor::WaylandSurface::client
void updateInputMethod(Qt::InputMethodQueries queries)
void surfaceDisabled(QWaylandSurface *surface)
void surfaceEnabled(QWaylandSurface *surface)
QWaylandSurface * focus() const
bool isSurfaceEnabled(QWaylandSurface *surface) const
QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const
void surfaceDisabled(QWaylandSurface *surface)
void updateInputMethod(Qt::InputMethodQueries queries)
QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const
bool isSurfaceEnabled(QWaylandSurface *surface) const
void surfaceEnabled(QWaylandSurface *surface)
QWaylandSurface * focus() const
InputMethodQuery
@ ImQueryInput
@ UniqueConnection
static QOpenGLCompositor * compositor
GLenum GLenum GLsizei const GLuint GLboolean enabled
struct _cl_event * event
GLenum query
#define emit
myObject disconnect()
[26]
QDBusArgument argument