diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 86098bbb..356d6aeb 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -193,4 +193,6 @@ void CCompositor::focusWindow(CWindow* pWindow) { g_pXWaylandManager->activateSurface(g_pXWaylandManager->getWindowSurface(m_pLastFocus), false); m_pLastFocus = pWindow; + + Debug::log(LOG, "Set focus to %x", pWindow); } \ No newline at end of file diff --git a/src/events/Events.cpp b/src/events/Events.cpp index 9acea081..fbc5c71f 100644 --- a/src/events/Events.cpp +++ b/src/events/Events.cpp @@ -203,6 +203,7 @@ void Events::listener_mapWindow(wl_listener* listener, void* data) { // test g_pXWaylandManager->setWindowSize(PWINDOW, PMONITOR->vecSize); + g_pCompositor->focusWindow(PWINDOW); Debug::log(LOG, "Map request dispatched."); } @@ -318,11 +319,13 @@ void Events::listener_surfaceXWayland(wl_listener* listener, void* data) { } void Events::listener_keyboardKey(wl_listener* listener, void* data) { - g_pInputManager->onKeyboardKey((wlr_event_keyboard_key*)data); + SKeyboard* PKEYBOARD = wl_container_of(listener, PKEYBOARD, listen_keyboardKey); + g_pInputManager->onKeyboardKey((wlr_event_keyboard_key*)data, PKEYBOARD); } void Events::listener_keyboardMod(wl_listener* listener, void* data) { - g_pInputManager->onKeyboardMod(data); + SKeyboard* PKEYBOARD = wl_container_of(listener, PKEYBOARD, listen_keyboardMod); + g_pInputManager->onKeyboardMod(data, PKEYBOARD); } void Events::listener_mouseFrame(wl_listener* listener, void* data) { diff --git a/src/managers/InputManager.cpp b/src/managers/InputManager.cpp index 5fb67b0a..e953e705 100644 --- a/src/managers/InputManager.cpp +++ b/src/managers/InputManager.cpp @@ -89,10 +89,26 @@ void CInputManager::newMouse(wlr_input_device* mouse) { wlr_cursor_attach_input_device(g_pCompositor->m_sWLRCursor, mouse); } -void CInputManager::onKeyboardKey(wlr_event_keyboard_key* event) { +void CInputManager::onKeyboardKey(wlr_event_keyboard_key* e, SKeyboard* pKeyboard) { + const auto KEYCODE = e->keycode + 8; // Because to xkbcommon it's +8 from libinput + const xkb_keysym_t* keysyms; + int syms = xkb_state_key_get_syms(pKeyboard->keyboard->keyboard->xkb_state, KEYCODE, &keysyms); + + const auto MODS = wlr_keyboard_get_modifiers(pKeyboard->keyboard->keyboard); + + wlr_idle_notify_activity(g_pCompositor->m_sWLRIdle, g_pCompositor->m_sWLRSeat); + + if (e->state == WL_KEYBOARD_KEY_STATE_PRESSED) { + // TODO: keybinds + + } + + wlr_seat_set_keyboard(g_pCompositor->m_sWLRSeat, pKeyboard->keyboard); + wlr_seat_keyboard_notify_key(g_pCompositor->m_sWLRSeat, e->time_msec, e->keycode, e->state); } -void CInputManager::onKeyboardMod(void* data) { - +void CInputManager::onKeyboardMod(void* data, SKeyboard* pKeyboard) { + wlr_seat_set_keyboard(g_pCompositor->m_sWLRSeat, pKeyboard->keyboard); + wlr_seat_keyboard_notify_modifiers(g_pCompositor->m_sWLRSeat, &pKeyboard->keyboard->keyboard->modifiers); } \ No newline at end of file diff --git a/src/managers/InputManager.hpp b/src/managers/InputManager.hpp index 78601862..b55ffd4f 100644 --- a/src/managers/InputManager.hpp +++ b/src/managers/InputManager.hpp @@ -10,8 +10,8 @@ public: void onMouseMoved(wlr_event_pointer_motion*); void onMouseWarp(wlr_event_pointer_motion_absolute*); void onMouseButton(wlr_event_pointer_button*); - void onKeyboardKey(wlr_event_keyboard_key*); - void onKeyboardMod(void*); + void onKeyboardKey(wlr_event_keyboard_key*, SKeyboard*); + void onKeyboardMod(void*, SKeyboard*); void newKeyboard(wlr_input_device*); void newMouse(wlr_input_device*);