mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-26 08:45:58 +01:00
fix active keymap in hyprctl devices
This commit is contained in:
parent
454d0d3f9f
commit
6e2467cc24
3 changed files with 22 additions and 2 deletions
|
@ -300,7 +300,7 @@ R"#( {
|
||||||
|
|
||||||
result += "\"keyboards\": [\n";
|
result += "\"keyboards\": [\n";
|
||||||
for (auto& k : g_pInputManager->m_lKeyboards) {
|
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(
|
result += getFormat(
|
||||||
R"#( {
|
R"#( {
|
||||||
"address": "0x%x",
|
"address": "0x%x",
|
||||||
|
@ -385,7 +385,7 @@ R"#( {
|
||||||
result += "\n\nKeyboards:\n";
|
result += "\n\nKeyboards:\n";
|
||||||
|
|
||||||
for (auto& k : g_pInputManager->m_lKeyboards) {
|
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);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -887,3 +887,22 @@ uint32_t CInputManager::accumulateModsFromAllKBs() {
|
||||||
|
|
||||||
return finalMask;
|
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";
|
||||||
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ public:
|
||||||
void constrainMouse(SMouse*, wlr_pointer_constraint_v1*);
|
void constrainMouse(SMouse*, wlr_pointer_constraint_v1*);
|
||||||
void recheckConstraint(SMouse*);
|
void recheckConstraint(SMouse*);
|
||||||
void unconstrainMouse();
|
void unconstrainMouse();
|
||||||
|
std::string getActiveLayoutForKeyboard(SKeyboard*);
|
||||||
|
|
||||||
Vector2D getMouseCoordsInternal();
|
Vector2D getMouseCoordsInternal();
|
||||||
void refocus();
|
void refocus();
|
||||||
|
|
Loading…
Reference in a new issue