diff --git a/src/wayland/CMakeLists.txt b/src/wayland/CMakeLists.txt index 5a3fa2fd71..339ef9b6ff 100644 --- a/src/wayland/CMakeLists.txt +++ b/src/wayland/CMakeLists.txt @@ -222,7 +222,7 @@ ecm_add_qtwayland_server_protocol(SERVER_LIB_SRCS BASENAME wl-eglstream-controller ) -ecm_add_wayland_server_protocol(SERVER_LIB_SRCS +ecm_add_qtwayland_server_protocol(SERVER_LIB_SRCS PROTOCOL ${PLASMA_WAYLAND_PROTOCOLS_DIR}/keystate.xml BASENAME keystate ) diff --git a/src/wayland/keystate_interface.cpp b/src/wayland/keystate_interface.cpp index cbd6d5e9f9..57d66951a2 100644 --- a/src/wayland/keystate_interface.cpp +++ b/src/wayland/keystate_interface.cpp @@ -5,73 +5,46 @@ */ #include "keystate_interface.h" -#include "global_p.h" #include "display.h" #include #include -#include -#include +#include namespace KWaylandServer { -class KeyStateInterface::Private : public Global::Private +static const quint32 s_version = 1; + +class KeyStateInterfacePrivate : public QtWaylandServer::org_kde_kwin_keystate { public: - Private(Display *d) - : Global::Private(d, &org_kde_kwin_keystate_interface, s_version) + KeyStateInterfacePrivate(Display *d) + : QtWaylandServer::org_kde_kwin_keystate(*d, s_version) {} - void bind(wl_client * client, uint32_t version, uint32_t id) override { - auto c = display->getConnection(client); - wl_resource *resource = c->createResource(&org_kde_kwin_keystate_interface, qMin(version, s_version), id); - if (!resource) { - wl_client_post_no_memory(client); - return; + void org_kde_kwin_keystate_fetchStates(Resource *resource) override { + for (int i = 0; i < m_keyStates.count(); ++i) { + send_stateChanged(resource->handle, i, m_keyStates[i]); } - wl_resource_set_implementation(resource, &s_interface, this, unbind); - m_resources << resource; } - static void unbind(wl_resource *resource) { - auto *d = reinterpret_cast(wl_resource_get_user_data(resource)); - d->m_resources.removeAll(resource); - } - - - static void fetchStatesCallback(struct wl_client */*client*/, struct wl_resource *resource) { - auto s = reinterpret_cast(wl_resource_get_user_data(resource)); - - for (int i=0; im_keyStates.count(); ++i) - org_kde_kwin_keystate_send_stateChanged(resource, i, s->m_keyStates[i]); - } - - static const quint32 s_version; - QVector m_resources; - QVector m_keyStates = QVector(3, Unlocked); - static const struct org_kde_kwin_keystate_interface s_interface; + QVector m_keyStates = QVector(3, KeyStateInterface::Unlocked); }; -const quint32 KeyStateInterface::Private::s_version = 1; - KeyStateInterface::KeyStateInterface(Display* d, QObject* parent) - : Global(new Private(d), parent) + : QObject(parent) + , d(new KeyStateInterfacePrivate(d)) {} KeyStateInterface::~KeyStateInterface() = default; -const struct org_kde_kwin_keystate_interface KeyStateInterface::Private::s_interface = { - fetchStatesCallback -}; - void KeyStateInterface::setState(KeyStateInterface::Key key, KeyStateInterface::State state) { - auto dptr = static_cast(d.data()); - dptr->m_keyStates[int(key)] = state; + d->m_keyStates[int(key)] = state; - for(auto r : qAsConst(dptr->m_resources)) { - org_kde_kwin_keystate_send_stateChanged(r, int(key), int(state)); + for (auto r : d->resourceMap()) { + d->send_stateChanged(r->handle, int(key), int(state)); } } diff --git a/src/wayland/keystate_interface.h b/src/wayland/keystate_interface.h index 2cb04b6b1a..46a4edbe94 100644 --- a/src/wayland/keystate_interface.h +++ b/src/wayland/keystate_interface.h @@ -8,20 +8,20 @@ #define KWAYLAND_KEYSTATE_INTERFACE_H #include -#include "global.h" -#include "resource.h" +#include namespace KWaylandServer { class Display; +class KeyStateInterfacePrivate; /** * @brief Exposes key states to wayland clients * * @since 5.58 **/ -class KWAYLANDSERVER_EXPORT KeyStateInterface : public Global +class KWAYLANDSERVER_EXPORT KeyStateInterface : public QObject { Q_OBJECT public: @@ -46,7 +46,7 @@ private: explicit KeyStateInterface(Display *display, QObject *parent = nullptr); friend class Display; - class Private; + QScopedPointer d; }; }