From 5ba33f846129f3e6c0505b19f94634b24505e828 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 26 Apr 2026 15:16:36 +0100 Subject: 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. --- src/managers/KeybindManager.hpp | 103 ++++++---------------------------------- 1 file changed, 14 insertions(+), 89 deletions(-) (limited to 'src/managers/KeybindManager.hpp') 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 sMkKeys = {}; + std::vector sMkKeys = {}; uint32_t keycode = 0; bool catchAll = false; uint32_t modmask = 0; - std::set sMkMods = {}; + std::vector 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 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 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> m_keybinds; + SP 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 m_pressedKeys; - inline static SSubmap m_currentSelectedSubmap = {}; - std::vector> m_activeKeybinds; WP m_lastLongPressKeybind; @@ -141,14 +148,8 @@ class CKeybindManager { SP m_repeatKeyTimer; uint32_t m_repeatKeyRate = 50; - uint32_t m_timeLastMs = 0; - uint32_t m_lastCode = 0; - uint32_t m_lastMouseCode = 0; - std::vector> m_pressedSpecialBinds; - int m_passPressed = -1; // used for pass - CTimer m_scrollTimer; SDispatchResult handleKeybinds(const uint32_t, const SPressedKeyWithMods&, bool, SP, SP); @@ -156,7 +157,7 @@ class CKeybindManager { std::set m_mkKeys = {}; std::set m_mkMods = {}; eMultiKeyCase mkBindMatches(const SP); - eMultiKeyCase mkKeysymSetMatches(const std::set, const std::set); + eMultiKeyCase mkKeysymSetMatches(const std::vector, const std::set); 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; }; -- cgit v1.2.3