From b078a12eed18c848bfb876b9af482982504a5f73 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Thu, 18 Aug 2022 17:17:33 +0200 Subject: Added an activelayout event --- src/managers/input/InputManager.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/managers/input/InputManager.cpp') diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 95b30587..b002864d 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -441,10 +441,20 @@ 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"); + PNEWKEYBOARD->hyprListener_keyboardKeymap.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.keymap, [&](void* owner, void* data) { + const auto PKEYBOARD = (SKeyboard*)owner; + + if (PKEYBOARD == m_pActiveKeyboard) + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", getActiveLayoutForKeyboard(PKEYBOARD)}, true); // force as this should ALWAYS be sent + + }, PNEWKEYBOARD, "Keyboard"); + 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)); @@ -472,6 +482,8 @@ void CInputManager::newVirtualKeyboard(wlr_input_device* keyboard) { 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 +594,9 @@ void CInputManager::applyConfigToKeyboard(SKeyboard* pKeyboard) { xkb_keymap_unref(KEYMAP); xkb_context_unref(CONTEXT); + if (pKeyboard == m_pActiveKeyboard) + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", 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 +750,15 @@ 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; + + if (pKeyboard == m_pActiveKeyboard) + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent + } } void CInputManager::refocus() { -- cgit v1.2.3 From 9b62328b22fbd1ca20ac96cca0fcf21906d42aa6 Mon Sep 17 00:00:00 2001 From: vaxerski Date: Thu, 18 Aug 2022 17:50:32 +0200 Subject: minor changes to the activelayout event --- src/managers/input/InputManager.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/managers/input/InputManager.cpp') diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index b002864d..f8899f62 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -444,13 +444,12 @@ void CInputManager::newKeyboard(wlr_input_device* keyboard) { PNEWKEYBOARD->hyprListener_keyboardKeymap.initCallback(&wlr_keyboard_from_input_device(keyboard)->events.keymap, [&](void* owner, void* data) { const auto PKEYBOARD = (SKeyboard*)owner; - if (PKEYBOARD == m_pActiveKeyboard) - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", getActiveLayoutForKeyboard(PKEYBOARD)}, true); // force as this should ALWAYS be sent + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", PKEYBOARD->name + "," +getActiveLayoutForKeyboard(PKEYBOARD)}, true); // force as this should ALWAYS be sent }, PNEWKEYBOARD, "Keyboard"); - if (m_pActiveKeyboard) - m_pActiveKeyboard->active = false; + disableAllKeyboards(false); + m_pActiveKeyboard = PNEWKEYBOARD; PNEWKEYBOARD->active = true; @@ -477,9 +476,15 @@ 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; @@ -594,8 +599,7 @@ void CInputManager::applyConfigToKeyboard(SKeyboard* pKeyboard) { xkb_keymap_unref(KEYMAP); xkb_context_unref(CONTEXT); - if (pKeyboard == m_pActiveKeyboard) - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent + 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); } @@ -756,8 +760,7 @@ void CInputManager::onKeyboardMod(void* data, SKeyboard* pKeyboard) { if (PWLRKB->modifiers.group != pKeyboard->activeLayout) { pKeyboard->activeLayout = PWLRKB->modifiers.group; - if (pKeyboard == m_pActiveKeyboard) - g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent + g_pEventManager->postEvent(SHyprIPCEvent{"activelayout", pKeyboard->name + "," + getActiveLayoutForKeyboard(pKeyboard)}, true); // force as this should ALWAYS be sent } } @@ -930,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 -- cgit v1.2.3