Changeset View
Changeset View
Standalone View
Standalone View
src/server/keystate_interface.cpp
Show All 19 Lines | |||||
20 | 20 | | |||
21 | #include "keystate_interface.h" | 21 | #include "keystate_interface.h" | ||
22 | #include "global_p.h" | 22 | #include "global_p.h" | ||
23 | #include "display.h" | 23 | #include "display.h" | ||
24 | 24 | | |||
25 | #include <QDebug> | 25 | #include <QDebug> | ||
26 | #include <QVector> | 26 | #include <QVector> | ||
27 | #include <wayland-server.h> | 27 | #include <wayland-server.h> | ||
28 | #include <wayland-keystate-server-protocol.h> | 28 | #include <qwayland-server-keystate.h> | ||
29 | 29 | | |||
30 | namespace KWayland | 30 | namespace KWayland | ||
31 | { | 31 | { | ||
32 | namespace Server | 32 | namespace Server | ||
33 | { | 33 | { | ||
34 | 34 | | |||
35 | class KeyStateInterface::Private : public Global::Private | 35 | class KeyStateInterface::Private : public QtWaylandServer::org_kde_kwin_keystate | ||
36 | { | 36 | { | ||
37 | public: | 37 | public: | ||
38 | Private(Display *d) | 38 | Private(Display *d) | ||
39 | : Global::Private(d, &org_kde_kwin_keystate_interface, s_version) | 39 | : QtWaylandServer::org_kde_kwin_keystate(*d, Private::s_version) | ||
40 | {} | 40 | {} | ||
41 | 41 | | |||
42 | void bind(wl_client * client, uint32_t version, uint32_t id) override { | 42 | void org_kde_kwin_keystate_fetchStates(QtWaylandServer::org_kde_kwin_keystate::Resource * resource) override { | ||
43 | auto c = display->getConnection(client); | 43 | for (int i=0; i<m_keyStates.count(); ++i) | ||
44 | wl_resource *resource = c->createResource(&org_kde_kwin_keystate_interface, qMin(version, s_version), id); | 44 | send_stateChanged(resource->handle, i, m_keyStates[i]); | ||
45 | if (!resource) { | | |||
46 | wl_client_post_no_memory(client); | | |||
47 | return; | | |||
48 | } | | |||
49 | wl_resource_set_implementation(resource, &s_interface, this, unbind); | | |||
50 | m_resources << resource; | | |||
51 | } | | |||
52 | | ||||
53 | static void unbind(wl_resource *resource) { | | |||
54 | auto *d = reinterpret_cast<Private*>(wl_resource_get_user_data(resource)); | | |||
55 | d->m_resources.removeAll(resource); | | |||
56 | } | | |||
57 | | ||||
58 | | ||||
59 | static void fetchStatesCallback(struct wl_client */*client*/, struct wl_resource *resource) { | | |||
60 | auto s = reinterpret_cast<KeyStateInterface::Private*>(wl_resource_get_user_data(resource)); | | |||
61 | | ||||
62 | for (int i=0; i<s->m_keyStates.count(); ++i) | | |||
63 | org_kde_kwin_keystate_send_stateChanged(resource, i, s->m_keyStates[i]); | | |||
64 | } | 45 | } | ||
65 | 46 | | |||
66 | static const quint32 s_version; | 47 | static const quint32 s_version; | ||
67 | QVector<wl_resource*> m_resources; | | |||
68 | QVector<State> m_keyStates = QVector<State>(3, Unlocked); | 48 | QVector<State> m_keyStates = QVector<State>(3, Unlocked); | ||
69 | static const struct org_kde_kwin_keystate_interface s_interface; | 49 | static const struct org_kde_kwin_keystate_interface s_interface; | ||
70 | }; | 50 | }; | ||
71 | 51 | | |||
72 | const quint32 KeyStateInterface::Private::s_version = 1; | 52 | const quint32 KeyStateInterface::Private::s_version = 1; | ||
73 | 53 | | |||
74 | KeyStateInterface::KeyStateInterface(Display* d, QObject* parent) | 54 | KeyStateInterface::KeyStateInterface(Display* d, QObject* parent) | ||
75 | : Global(new Private(d), parent) | 55 | : QObject(parent) | ||
56 | , d(new Private(d)) | ||||
76 | {} | 57 | {} | ||
77 | 58 | | |||
78 | KeyStateInterface::~KeyStateInterface() = default; | 59 | KeyStateInterface::~KeyStateInterface() = default; | ||
79 | 60 | | |||
80 | const struct org_kde_kwin_keystate_interface KeyStateInterface::Private::s_interface = { | 61 | void KeyStateInterface::create() | ||
81 | fetchStatesCallback | 62 | { | ||
82 | }; | 63 | } | ||
83 | 64 | | |||
84 | void KeyStateInterface::setState(KeyStateInterface::Key key, KeyStateInterface::State state) | 65 | void KeyStateInterface::setState(KeyStateInterface::Key key, KeyStateInterface::State state) | ||
85 | { | 66 | { | ||
86 | auto dptr = static_cast<KeyStateInterface::Private*>(d.data()); | 67 | auto dptr = static_cast<KeyStateInterface::Private*>(d.data()); | ||
87 | dptr->m_keyStates[int(key)] = state; | 68 | dptr->m_keyStates[int(key)] = state; | ||
88 | 69 | | |||
89 | for(auto r : qAsConst(dptr->m_resources)) { | 70 | for (auto r : dptr->resourceMap()) | ||
90 | org_kde_kwin_keystate_send_stateChanged(r, int(key), int(state)); | 71 | dptr->send_stateChanged(r->handle, int(key), int(state)); | ||
91 | } | | |||
92 | } | 72 | } | ||
93 | 73 | | |||
94 | } | 74 | } | ||
95 | 75 | | |||
96 | } | 76 | } |