diff --git a/keyboard_input.cpp b/keyboard_input.cpp index d54b7b2f01..cd2801b08a 100644 --- a/keyboard_input.cpp +++ b/keyboard_input.cpp @@ -48,6 +48,9 @@ KeyboardInputRedirection::KeyboardInputRedirection(InputRedirection *parent) , m_xkb(new Xkb(parent)) { connect(m_xkb.data(), &Xkb::ledsChanged, this, &KeyboardInputRedirection::ledsChanged); + if (waylandServer()) { + m_xkb->setSeat(waylandServer()->seat()); + } } KeyboardInputRedirection::~KeyboardInputRedirection() = default; diff --git a/xkb.cpp b/xkb.cpp index 22ebd0c148..c8b2fe0b03 100644 --- a/xkb.cpp +++ b/xkb.cpp @@ -19,7 +19,6 @@ along with this program. If not, see . *********************************************************************/ #include "xkb.h" #include "utils.h" -#include "wayland_server.h" // frameworks #include #include @@ -222,7 +221,7 @@ void Xkb::updateKeymap(xkb_keymap *keymap) void Xkb::createKeymapFile() { - if (!waylandServer()) { + if (!m_seat) { return; } // TODO: uninstall keymap on server? @@ -254,7 +253,7 @@ void Xkb::createKeymapFile() delete tmp; return; } - waylandServer()->seat()->setKeymap(tmp->handle(), size); + m_seat->setKeymap(tmp->handle(), size); } void Xkb::updateModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group) @@ -337,10 +336,10 @@ void Xkb::updateModifiers() void Xkb::forwardModifiers() { - if (!waylandServer()) { + if (!m_seat) { return; } - waylandServer()->seat()->updateKeyboardModifiers(m_modifierState.depressed, + m_seat->updateKeyboardModifiers(m_modifierState.depressed, m_modifierState.latched, m_modifierState.locked, m_currentLayout); @@ -502,4 +501,9 @@ quint32 Xkb::numberOfLayouts() const return xkb_keymap_num_layouts(m_keymap); } +void Xkb::setSeat(KWayland::Server::SeatInterface *seat) +{ + m_seat = QPointer(seat); +} + } diff --git a/xkb.h b/xkb.h index 8c0ce6df02..b6d3711a7c 100644 --- a/xkb.h +++ b/xkb.h @@ -38,6 +38,14 @@ typedef uint32_t xkb_led_index_t; typedef uint32_t xkb_keysym_t; typedef uint32_t xkb_layout_index_t; +namespace KWayland +{ +namespace Server +{ + class SeatInterface; +} +} + namespace KWin { @@ -99,6 +107,8 @@ public: **/ void forwardModifiers(); + void setSeat(KWayland::Server::SeatInterface *seat); + Q_SIGNALS: void ledsChanged(const LEDs &leds); @@ -138,6 +148,8 @@ private: xkb_mod_index_t latched = 0; xkb_mod_index_t locked = 0; } m_modifierState; + + QPointer m_seat; }; inline