27 wl_resource_destroy(resource->handle);
34 if (resource->version() >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) {
41 if (focusedClient && focusedClient->
client() == resource->client()) {
43 const QByteArray keysData = QByteArray::fromRawData(
reinterpret_cast<const char *
>(keys.data()),
sizeof(quint32) * keys.count());
53 return resourceMap().values(client->
client());
59 for (Resource *keyboardResource : keyboards) {
60 send_leave(keyboardResource->handle, serial, surface->
resource());
67 QByteArray data = QByteArray::fromRawData(
reinterpret_cast<const char *
>(
states.constData()),
sizeof(quint32) *
states.size());
70 for (Resource *keyboardResource : keyboards) {
71 send_enter(keyboardResource->handle, serial, surface->
resource(), data);
84 send_keymap(resource->handle, keymap_format::keymap_format_xkb_v1, keymapFile.
fd(), keymapFile.
size());
90 if (content.isNull()) {
98 const auto keyboardResources = d->resourceMap();
99 for (KeyboardInterfacePrivate::Resource *resource : keyboardResources) {
100 d->sendKeymap(resource);
107 for (Resource *keyboardResource : keyboards) {
108 send_modifiers(keyboardResource->handle, serial, depressed, latched, locked, group);
114 auto it =
states.find(key);
116 states.insert(key, state);
119 if (it.value() == state) {
138void KeyboardInterface::setFocusedSurface(
SurfaceInterface *surface, quint32 serial)
140 if (d->focusedSurface == surface) {
144 if (d->focusedSurface) {
145 d->sendLeave(d->focusedSurface, serial);
146 disconnect(d->destroyConnection);
149 d->focusedSurface = surface;
150 if (!d->focusedSurface) {
154 d->sendLeave(d->focusedSurface, d->seat->display()->nextSerial());
155 d->focusedSurface = nullptr;
158 d->sendEnter(d->focusedSurface, serial);
159 d->sendModifiers(d->focusedSurface);
162void KeyboardInterface::setModifierFocusSurface(SurfaceInterface *surface)
164 if (d->modifierFocusSurface == surface) {
167 d->modifierFocusSurface = surface;
168 if (d->modifierFocusSurface && d->focusedSurface != d->modifierFocusSurface) {
169 d->modifiers.serial = d->seat->display()->nextSerial();
170 d->sendModifiers(d->modifierFocusSurface);
177 for (
auto it =
states.constBegin(); it !=
states.constEnd(); ++it) {
187 const QList<KeyboardInterfacePrivate::Resource *> keyboards = d->keyboardsForClient(client);
188 const quint32 serial = d->seat->display()->nextSerial();
189 for (KeyboardInterfacePrivate::Resource *keyboardResource : keyboards) {
190 d->send_key(keyboardResource->handle, serial, d->seat->timestamp().count(), key, quint32(state));
196 if (!d->updateKey(key, state)) {
200 if (!d->focusedSurface) {
204 sendKey(key, state, d->focusedSurface->client());
209 bool changed =
false;
210 if (d->modifiers.depressed != depressed) {
211 d->modifiers.depressed = depressed;
214 if (d->modifiers.latched != latched) {
215 d->modifiers.latched = latched;
218 if (d->modifiers.locked != locked) {
219 d->modifiers.locked = locked;
222 if (d->modifiers.group != group) {
223 d->modifiers.group = group;
230 if (d->focusedSurface) {
231 d->modifiers.serial = d->seat->display()->nextSerial();
232 d->sendModifiers(d->focusedSurface, depressed, latched, locked, group, d->modifiers.serial);
234 if (d->modifierFocusSurface && d->focusedSurface != d->modifierFocusSurface) {
235 d->modifiers.serial = d->seat->display()->nextSerial();
236 d->sendModifiers(d->modifierFocusSurface, depressed, latched, locked, group, d->modifiers.serial);
242 d->keyRepeat.charactersPerSecond = std::max(charactersPerSecond, 0);
243 d->keyRepeat.delay = std::max(delay, 0);
244 const auto keyboards = d->resourceMap();
245 for (KeyboardInterfacePrivate::Resource *keyboardResource : keyboards) {
246 if (keyboardResource->version() >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) {
247 d->send_repeat_info(keyboardResource->handle, d->keyRepeat.charactersPerSecond, d->keyRepeat.delay);
254 return d->focusedSurface;
259 return d->keyRepeat.delay;
264 return d->keyRepeat.charactersPerSecond;
269#include "moc_keyboard.cpp"
Convenient Class which represents a wl_client.
wl_client * client() const
qint32 keyRepeatDelay() const
SurfaceInterface * focusedSurface() const
void sendModifiers(quint32 depressed, quint32 latched, quint32 locked, quint32 group)
void setRepeatInfo(qint32 charactersPerSecond, qint32 delay)
~KeyboardInterface() override
void sendKey(quint32 key, KeyboardKeyState state)
void setKeymap(const QByteArray &content)
qint32 keyRepeatRate() const
void sendModifiers(SurfaceInterface *surface)
void keyboard_release(Resource *resource) override
KeyboardInterfacePrivate(SeatInterface *s)
void sendKeymap(Resource *resource)
void sendLeave(SurfaceInterface *surface, quint32 serial)
void keyboard_bind_resource(Resource *resource) override
SurfaceInterface * focusedSurface
struct KWin::KeyboardInterfacePrivate::@27 keyRepeat
QList< quint32 > pressedKeys() const
QHash< quint32, KeyboardKeyState > states
void sendEnter(SurfaceInterface *surface, quint32 serial)
QList< Resource * > keyboardsForClient(ClientConnection *client) const
bool updateKey(quint32 key, KeyboardKeyState state)
Creates a file in memory.
@ SealWrite
Seal the file descriptor for writing.
Flags effectiveFlags() const
Represents a Seat on the Wayland Display.
Display * display() const
Resource representing a wl_surface.
ClientConnection * client() const
void aboutToBeDestroyed()
wl_resource * resource() const