KWin
Loading...
Searching...
No Matches
xkb.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2013, 2016, 2017 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10#include "input.h"
11#include <xkbcommon/xkbcommon.h>
12
13#include <kwin_export.h>
14
15#include <KConfigGroup>
16
17#include <QLoggingCategory>
18
19#include <optional>
20
21Q_DECLARE_LOGGING_CATEGORY(KWIN_XKB)
22
23struct xkb_context;
24struct xkb_keymap;
25struct xkb_state;
26struct xkb_compose_table;
27struct xkb_compose_state;
28typedef uint32_t xkb_mod_index_t;
29typedef uint32_t xkb_led_index_t;
30typedef uint32_t xkb_keysym_t;
31typedef uint32_t xkb_layout_index_t;
32
33namespace KWin
34{
35
36class SeatInterface;
37
38class KWIN_EXPORT Xkb : public QObject
39{
40 Q_OBJECT
41public:
42 Xkb(bool followLocale1 = false);
43 ~Xkb() override;
44 void setConfig(const KSharedConfigPtr &config);
45 void setNumLockConfig(const KSharedConfigPtr &config);
46
47 void updateModifiers(uint32_t modsDepressed, uint32_t modsLatched, uint32_t modsLocked, uint32_t group);
48 void updateKey(uint32_t key, InputRedirection::KeyboardKeyState state);
49 xkb_keysym_t toKeysym(uint32_t key);
51 {
52 return m_keysym;
53 }
54 QString toString(xkb_keysym_t keysym);
55 Qt::Key toQtKey(xkb_keysym_t keysym,
56 uint32_t scanCode = 0,
57 Qt::KeyboardModifiers modifiers = Qt::KeyboardModifiers(),
58 bool superAsMeta = false) const;
59 Qt::KeyboardModifiers modifiers() const;
60 Qt::KeyboardModifiers modifiersRelevantForGlobalShortcuts(uint32_t scanCode = 0) const;
61 bool shouldKeyRepeat(quint32 key) const;
62
63 void switchToNextLayout();
64 void switchToPreviousLayout();
65 bool switchToLayout(xkb_layout_index_t layout);
66
67 void setModifierLatched(Qt::KeyboardModifier mod, bool latched);
68 void setModifierLocked(Qt::KeyboardModifier mod, bool locked);
69
70 LEDs leds() const
71 {
72 return m_leds;
73 }
74
75 xkb_keymap *keymap() const
76 {
77 return m_keymap;
78 }
79
80 xkb_state *state() const
81 {
82 return m_state;
83 }
84
85 quint32 currentLayout() const
86 {
87 return m_currentLayout;
88 }
89
90 const auto &modifierState() const
91 {
92 return m_modifierState;
93 }
94 QString layoutName(xkb_layout_index_t index) const;
95 QString layoutName() const;
96 QString layoutShortName(int index) const;
97 quint32 numberOfLayouts() const;
98
102 void forwardModifiers();
103
104 void setSeat(SeatInterface *seat);
105 QByteArray keymapContents() const;
106
107 std::optional<int> keycodeFromKeysym(xkb_keysym_t keysym);
108
109 void setFollowLocale1(bool follow);
110
111public Q_SLOTS:
112 void reconfigure();
113
114Q_SIGNALS:
115 void ledsChanged(const LEDs &leds);
117
118private:
119 void applyEnvironmentRules(xkb_rule_names &);
120 xkb_keymap *loadKeymapFromConfig();
121 xkb_keymap *loadDefaultKeymap();
122 xkb_keymap *loadKeymapFromLocale1();
123 void updateKeymap(xkb_keymap *keymap);
124 void createKeymapFile();
125 void updateModifiers();
126 void updateConsumedModifiers(uint32_t key);
127 xkb_context *m_context;
128 xkb_keymap *m_keymap;
129 QStringList m_layoutList;
130 xkb_state *m_state;
131 xkb_mod_index_t m_shiftModifier;
132 xkb_mod_index_t m_capsModifier;
133 xkb_mod_index_t m_controlModifier;
134 xkb_mod_index_t m_altModifier;
135 xkb_mod_index_t m_metaModifier;
136 xkb_mod_index_t m_numModifier;
137 xkb_led_index_t m_numLock;
138 xkb_led_index_t m_capsLock;
139 xkb_led_index_t m_scrollLock;
140 Qt::KeyboardModifiers m_modifiers;
141 Qt::KeyboardModifiers m_consumedModifiers;
142 xkb_keysym_t m_keysym;
143 quint32 m_currentLayout = 0;
144
145 struct
146 {
147 xkb_compose_table *table = nullptr;
148 xkb_compose_state *state = nullptr;
149 } m_compose;
150 LEDs m_leds;
151 KConfigGroup m_configGroup;
152 KSharedConfigPtr m_numLockConfig;
153
154 struct
155 {
156 xkb_mod_index_t depressed = 0;
157 xkb_mod_index_t latched = 0;
158 xkb_mod_index_t locked = 0;
159 } m_modifierState;
160
161 QPointer<SeatInterface> m_seat;
162 const bool m_followLocale1;
163};
164
165inline Qt::KeyboardModifiers Xkb::modifiers() const
166{
167 return m_modifiers;
168}
169
170}
Represents a Seat on the Wayland Display.
Definition seat.h:134
Qt::KeyboardModifiers modifiers() const
Definition xkb.h:165
xkb_keysym_t currentKeysym() const
Definition xkb.h:50
void ledsChanged(const LEDs &leds)
void setFollowLocale1(bool follow)
LEDs leds() const
Definition xkb.h:70
const auto & modifierState() const
Definition xkb.h:90
void modifierStateChanged()
xkb_state * state() const
Definition xkb.h:80
quint32 currentLayout() const
Definition xkb.h:85
xkb_keymap * keymap() const
Definition xkb.h:75
uint32_t xkb_mod_index_t
uint32_t xkb_keysym_t
uint32_t xkb_layout_index_t
uint32_t xkb_led_index_t
uint32_t xkb_mod_index_t
Definition xkb.h:28
uint32_t xkb_keysym_t
Definition xkb.h:30
uint32_t xkb_layout_index_t
Definition xkb.h:31
uint32_t xkb_led_index_t
Definition xkb.h:29