2022-03-21 15:17:04 +01:00
|
|
|
#include "Events.hpp"
|
|
|
|
|
|
|
|
#include "../Compositor.hpp"
|
|
|
|
#include "../helpers/WLClasses.hpp"
|
2022-06-09 12:46:55 +02:00
|
|
|
#include "../managers/input/InputManager.hpp"
|
2022-03-21 15:17:04 +01:00
|
|
|
#include "../render/Renderer.hpp"
|
|
|
|
|
|
|
|
// ---------------------------------------------------- //
|
|
|
|
// _____ ________ _______ _____ ______ _____ //
|
|
|
|
// | __ \| ____\ \ / /_ _/ ____| ____|/ ____| //
|
|
|
|
// | | | | |__ \ \ / / | || | | |__ | (___ //
|
|
|
|
// | | | | __| \ \/ / | || | | __| \___ \ //
|
|
|
|
// | |__| | |____ \ / _| || |____| |____ ____) | //
|
|
|
|
// |_____/|______| \/ |_____\_____|______|_____/ //
|
|
|
|
// //
|
|
|
|
// ---------------------------------------------------- //
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_keyboardDestroy(void* owner, void* data) {
|
|
|
|
SKeyboard* PKEYBOARD = (SKeyboard*)owner;
|
|
|
|
g_pInputManager->destroyKeyboard(PKEYBOARD);
|
2022-03-21 15:17:04 +01:00
|
|
|
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Destroyed keyboard {:x}", (uintptr_t)PKEYBOARD);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_keyboardKey(void* owner, void* data) {
|
|
|
|
SKeyboard* PKEYBOARD = (SKeyboard*)owner;
|
|
|
|
g_pInputManager->onKeyboardKey((wlr_keyboard_key_event*)data, PKEYBOARD);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_keyboardMod(void* owner, void* data) {
|
|
|
|
SKeyboard* PKEYBOARD = (SKeyboard*)owner;
|
|
|
|
g_pInputManager->onKeyboardMod(data, PKEYBOARD);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_mouseFrame(wl_listener* listener, void* data) {
|
|
|
|
wlr_seat_pointer_notify_frame(g_pCompositor->m_sSeat.seat);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_mouseMove(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onMouseMoved((wlr_pointer_motion_event*)data);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_mouseMoveAbsolute(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onMouseWarp((wlr_pointer_motion_absolute_event*)data);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_mouseButton(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onMouseButton((wlr_pointer_button_event*)data);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_mouseAxis(wl_listener* listener, void* data) {
|
2022-07-16 14:28:17 +02:00
|
|
|
g_pInputManager->onMouseWheel((wlr_pointer_axis_event*)data);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_requestMouse(wl_listener* listener, void* data) {
|
|
|
|
const auto EVENT = (wlr_seat_pointer_request_set_cursor_event*)data;
|
2022-06-26 13:43:32 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->processMouseRequest(EVENT);
|
2022-03-21 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_newInput(wl_listener* listener, void* data) {
|
|
|
|
const auto DEVICE = (wlr_input_device*)data;
|
2022-03-21 15:17:04 +01:00
|
|
|
|
2022-12-16 18:17:31 +01:00
|
|
|
switch (DEVICE->type) {
|
2022-07-16 11:44:12 +02:00
|
|
|
case WLR_INPUT_DEVICE_KEYBOARD:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a keyboard with name {}", DEVICE->name);
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->newKeyboard(DEVICE);
|
|
|
|
break;
|
|
|
|
case WLR_INPUT_DEVICE_POINTER:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a mouse with name {}", DEVICE->name);
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->newMouse(DEVICE);
|
|
|
|
break;
|
|
|
|
case WLR_INPUT_DEVICE_TOUCH:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a touch device with name {}", DEVICE->name);
|
2022-09-21 15:39:25 +02:00
|
|
|
g_pInputManager->newTouchDevice(DEVICE);
|
2022-07-16 11:44:12 +02:00
|
|
|
break;
|
|
|
|
case WLR_INPUT_DEVICE_TABLET_TOOL:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a tablet tool with name {}", DEVICE->name);
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->newTabletTool(DEVICE);
|
|
|
|
break;
|
|
|
|
case WLR_INPUT_DEVICE_TABLET_PAD:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a tablet pad with name {}", DEVICE->name);
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->newTabletPad(DEVICE);
|
|
|
|
break;
|
2022-10-04 21:07:21 +02:00
|
|
|
case WLR_INPUT_DEVICE_SWITCH:
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "Attached a switch device with name {}", DEVICE->name);
|
2022-10-04 21:07:21 +02:00
|
|
|
g_pInputManager->newSwitch(DEVICE);
|
|
|
|
break;
|
2023-09-06 12:51:36 +02:00
|
|
|
default: Debug::log(WARN, "Unrecognized input device plugged in: {}", DEVICE->name); break;
|
2022-07-16 11:44:12 +02:00
|
|
|
}
|
2022-03-21 15:17:04 +01:00
|
|
|
|
2022-12-05 15:28:27 +01:00
|
|
|
g_pInputManager->updateCapabilities();
|
2022-04-17 21:40:04 +02:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_newConstraint(wl_listener* listener, void* data) {
|
|
|
|
const auto PCONSTRAINT = (wlr_pointer_constraint_v1*)data;
|
2022-04-17 21:40:04 +02:00
|
|
|
|
2023-09-06 12:51:36 +02:00
|
|
|
Debug::log(LOG, "New mouse constraint at {:x}", (uintptr_t)PCONSTRAINT);
|
2022-04-17 21:40:04 +02:00
|
|
|
|
2024-03-02 22:04:55 +01:00
|
|
|
const auto SURFACE = CWLSurface::surfaceFromWlr(PCONSTRAINT->surface);
|
2022-04-17 21:40:04 +02:00
|
|
|
|
2024-03-02 22:04:55 +01:00
|
|
|
if (!SURFACE) {
|
|
|
|
Debug::log(ERR, "Refusing a constraint from an unassigned wl_surface {:x}", (uintptr_t)PCONSTRAINT->surface);
|
|
|
|
return;
|
2022-07-16 11:44:12 +02:00
|
|
|
}
|
2022-05-19 15:29:26 +02:00
|
|
|
|
2024-03-02 22:04:55 +01:00
|
|
|
SURFACE->appendConstraint(PCONSTRAINT);
|
2022-05-12 12:13:02 +02:00
|
|
|
}
|
2022-05-19 15:29:26 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_newVirtPtr(wl_listener* listener, void* data) {
|
2022-12-16 18:17:31 +01:00
|
|
|
const auto EV = (wlr_virtual_pointer_v1_new_pointer_event*)data;
|
2022-07-16 11:44:12 +02:00
|
|
|
const auto POINTER = EV->new_pointer;
|
2022-12-16 18:17:31 +01:00
|
|
|
const auto DEVICE = &POINTER->pointer.base;
|
2022-05-19 15:29:26 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->newMouse(DEVICE, true);
|
2022-05-12 12:13:02 +02:00
|
|
|
}
|
2022-04-17 21:40:04 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_destroyMouse(void* owner, void* data) {
|
|
|
|
const auto PMOUSE = (SMouse*)owner;
|
2022-04-17 21:40:04 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->destroyMouse(PMOUSE->mouse);
|
2022-04-17 21:40:04 +02:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_swipeBegin(wl_listener* listener, void* data) {
|
|
|
|
const auto EVENT = (wlr_pointer_swipe_begin_event*)data;
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->onSwipeBegin(EVENT);
|
2022-05-12 12:13:02 +02:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_swipeUpdate(wl_listener* listener, void* data) {
|
|
|
|
const auto EVENT = (wlr_pointer_swipe_update_event*)data;
|
2022-05-12 12:13:02 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->onSwipeUpdate(EVENT);
|
2022-05-12 12:13:02 +02:00
|
|
|
}
|
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
void Events::listener_swipeEnd(wl_listener* listener, void* data) {
|
|
|
|
const auto EVENT = (wlr_pointer_swipe_end_event*)data;
|
2022-05-12 12:13:02 +02:00
|
|
|
|
2022-07-16 11:44:12 +02:00
|
|
|
g_pInputManager->onSwipeEnd(EVENT);
|
2022-06-26 18:28:30 +02:00
|
|
|
}
|
2022-07-16 16:12:31 +02:00
|
|
|
|
|
|
|
void Events::listener_pinchBegin(wl_listener* listener, void* data) {
|
|
|
|
const auto EV = (wlr_pointer_pinch_begin_event*)data;
|
|
|
|
wlr_pointer_gestures_v1_send_pinch_begin(g_pCompositor->m_sWLRPointerGestures, g_pCompositor->m_sSeat.seat, EV->time_msec, EV->fingers);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_pinchUpdate(wl_listener* listener, void* data) {
|
|
|
|
const auto EV = (wlr_pointer_pinch_update_event*)data;
|
|
|
|
wlr_pointer_gestures_v1_send_pinch_update(g_pCompositor->m_sWLRPointerGestures, g_pCompositor->m_sSeat.seat, EV->time_msec, EV->dx, EV->dy, EV->scale, EV->rotation);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_pinchEnd(wl_listener* listener, void* data) {
|
|
|
|
const auto EV = (wlr_pointer_pinch_end_event*)data;
|
|
|
|
wlr_pointer_gestures_v1_send_pinch_end(g_pCompositor->m_sWLRPointerGestures, g_pCompositor->m_sSeat.seat, EV->time_msec, EV->cancelled);
|
2022-08-05 16:21:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_newVirtualKeyboard(wl_listener* listener, void* data) {
|
|
|
|
const auto WLRKB = (wlr_virtual_keyboard_v1*)data;
|
|
|
|
|
|
|
|
g_pInputManager->newVirtualKeyboard(&WLRKB->keyboard.base);
|
2022-08-07 21:17:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_touchBegin(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onTouchDown((wlr_touch_down_event*)data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_touchEnd(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onTouchUp((wlr_touch_up_event*)data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_touchUpdate(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onTouchMove((wlr_touch_motion_event*)data);
|
2022-09-22 22:14:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_touchFrame(wl_listener* listener, void* data) {
|
|
|
|
wlr_seat_touch_notify_frame(g_pCompositor->m_sSeat.seat);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_holdBegin(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onPointerHoldBegin((wlr_pointer_hold_begin_event*)data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Events::listener_holdEnd(wl_listener* listener, void* data) {
|
|
|
|
g_pInputManager->onPointerHoldEnd((wlr_pointer_hold_end_event*)data);
|
2022-07-16 16:12:31 +02:00
|
|
|
}
|