diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2023-04-09 13:48:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-09 13:48:20 +0100 |
| commit | 046ad79d11dbccc90ade48d63aaa340655d999fb (patch) | |
| tree | 7ffb5ae0d0abd09cba72e42be5a27585531090e4 /src/managers | |
| parent | e4e653ada6fc729efad3f6a0d49cf72b94c43b6c (diff) | |
GlobalShortcuts protocol impl (#1886)
Implements the `hyprland-global-shortcuts-v1` protocol
---------
Co-authored-by: Mihai Fufezan <fufexan@protonmail.com>
Diffstat (limited to 'src/managers')
| -rw-r--r-- | src/managers/KeybindManager.cpp | 21 | ||||
| -rw-r--r-- | src/managers/KeybindManager.hpp | 1 | ||||
| -rw-r--r-- | src/managers/ProtocolManager.cpp | 1 | ||||
| -rw-r--r-- | src/managers/ProtocolManager.hpp | 2 |
4 files changed, 23 insertions, 2 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 51043b04..0f99f2e4 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -63,6 +63,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["lockgroups"] = lockGroups; m_mDispatchers["moveintogroup"] = moveIntoGroup; m_mDispatchers["moveoutofgroup"] = moveOutOfGroup; + m_mDispatchers["global"] = global; m_tScrollTimer.reset(); } @@ -352,7 +353,7 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const std::string& for (auto& k : m_lKeybinds) { if (modmask != k.modmask || (g_pCompositor->m_sSeat.exclusiveClient && !k.locked) || k.submap != m_szCurrentSelectedSubmap || - (!pressed && !k.release && k.handler != "pass" && k.handler != "mouse") || k.shadowed) + (!pressed && !k.release && k.handler != "pass" && k.handler != "mouse" && k.handler != "global") || k.shadowed) continue; if (!key.empty()) { @@ -425,7 +426,10 @@ void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const int& for (auto& k : m_lKeybinds) { - bool shadow = false; + bool shadow = false; + + if (k.handler == "global") + continue; // can't be shadowed const auto KBKEY = xkb_keysym_from_name(k.key.c_str(), XKB_KEYSYM_CASE_INSENSITIVE); const auto KBKEYUPPER = xkb_keysym_to_upper(KBKEY); @@ -2139,3 +2143,16 @@ void CKeybindManager::moveOutOfGroup(std::string args) { g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV; } + +void CKeybindManager::global(std::string args) { + const auto APPID = args.substr(0, args.find_first_of(':')); + const auto NAME = args.substr(args.find_first_of(':') + 1); + + if (APPID.empty() || NAME.empty()) + return; + + if (!g_pProtocolManager->m_pGlobalShortcutsProtocolManager->globalShortcutExists(APPID, NAME)) + return; + + g_pProtocolManager->m_pGlobalShortcutsProtocolManager->sendGlobalShortcutEvent(APPID, NAME, g_pKeybindManager->m_iPassPressed); +}
\ No newline at end of file diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 6c773a8c..9fd299b2 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -139,6 +139,7 @@ class CKeybindManager { static void lockGroups(std::string); static void moveIntoGroup(std::string); static void moveOutOfGroup(std::string); + static void global(std::string); friend class CCompositor; friend class CInputManager; diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index d9aa299f..205f3d02 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -4,5 +4,6 @@ CProtocolManager::CProtocolManager() { m_pToplevelExportProtocolManager = std::make_unique<CToplevelExportProtocolManager>(); m_pFractionalScaleProtocolManager = std::make_unique<CFractionalScaleProtocolManager>(); m_pTextInputV1ProtocolManager = std::make_unique<CTextInputV1ProtocolManager>(); + m_pGlobalShortcutsProtocolManager = std::make_unique<CGlobalShortcutsProtocolManager>(); m_pScreencopyProtocolManager = std::make_unique<CScreencopyProtocolManager>(); }
\ No newline at end of file diff --git a/src/managers/ProtocolManager.hpp b/src/managers/ProtocolManager.hpp index 340785ec..bc6b776e 100644 --- a/src/managers/ProtocolManager.hpp +++ b/src/managers/ProtocolManager.hpp @@ -4,6 +4,7 @@ #include "../protocols/ToplevelExport.hpp" #include "../protocols/FractionalScale.hpp" #include "../protocols/TextInputV1.hpp" +#include "../protocols/GlobalShortcuts.hpp" #include "../protocols/Screencopy.hpp" class CProtocolManager { @@ -13,6 +14,7 @@ class CProtocolManager { std::unique_ptr<CToplevelExportProtocolManager> m_pToplevelExportProtocolManager; std::unique_ptr<CFractionalScaleProtocolManager> m_pFractionalScaleProtocolManager; std::unique_ptr<CTextInputV1ProtocolManager> m_pTextInputV1ProtocolManager; + std::unique_ptr<CGlobalShortcutsProtocolManager> m_pGlobalShortcutsProtocolManager; std::unique_ptr<CScreencopyProtocolManager> m_pScreencopyProtocolManager; }; |
