summaryrefslogtreecommitdiff
path: root/src/managers/KeybindManager.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-26 15:16:36 +0100
committerGitHub <noreply@github.com>2026-04-26 15:16:36 +0100
commit5ba33f846129f3e6c0505b19f94634b24505e828 (patch)
treeaaacabe678006040c342935481a86607c66607fd /src/managers/KeybindManager.hpp
parent329b2b356dd92ac07f4e2aa69cbce82ee9ba9d19 (diff)
config/lua: init lua config manager, use lua if available (#13817)
Adds a new lua config manager, which will automatically be used if there is a lua config present.
Diffstat (limited to 'src/managers/KeybindManager.hpp')
-rw-r--r--src/managers/KeybindManager.hpp103
1 files changed, 14 insertions, 89 deletions
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index a51f9add..885c73ae 100644
--- a/src/managers/KeybindManager.hpp
+++ b/src/managers/KeybindManager.hpp
@@ -27,11 +27,11 @@ struct SSubmap {
struct SKeybind {
std::string key = "";
- std::set<xkb_keysym_t> sMkKeys = {};
+ std::vector<xkb_keysym_t> sMkKeys = {};
uint32_t keycode = 0;
bool catchAll = false;
uint32_t modmask = 0;
- std::set<xkb_keysym_t> sMkMods = {};
+ std::vector<xkb_keysym_t> sMkMods = {};
std::string handler = "";
std::string arg = "";
bool locked = false;
@@ -52,6 +52,9 @@ struct SKeybind {
bool submapUniversal = false;
bool deviceInclusive = false;
std::unordered_set<std::string> devices = {};
+ bool enabled = true;
+
+ std::string displayKey = "";
// DO NOT INITIALIZE
bool shadowed = false;
@@ -94,6 +97,10 @@ namespace Config::Legacy {
class CConfigManager;
}
+namespace Config::Lua {
+ class CConfigManager;
+}
+
class CKeybindManager {
public:
CKeybindManager();
@@ -107,7 +114,7 @@ class CKeybindManager {
void onSwitchOnEvent(const std::string&);
void onSwitchOffEvent(const std::string&);
- void addKeybind(SKeybind);
+ SP<SKeybind> addKeybind(SKeybind);
void removeKeybind(uint32_t, const SParsedKey&);
uint32_t stringToModMask(std::string);
uint32_t keycodeToModifier(xkb_keycode_t);
@@ -121,6 +128,8 @@ class CKeybindManager {
std::vector<SP<SKeybind>> m_keybinds;
+ SP<SKeybind> m_currentKeybind;
+
//since we can't find keycode through keyname in xkb:
//on sendshortcut call, we once search for keyname (e.g. "g") the correct keycode (e.g. 42)
//and cache it in this map to make sendshortcut calls faster
@@ -132,8 +141,6 @@ class CKeybindManager {
private:
std::vector<SPressedKeyWithMods> m_pressedKeys;
- inline static SSubmap m_currentSelectedSubmap = {};
-
std::vector<WP<SKeybind>> m_activeKeybinds;
WP<SKeybind> m_lastLongPressKeybind;
@@ -141,14 +148,8 @@ class CKeybindManager {
SP<CEventLoopTimer> m_repeatKeyTimer;
uint32_t m_repeatKeyRate = 50;
- uint32_t m_timeLastMs = 0;
- uint32_t m_lastCode = 0;
- uint32_t m_lastMouseCode = 0;
-
std::vector<WP<SKeybind>> m_pressedSpecialBinds;
- int m_passPressed = -1; // used for pass
-
CTimer m_scrollTimer;
SDispatchResult handleKeybinds(const uint32_t, const SPressedKeyWithMods&, bool, SP<IKeyboard>, SP<IHID>);
@@ -156,7 +157,7 @@ class CKeybindManager {
std::set<xkb_keysym_t> m_mkKeys = {};
std::set<xkb_keysym_t> m_mkMods = {};
eMultiKeyCase mkBindMatches(const SP<SKeybind>);
- eMultiKeyCase mkKeysymSetMatches(const std::set<xkb_keysym_t>, const std::set<xkb_keysym_t>);
+ eMultiKeyCase mkKeysymSetMatches(const std::vector<xkb_keysym_t>, const std::set<xkb_keysym_t>);
bool handleInternalKeybinds(xkb_keysym_t);
bool handleVT(xkb_keysym_t);
@@ -166,86 +167,10 @@ class CKeybindManager {
void updateXKBTranslationState();
bool ensureMouseBindState();
- static bool tryMoveFocusToMonitor(PHLMONITOR monitor);
- static void moveWindowOutOfGroup(PHLWINDOW pWindow, const std::string& dir = "");
- static void moveWindowIntoGroup(PHLWINDOW pWindow, PHLWINDOW pWindowInDirection);
-
- static void switchToWindow(PHLWINDOW PWINDOWTOCHANGETO, bool forceFSCycle = false);
-
- // -------------- Dispatchers -------------- //
- static SDispatchResult closeActive(std::string);
- static SDispatchResult killActive(std::string);
- static SDispatchResult closeWindow(std::string);
- static SDispatchResult killWindow(std::string);
- static SDispatchResult signalActive(std::string);
- static SDispatchResult signalWindow(std::string);
- static SDispatchResult spawn(std::string);
- static SDispatchResult spawnRaw(std::string);
- static SDispatchResult toggleActiveFloating(std::string);
- static SDispatchResult toggleActivePseudo(std::string);
- static SDispatchResult setActiveFloating(std::string);
- static SDispatchResult setActiveTiled(std::string);
- static SDispatchResult changeworkspace(std::string);
- static SDispatchResult fullscreenActive(std::string);
- static SDispatchResult fullscreenStateActive(std::string args);
- static SDispatchResult moveActiveToWorkspace(std::string);
- static SDispatchResult moveActiveToWorkspaceSilent(std::string);
- static SDispatchResult moveFocusTo(std::string);
- static SDispatchResult focusUrgentOrLast(std::string);
- static SDispatchResult focusCurrentOrLast(std::string);
- static SDispatchResult centerWindow(std::string);
- static SDispatchResult moveActiveTo(std::string);
- static SDispatchResult swapActive(std::string);
- static SDispatchResult toggleGroup(std::string);
- static SDispatchResult changeGroupActive(std::string);
- static SDispatchResult focusMonitor(std::string);
- static SDispatchResult moveCursorToCorner(std::string);
- static SDispatchResult moveCursor(std::string);
- static SDispatchResult workspaceOpt(std::string);
- static SDispatchResult renameWorkspace(std::string);
- static SDispatchResult exitHyprland(std::string);
- static SDispatchResult moveCurrentWorkspaceToMonitor(std::string);
- static SDispatchResult moveWorkspaceToMonitor(std::string);
- static SDispatchResult focusWorkspaceOnCurrentMonitor(std::string);
- static SDispatchResult toggleSpecialWorkspace(std::string);
- static SDispatchResult forceRendererReload(std::string);
- static SDispatchResult resizeActive(std::string);
- static SDispatchResult moveActive(std::string);
- static SDispatchResult moveWindow(std::string);
- static SDispatchResult resizeWindow(std::string);
- static SDispatchResult circleNext(std::string);
- static SDispatchResult focusWindow(std::string);
- static SDispatchResult tagWindow(std::string);
- static SDispatchResult toggleSwallow(std::string);
- static SDispatchResult setSubmap(std::string);
- static SDispatchResult pass(std::string);
- static SDispatchResult sendshortcut(std::string);
- static SDispatchResult sendkeystate(std::string);
- static SDispatchResult layoutmsg(std::string);
- static SDispatchResult dpms(std::string);
- static SDispatchResult swapnext(std::string);
- static SDispatchResult swapActiveWorkspaces(std::string);
- static SDispatchResult pinActive(std::string);
- static SDispatchResult mouse(std::string);
- static SDispatchResult bringActiveToTop(std::string);
- static SDispatchResult alterZOrder(std::string);
- static SDispatchResult lockGroups(std::string);
- static SDispatchResult lockActiveGroup(std::string);
- static SDispatchResult moveIntoGroup(std::string);
- static SDispatchResult moveIntoOrCreateGroup(std::string);
- static SDispatchResult moveOutOfGroup(std::string);
- static SDispatchResult moveGroupWindow(std::string);
- static SDispatchResult moveWindowOrGroup(std::string);
- static SDispatchResult setIgnoreGroupLock(std::string);
- static SDispatchResult denyWindowFromGroup(std::string);
- static SDispatchResult global(std::string);
- static SDispatchResult event(std::string);
- static SDispatchResult setProp(std::string);
- static SDispatchResult forceIdle(std::string);
-
friend class CCompositor;
friend class CInputManager;
friend class Config::Legacy::CConfigManager;
+ friend class Config::Lua::CConfigManager;
friend class CWorkspace;
friend class CPointerManager;
};