File indexing completed on 2024-05-19 16:35:20
0001 /* 0002 SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "keystate_interface.h" 0008 #include "display.h" 0009 0010 #include "keyboard_input.h" 0011 #include "xkb.h" 0012 0013 #include <QDebug> 0014 #include <QVector> 0015 #include <qwayland-server-keystate.h> 0016 0017 using namespace KWin; 0018 0019 namespace KWaylandServer 0020 { 0021 0022 static const quint32 s_version = 1; 0023 0024 class KeyStateInterfacePrivate : public QtWaylandServer::org_kde_kwin_keystate 0025 { 0026 public: 0027 KeyStateInterfacePrivate(Display *d) 0028 : QtWaylandServer::org_kde_kwin_keystate(*d, s_version) 0029 { 0030 } 0031 0032 void org_kde_kwin_keystate_fetchStates(Resource *resource) override 0033 { 0034 const LEDs leds = input()->keyboard()->xkb()->leds(); 0035 0036 send_stateChanged(resource->handle, key_capslock, leds & LED::CapsLock ? state_locked : state_unlocked); 0037 send_stateChanged(resource->handle, key_numlock, leds & LED::NumLock ? state_locked : state_unlocked); 0038 send_stateChanged(resource->handle, key_scrolllock, leds & LED::ScrollLock ? state_locked : state_unlocked); 0039 } 0040 }; 0041 0042 KeyStateInterface::KeyStateInterface(Display *display, QObject *parent) 0043 : QObject(parent) 0044 , d(new KeyStateInterfacePrivate(display)) 0045 { 0046 connect(input()->keyboard(), &KeyboardInputRedirection::ledsChanged, this, [this]() { 0047 const auto resources = d->resourceMap(); 0048 for (const auto &resource : resources) { 0049 d->org_kde_kwin_keystate_fetchStates(resource); 0050 } 0051 }); 0052 } 0053 0054 KeyStateInterface::~KeyStateInterface() = default; 0055 0056 }