7 #include "keystate_interface.h"
13 #include <wayland-keystate-server-protocol.h>
14 #include <wayland-server.h>
20 class KeyStateInterface::Private :
public Global::Private
24 : Global::Private(d, &org_kde_kwin_keystate_interface, s_version)
28 void bind(wl_client *client, uint32_t version, uint32_t
id)
override
30 auto c = display->getConnection(client);
31 wl_resource *resource = c->createResource(&org_kde_kwin_keystate_interface, qMin(version, s_version),
id);
33 wl_client_post_no_memory(client);
36 wl_resource_set_implementation(resource, &s_interface,
this, unbind);
37 m_resources << resource;
40 static void unbind(wl_resource *resource)
42 auto *d =
reinterpret_cast<Private *
>(wl_resource_get_user_data(resource));
43 d->m_resources.removeAll(resource);
46 static void fetchStatesCallback(
struct wl_client * ,
struct wl_resource *resource)
48 auto s =
reinterpret_cast<KeyStateInterface::Private *
>(wl_resource_get_user_data(resource));
50 for (
int i = 0; i < s->m_keyStates.count(); ++i) {
51 org_kde_kwin_keystate_send_stateChanged(resource, i, s->m_keyStates[i]);
55 static const quint32 s_version;
58 static const struct org_kde_kwin_keystate_interface s_interface;
61 const quint32 KeyStateInterface::Private::s_version = 1;
63 KeyStateInterface::KeyStateInterface(Display *d,
QObject *parent)
64 : Global(new Private(d), parent)
68 KeyStateInterface::~KeyStateInterface() =
default;
70 const struct org_kde_kwin_keystate_interface KeyStateInterface::Private::s_interface = {fetchStatesCallback};
72 void KeyStateInterface::setState(KeyStateInterface::Key key, KeyStateInterface::State state)
74 auto dptr =
static_cast<KeyStateInterface::Private *
>(d.data());
75 dptr->m_keyStates[int(key)] = state;
77 for (
auto r : std::as_const(dptr->m_resources)) {
78 org_kde_kwin_keystate_send_stateChanged(r,
int(key),
int(state));