diff --git a/src/events/Events.cpp b/src/events/Events.cpp index f223b9d4..34a3fbb1 100644 --- a/src/events/Events.cpp +++ b/src/events/Events.cpp @@ -158,26 +158,32 @@ void Events::listener_mapWindow(wl_listener* listener, void* data) { // test wlr_xdg_toplevel_set_size(PWINDOW->m_uSurface.xdg->toplevel, PMONITOR->vecSize.x, PMONITOR->vecSize.y); + + Debug::log(LOG, "Map request dispatched."); } void Events::listener_unmapWindow(wl_listener* listener, void* data) { + CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_mapWindow); + } void Events::listener_commitWindow(wl_listener* listener, void* data) { + CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_mapWindow); + } void Events::listener_destroyWindow(wl_listener* listener, void* data) { - + CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_mapWindow); } void Events::listener_setTitleWindow(wl_listener* listener, void* data) { - + CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_mapWindow); } void Events::listener_fullscreenWindow(wl_listener* listener, void* data) { - + CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_mapWindow); } void Events::listener_mouseAxis(wl_listener* listener, void* data) { @@ -188,6 +194,18 @@ void Events::listener_mouseButton(wl_listener* listener, void* data) { } +void Events::listener_keyboardDestroy(wl_listener* listener, void* data) { + +} + +void Events::listener_keyboardKey(wl_listener* listener, void* data) { + g_pInputManager->onKeyboardKey((wlr_event_keyboard_key*)data); +} + +void Events::listener_keyboardMod(wl_listener* listener, void* data) { + g_pInputManager->onKeyboardMod(data); +} + void Events::listener_mouseFrame(wl_listener* listener, void* data) { wlr_seat_pointer_notify_frame(g_pCompositor->m_sWLRSeat); } @@ -206,7 +224,7 @@ void Events::listener_newInput(wl_listener* listener, void* data) { switch(DEVICE->type) { case WLR_INPUT_DEVICE_KEYBOARD: Debug::log(LOG, "Attached a keyboard with name %s", DEVICE->name); - // TODO: + g_pInputManager->newKeyboard(DEVICE); break; case WLR_INPUT_DEVICE_POINTER: Debug::log(LOG, "Attached a mouse with name %s", DEVICE->name); @@ -223,10 +241,6 @@ void Events::listener_newInput(wl_listener* listener, void* data) { wlr_seat_set_capabilities(g_pCompositor->m_sWLRSeat, capabilities); } -void Events::listener_newKeyboard(wl_listener* listener, void* data) { - -} - void Events::listener_newXDGSurface(wl_listener* listener, void* data) { // A window got opened const auto XDGSURFACE = (wlr_xdg_surface*)data; @@ -244,13 +258,17 @@ void Events::listener_newXDGSurface(wl_listener* listener, void* data) { wl_signal_add(&XDGSURFACE->events.destroy, &PNEWWINDOW->listen_destroyWindow); wl_signal_add(&XDGSURFACE->toplevel->events.set_title, &PNEWWINDOW->listen_setTitleWindow); wl_signal_add(&XDGSURFACE->toplevel->events.request_fullscreen, &PNEWWINDOW->listen_fullscreenWindow); + + Debug::log(LOG, "New XDG Surface created."); } void Events::listener_outputMgrApply(wl_listener* listener, void* data) { + const auto CONFIG = (wlr_output_configuration_v1*)data; } void Events::listener_outputMgrTest(wl_listener* listener, void* data) { + const auto CONFIG = (wlr_output_configuration_v1*)data; } @@ -259,9 +277,11 @@ void Events::listener_requestMouse(wl_listener* listener, void* data) { } void Events::listener_requestSetPrimarySel(wl_listener* listener, void* data) { - + const auto EVENT = (wlr_seat_request_set_primary_selection_event*)data; + wlr_seat_set_primary_selection(g_pCompositor->m_sWLRSeat, EVENT->source, EVENT->serial); } void Events::listener_requestSetSel(wl_listener* listener, void* data) { - + const auto EVENT = (wlr_seat_request_set_selection_event*)data; + wlr_seat_set_selection(g_pCompositor->m_sWLRSeat, EVENT->source, EVENT->serial); } \ No newline at end of file diff --git a/src/events/Events.hpp b/src/events/Events.hpp index b4a7d052..2319d671 100644 --- a/src/events/Events.hpp +++ b/src/events/Events.hpp @@ -26,8 +26,12 @@ namespace Events { LISTENER(mouseButton); LISTENER(mouseAxis); LISTENER(mouseFrame); + LISTENER(newInput); - LISTENER(newKeyboard); + + LISTENER(keyboardKey); + LISTENER(keyboardMod); + LISTENER(keyboardDestroy); LISTENER(requestMouse); LISTENER(requestSetSel); diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index 09878f54..3c83b427 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -23,3 +23,11 @@ struct SRenderData { int x; int y; }; + +struct SKeyboard { + wlr_input_device* keyboard; + + DYNLISTENER(keyboardMod); + DYNLISTENER(keyboardKey); + DYNLISTENER(keyboardDestroy); +}; \ No newline at end of file diff --git a/src/input/InputManager.cpp b/src/input/InputManager.cpp index b57205e1..e2e88b9e 100644 --- a/src/input/InputManager.cpp +++ b/src/input/InputManager.cpp @@ -22,4 +22,36 @@ void CInputManager::onMouseWarp(wlr_event_pointer_motion_absolute* e) { Vector2D CInputManager::getMouseCoordsInternal() { return m_vMouseCoords; +} + +void CInputManager::newKeyboard(wlr_input_device* keyboard) { + m_dKeyboards.push_back(SKeyboard()); + + const auto PNEWKEYBOARD = &m_dKeyboards.back(); + + PNEWKEYBOARD->keyboard = keyboard; + + xkb_rule_names rules; + + const auto CONTEXT = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + const auto KEYMAP = xkb_keymap_new_from_names(CONTEXT, &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); + + wlr_keyboard_set_keymap(keyboard->keyboard, KEYMAP); + xkb_keymap_unref(KEYMAP); + xkb_context_unref(CONTEXT); + wlr_keyboard_set_repeat_info(keyboard->keyboard, 25, 600); + + wl_signal_add(&keyboard->keyboard->events.modifiers, &PNEWKEYBOARD->listen_keyboardMod); + wl_signal_add(&keyboard->keyboard->events.key, &PNEWKEYBOARD->listen_keyboardKey); + wl_signal_add(&keyboard->events.destroy, &PNEWKEYBOARD->listen_keyboardDestroy); + + wlr_seat_set_keyboard(g_pCompositor->m_sWLRSeat, keyboard); +} + +void CInputManager::onKeyboardKey(wlr_event_keyboard_key* event) { + +} + +void CInputManager::onKeyboardMod(void* data) { + } \ No newline at end of file diff --git a/src/input/InputManager.hpp b/src/input/InputManager.hpp index 60fbedb7..b750ad4c 100644 --- a/src/input/InputManager.hpp +++ b/src/input/InputManager.hpp @@ -1,13 +1,18 @@ #pragma once #include "../defines.hpp" +#include +#include "../helpers/WLClasses.hpp" class CInputManager { public: void onMouseMoved(wlr_event_pointer_motion*); void onMouseWarp(wlr_event_pointer_motion_absolute*); + void onKeyboardKey(wlr_event_keyboard_key*); + void onKeyboardMod(void*); + void newKeyboard(wlr_input_device*); Vector2D getMouseCoordsInternal(); @@ -15,6 +20,8 @@ private: Vector2D m_vMouseCoords = Vector2D(0,0); Vector2D m_vWLRMouseCoords = Vector2D(0,0); + std::deque m_dKeyboards; + }; inline std::unique_ptr g_pInputManager; \ No newline at end of file