Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
EiKeyState.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2024 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2022 Red Hat, Inc.
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "deskflow/KeyState.h"
11#include "platform/EiScreen.h"
12
13#include <xkbcommon/xkbcommon.h>
14
15struct xkb_context;
16struct xkb_keymap;
17struct xkb_state;
18
19namespace deskflow {
20
22class EiKeyState : public KeyState
23{
24public:
25 EiKeyState(EiScreen *screen, IEventQueue *events);
26 ~EiKeyState() override;
27
28 void init(int fd, std::size_t len);
29 void initDefaultKeymap();
30
31 // IKeyState overrides
32 bool fakeCtrlAltDel() override;
33 KeyModifierMask pollActiveModifiers() const override;
34 std::int32_t pollActiveGroup() const override;
35 void pollPressedKeys(KeyButtonSet &pressedKeys) const override;
36 KeyID mapKeyFromKeyval(std::uint32_t keyval) const;
37 void updateXkbState(std::uint32_t keyval, bool isPressed);
38 void clearStaleModifiers() override;
39
40protected:
41 // KeyState overrides
42 void getKeyMap(KeyMap &keyMap) override;
43 void fakeKey(const Keystroke &keystroke) override;
44
45private:
46 std::uint32_t convertModMask(xkb_mod_mask_t xkbModMaskIn) const;
47 void assignGeneratedModifiers(std::uint32_t keycode, KeyMap::KeyItem &item);
48
49 EiScreen *m_screen = nullptr;
50
51 xkb_context *m_xkb = nullptr;
52 xkb_keymap *m_xkbKeymap = nullptr;
53 xkb_state *m_xkbState = nullptr;
54};
55
56} // namespace deskflow
static void FAR int len
Definition ArchNetworkWinsock.cpp:38
uint32_t KeyID
Key ID.
Definition KeyTypes.h:21
uint32_t KeyModifierMask
Modifier key mask.
Definition KeyTypes.h:44
Event queue interface.
Definition IEventQueue.h:29
std::set< KeyButton > KeyButtonSet
Definition IKeyState.h:52
KeyState(IEventQueue *events, std::vector< std::string > layouts, bool isLangSyncEnabled)
Definition KeyState.cpp:643
deskflow::KeyMap::Keystroke Keystroke
Definition KeyState.h:81
EiKeyState(EiScreen *screen, IEventQueue *events)
Definition EiKeyState.cpp:22
KeyID mapKeyFromKeyval(std::uint32_t keyval) const
Definition EiKeyState.cpp:315
void clearStaleModifiers() override
Clear stale modifiers.
Definition EiKeyState.cpp:347
void fakeKey(const Keystroke &keystroke) override
Fake a key event.
Definition EiKeyState.cpp:303
bool fakeCtrlAltDel() override
Fake ctrl+alt+del.
Definition EiKeyState.cpp:92
void updateXkbState(std::uint32_t keyval, bool isPressed)
Definition EiKeyState.cpp:341
void initDefaultKeymap()
Definition EiKeyState.cpp:37
void pollPressedKeys(KeyButtonSet &pressedKeys) const override
Get the keys currently pressed from OS.
Definition EiKeyState.cpp:109
std::int32_t pollActiveGroup() const override
Get the active keyboard layout from OS.
Definition EiKeyState.cpp:104
void init(int fd, std::size_t len)
Definition EiKeyState.cpp:50
~EiKeyState() override
Definition EiKeyState.cpp:85
KeyModifierMask pollActiveModifiers() const override
Get the active modifiers from OS.
Definition EiKeyState.cpp:98
void getKeyMap(KeyMap &keyMap) override
Get the keyboard map.
Definition EiKeyState.cpp:213
Implementation of IPlatformScreen for X11.
Definition EiScreen.h:32
Key map.
Definition KeyMap.h:24
Definition EventTypes.h:11
KeyID synthesis info.
Definition KeyMap.h:42