summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2023-04-09 13:48:20 +0100
committerGitHub <noreply@github.com>2023-04-09 13:48:20 +0100
commit046ad79d11dbccc90ade48d63aaa340655d999fb (patch)
tree7ffb5ae0d0abd09cba72e42be5a27585531090e4 /src/managers
parente4e653ada6fc729efad3f6a0d49cf72b94c43b6c (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.cpp21
-rw-r--r--src/managers/KeybindManager.hpp1
-rw-r--r--src/managers/ProtocolManager.cpp1
-rw-r--r--src/managers/ProtocolManager.hpp2
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;
};