From 8dcc3032a81e8b4eec9bbe7fa657caf1b4b8db9e Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sun, 24 Jul 2022 12:16:26 +0200 Subject: [PATCH] fix keybinds shadowing multibinds --- src/managers/KeybindManager.cpp | 14 ++++++++++++-- src/managers/KeybindManager.hpp | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 3f723565..893313f4 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -184,7 +184,7 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const std::string& DISPATCHER->second(k.arg); } - shadowKeybinds(); + shadowKeybinds(keysym == 0 ? 0 : keysym, keycode == -1 ? -1 : keycode); found = true; } @@ -192,7 +192,7 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const std::string& return found; } -void CKeybindManager::shadowKeybinds() { +void CKeybindManager::shadowKeybinds(const xkb_keysym_t& doesntHave, const uint32_t& doesntHaveCode) { // shadow disables keybinds after one has been triggered for (auto& k : m_lKeybinds) { @@ -206,12 +206,22 @@ void CKeybindManager::shadowKeybinds() { if ((pk == KBKEY || pk == KBKEYUPPER)) { shadow = true; } + + if (pk == doesntHave && doesntHave != 0) { + shadow = false; + break; + } } for (auto& pk : m_dPressedKeycodes) { if (pk == (unsigned int)k.keycode) { shadow = true; } + + if (pk == doesntHaveCode && doesntHaveCode != 0 && doesntHaveCode != -1) { + shadow = false; + break; + } } k.shadowed = shadow; diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index c4a37330..ea2f931a 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -31,7 +31,7 @@ public: void removeKeybind(uint32_t, const std::string&); uint32_t stringToModMask(std::string); void clearKeybinds(); - void shadowKeybinds(); + void shadowKeybinds(const xkb_keysym_t& doesntHave = 0, const uint32_t& doesntHaveCode = 0); std::unordered_map> m_mDispatchers;