File indexing completed on 2025-04-27 11:33:00

0001 /*
0002     SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "x11eventfilter.h"
0010 
0011 #include <xkbcommon/xkbcommon.h>
0012 
0013 #include <memory>
0014 
0015 namespace KWin
0016 {
0017 
0018 class X11KeyboardFilter;
0019 
0020 class X11Keyboard
0021 {
0022 public:
0023     X11Keyboard();
0024     ~X11Keyboard();
0025 
0026     xkb_keymap *xkbKeymap() const;
0027     xkb_state *xkbState() const;
0028     Qt::KeyboardModifiers modifiers() const;
0029 
0030     bool event(xcb_generic_event_t *event);
0031 
0032 private:
0033     void updateKeymap();
0034 
0035     xkb_context *m_xkbContext = nullptr;
0036     xkb_keymap *m_xkbKeymap = nullptr;
0037     xkb_state *m_xkbState = nullptr;
0038     int32_t m_deviceId = 0;
0039 
0040     std::unique_ptr<X11KeyboardFilter> m_filter;
0041 };
0042 
0043 } // namespace KWin