diff options
| author | xDarksome <dev@darkso.me> | 2022-08-18 22:24:00 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-18 22:24:00 +0300 |
| commit | 4af95d42537e32805e4f679715dc3e763c15e328 (patch) | |
| tree | cb604942fb011c9a5755a8a3a2fb625bac08bdab /src/managers/input/InputManager.cpp | |
| parent | 844c33c9801177adf65ea7ed163a8a6df36a9a37 (diff) | |
| parent | ece3ac97f932b1f39314cf63ec8e9abb5172104e (diff) | |
Merge branch 'hyprwm:main' into main
Diffstat (limited to 'src/managers/input/InputManager.cpp')
| -rw-r--r-- | src/managers/input/InputManager.cpp | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 95b30587..f8899f62 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -441,10 +441,19 @@ void CInputManager::newKeyboard(wlr_input_device* keyboard) { PNEWKEYBOARD->hyprListener_keyboardKey.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.key, &Events::listener_keyboardKey, PNEWKEYBOARD, "Keyboard"); PNEWKEYBOARD->hyprListener_keyboardDestroy.initCallback(&keyboard->events.destroy, &Events::listener_keyboardDestroy, PNEWKEYBOARD, "Keyboard"); - if (m_pActiveKeyboard) - m_pActiveKeyboard->active = false; + PNEWKEYBOARD->hyprListener_keyboardKeymap.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.keymap, [&](void* owner, void* data) { + const auto PKEYBOARD = (SKeyboard*)owner; + + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEYBOARD->name + "," +getActiveLayoutForKeyboard(PKEYBOARD)}, true); // force as this should ALWAYS be sent + + }, PNEWKEYBOARD, "Keyboard"); + + disableAllKeyboards(false); + m_pActiveKeyboard = PNEWKEYBOARD; + PNEWKEYBOARD->active = true; + applyConfigToKeyboard(PNEWKEYBOARD); wlr_seat_set_keyboard(g_pCompositor->m_sSeat.seat, wlr_keyboard_from_input_device(keyboard)); @@ -467,11 +476,19 @@ void CInputManager::newVirtualKeyboard(wlr_input_device* keyboard) { PNEWKEYBOARD->hyprListener_keyboardMod.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.modifiers, &Events::listener_keyboardMod, PNEWKEYBOARD, "Keyboard"); PNEWKEYBOARD->hyprListener_keyboardKey.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.key, &Events::listener_keyboardKey, PNEWKEYBOARD, "Keyboard"); PNEWKEYBOARD->hyprListener_keyboardDestroy.initCallback(&keyboard->events.destroy, &Events::listener_keyboardDestroy, PNEWKEYBOARD, "Keyboard"); + PNEWKEYBOARD->hyprListener_keyboardKeymap.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.keymap, [&](void* owner, void* data) { + const auto PKEYBOARD = (SKeyboard*)owner; + + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEYBOARD->name + "," +getActiveLayoutForKeyboard(PKEYBOARD)}, true); // force as this should ALWAYS be sent + + }, PNEWKEYBOARD, "Keyboard"); + + disableAllKeyboards(true); - if (m_pActiveKeyboard) - m_pActiveKeyboard->active = false; m_pActiveKeyboard = PNEWKEYBOARD; + PNEWKEYBOARD->active = true; + applyConfigToKeyboard(PNEWKEYBOARD); wlr_seat_set_keyboard(g_pCompositor->m_sSeat.seat, wlr_keyboard_from_input_device(keyboard)); @@ -582,6 +599,8 @@ void CInputManager::applyConfigToKeyboard(SKeyboard* pKeyboard) { xkb_keymap_unref(KEYMAP); xkb_context_unref(CONTEXT); + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->name + "," +getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent + Debug::log(LOG, "Set the keyboard layout to %s and variant to %s for keyboard \"%s\"", rules.layout, rules.variant, pKeyboard->keyboard->name); } @@ -735,6 +754,14 @@ void CInputManager::onKeyboardMod(void* data, SKeyboard* pKeyboard) { wlr_seat_set_keyboard(g_pCompositor->m_sSeat.seat, wlr_keyboard_from_input_device(pKeyboard->keyboard)); wlr_seat_keyboard_notify_modifiers(g_pCompositor->m_sSeat.seat, &wlr_keyboard_from_input_device(pKeyboard->keyboard)->modifiers); } + + const auto PWLRKB = wlr_keyboard_from_input_device(pKeyboard->keyboard); + + if (PWLRKB->modifiers.group != pKeyboard->activeLayout) { + pKeyboard->activeLayout = PWLRKB->modifiers.group; + + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->name + "," + getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent + } } void CInputManager::refocus() { @@ -906,3 +933,13 @@ std::string CInputManager::getActiveLayoutForKeyboard(SKeyboard* pKeyboard) { return "none"; } + +void CInputManager::disableAllKeyboards(bool virt) { + + for (auto& k : m_lKeyboards) { + if (k.isVirtual != virt) + continue; + + k.active = false; + } +}
\ No newline at end of file |
