summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
Diffstat (limited to 'src/managers')
-rw-r--r--src/managers/KeybindManager.cpp29
-rw-r--r--src/managers/KeybindManager.hpp3
-rw-r--r--src/managers/input/InputManager.cpp4
3 files changed, 24 insertions, 12 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index ce99030e..bb66e83d 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -69,7 +69,7 @@ uint32_t CKeybindManager::stringToModMask(std::string mods) {
return modMask;
}
-bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const xkb_keysym_t& key) {
+bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const xkb_keysym_t& key, const int& keycode) {
bool found = false;
if (handleInternalKeybinds(key))
@@ -82,15 +82,24 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const xkb_keysym_t
if (modmask != k.modmask || (g_pCompositor->m_sSeat.exclusiveClient && !k.locked) || k.submap != m_szCurrentSelectedSubmap)
continue;
- // oMg such performance hit!!11!
- // this little maneouver is gonna cost us 4µs
- const auto KBKEY = xkb_keysym_from_name(k.key.c_str(), XKB_KEYSYM_CASE_INSENSITIVE);
- const auto KBKEYUPPER = xkb_keysym_to_upper(KBKEY);
- // small TODO: fix 0-9 keys and other modified ones with shift
-
- if (key != KBKEY && key != KBKEYUPPER)
- continue;
+ if (k.keycode != -1) {
+ if (keycode != k.keycode)
+ continue;
+
+ } else {
+ if (key == 0)
+ continue; // this is a keycode check run
+
+ // oMg such performance hit!!11!
+ // this little maneouver is gonna cost us 4µs
+ const auto KBKEY = xkb_keysym_from_name(k.key.c_str(), XKB_KEYSYM_CASE_INSENSITIVE);
+ const auto KBKEYUPPER = xkb_keysym_to_upper(KBKEY);
+ // small TODO: fix 0-9 keys and other modified ones with shift
+
+ if (key != KBKEY && key != KBKEYUPPER)
+ continue;
+ }
const auto DISPATCHER = m_mDispatchers.find(k.handler);
@@ -99,7 +108,7 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const xkb_keysym_t
Debug::log(ERR, "Inavlid handler in a keybind! (handler %s does not exist)", k.handler.c_str());
} else {
// call the dispatcher
- Debug::log(LOG, "Keybind triggered, calling dispatcher (%d, %d)", modmask, KBKEYUPPER);
+ Debug::log(LOG, "Keybind triggered, calling dispatcher (%d, %d)", modmask, key);
DISPATCHER->second(k.arg);
}
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index c667a41c..08a1cba3 100644
--- a/src/managers/KeybindManager.hpp
+++ b/src/managers/KeybindManager.hpp
@@ -8,6 +8,7 @@
struct SKeybind {
std::string key = "";
+ int keycode = -1;
uint32_t modmask = 0;
std::string handler = "";
std::string arg = "";
@@ -19,7 +20,7 @@ class CKeybindManager {
public:
CKeybindManager();
- bool handleKeybinds(const uint32_t&, const xkb_keysym_t&);
+ bool handleKeybinds(const uint32_t&, const xkb_keysym_t&, const int&);
void addKeybind(SKeybind);
void removeKeybind(uint32_t, const std::string&);
uint32_t stringToModMask(std::string);
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index d5febe66..bdcddbe1 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -594,7 +594,9 @@ void CInputManager::onKeyboardKey(wlr_keyboard_key_event* e, SKeyboard* pKeyboar
bool found = false;
if (e->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
for (int i = 0; i < syms; ++i)
- found = g_pKeybindManager->handleKeybinds(MODS, keysyms[i]) || found;
+ found = g_pKeybindManager->handleKeybinds(MODS, keysyms[i], 0) || found;
+
+ found = g_pKeybindManager->handleKeybinds(MODS, 0, KEYCODE) || found;
} else if (e->state == WL_KEYBOARD_KEY_STATE_RELEASED) {
// hee hee
}