summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-08-16 16:10:20 +0200
committervaxerski <vaxry@vaxry.net>2022-08-16 16:10:20 +0200
commit6e2467cc24f8afb70a4aaad3841a7c41fbc568b5 (patch)
tree2869fe6b3ff52a35c09593f446d5bd8a09c68692 /src
parent454d0d3f9f6b8f68a6bb59463ae3227f7ddce691 (diff)
fix active keymap in hyprctl devices
Diffstat (limited to 'src')
-rw-r--r--src/debug/HyprCtl.cpp4
-rw-r--r--src/managers/input/InputManager.cpp19
-rw-r--r--src/managers/input/InputManager.hpp1
3 files changed, 22 insertions, 2 deletions
diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp
index 21f4e23d..bee5ce79 100644
--- a/src/debug/HyprCtl.cpp
+++ b/src/debug/HyprCtl.cpp
@@ -300,7 +300,7 @@ R"#( {
result += "\"keyboards\": [\n";
for (auto& k : g_pInputManager->m_lKeyboards) {
- const auto KM = xkb_keymap_layout_get_name(wlr_keyboard_from_input_device(k.keyboard)->keymap, 0);
+ const auto KM = g_pInputManager->getActiveLayoutForKeyboard(&k);
result += getFormat(
R"#( {
"address": "0x%x",
@@ -385,7 +385,7 @@ R"#( {
result += "\n\nKeyboards:\n";
for (auto& k : g_pInputManager->m_lKeyboards) {
- const auto KM = xkb_keymap_layout_get_name(wlr_keyboard_from_input_device(k.keyboard)->keymap, 0);
+ const auto KM = g_pInputManager->getActiveLayoutForKeyboard(&k);
result += getFormat("\tKeyboard at %x:\n\t\t%s\n\t\t\trules: r \"%s\", m \"%s\", l \"%s\", v \"%s\", o \"%s\"\n\t\t\tactive keymap: %s\n", &k, k.keyboard->name, k.currentRules.rules.c_str(), k.currentRules.model.c_str(), k.currentRules.layout.c_str(), k.currentRules.variant.c_str(), k.currentRules.options.c_str(), KM);
}
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index c60b85bf..c552910c 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -887,3 +887,22 @@ uint32_t CInputManager::accumulateModsFromAllKBs() {
return finalMask;
}
+
+std::string CInputManager::getActiveLayoutForKeyboard(SKeyboard* pKeyboard) {
+ const auto WLRKB = wlr_keyboard_from_input_device(pKeyboard->keyboard);
+ const auto KEYMAP = WLRKB->keymap;
+ const auto STATE = WLRKB->xkb_state;
+ const auto LAYOUTSNUM = xkb_keymap_num_layouts(KEYMAP);
+
+ for (auto i = 0; i < LAYOUTSNUM; ++i) {
+ if (xkb_state_layout_index_is_active(STATE, i, XKB_STATE_LAYOUT_EFFECTIVE)) {
+ const auto LAYOUTNAME = xkb_keymap_layout_get_name(KEYMAP, i);
+
+ if (LAYOUTNAME)
+ return std::string(LAYOUTNAME);
+ return "error";
+ }
+ }
+
+ return "none";
+}
diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp
index b9e04d23..6f472521 100644
--- a/src/managers/input/InputManager.hpp
+++ b/src/managers/input/InputManager.hpp
@@ -35,6 +35,7 @@ public:
void constrainMouse(SMouse*, wlr_pointer_constraint_v1*);
void recheckConstraint(SMouse*);
void unconstrainMouse();
+ std::string getActiveLayoutForKeyboard(SKeyboard*);
Vector2D getMouseCoordsInternal();
void refocus();