From ea42041f936d5810c5cfa45d6bece12dde2fd9b6 Mon Sep 17 00:00:00 2001 From: Ikalco <73481042+ikalco@users.noreply.github.com> Date: Fri, 29 Aug 2025 15:16:40 -0500 Subject: protocols: implement pointer-warp-v1 (#11469) --- src/managers/ProtocolManager.cpp | 3 +++ src/managers/SeatManager.cpp | 5 +++-- src/managers/SeatManager.hpp | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src/managers') diff --git a/src/managers/ProtocolManager.cpp b/src/managers/ProtocolManager.cpp index b70d3b7d..c9690aba 100644 --- a/src/managers/ProtocolManager.cpp +++ b/src/managers/ProtocolManager.cpp @@ -64,6 +64,7 @@ #include "../protocols/XDGBell.hpp" #include "../protocols/ExtWorkspace.hpp" #include "../protocols/ExtDataDevice.hpp" +#include "../protocols/PointerWarp.hpp" #include "../helpers/Monitor.hpp" #include "../render/Renderer.hpp" @@ -192,6 +193,7 @@ CProtocolManager::CProtocolManager() { PROTO::xdgBell = makeUnique(&xdg_system_bell_v1_interface, 1, "XDGBell"); PROTO::extWorkspace = makeUnique(&ext_workspace_manager_v1_interface, 1, "ExtWorkspace"); PROTO::extDataDevice = makeUnique(&ext_data_control_manager_v1_interface, 1, "ExtDataDevice"); + PROTO::pointerWarp = makeUnique(&wp_pointer_warp_v1_interface, 1, "PointerWarp"); if (*PENABLECM) PROTO::colorManagement = makeUnique(&wp_color_manager_v1_interface, 1, "ColorManagement", *PDEBUGCM); @@ -295,6 +297,7 @@ CProtocolManager::~CProtocolManager() { PROTO::xdgBell.reset(); PROTO::extWorkspace.reset(); PROTO::extDataDevice.reset(); + PROTO::pointerWarp.reset(); for (auto& [_, lease] : PROTO::lease) { lease.reset(); diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index bc4f2dfc..15316dc6 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -58,7 +58,7 @@ uint32_t CSeatManager::nextSerial(SP seatResource) { return serial; } -bool CSeatManager::serialValid(SP seatResource, uint32_t serial) { +bool CSeatManager::serialValid(SP seatResource, uint32_t serial, bool erase) { if (!seatResource) return false; @@ -68,7 +68,8 @@ bool CSeatManager::serialValid(SP seatResource, uint32_t serial for (auto it = container->serials.begin(); it != container->serials.end(); ++it) { if (*it == serial) { - container->serials.erase(it); + if (erase) + container->serials.erase(it); return true; } } diff --git a/src/managers/SeatManager.hpp b/src/managers/SeatManager.hpp index 2d73e087..fe11f930 100644 --- a/src/managers/SeatManager.hpp +++ b/src/managers/SeatManager.hpp @@ -76,7 +76,7 @@ class CSeatManager { uint32_t nextSerial(SP seatResource); // pops the serial if it was valid, meaning it is consumed. - bool serialValid(SP seatResource, uint32_t serial); + bool serialValid(SP seatResource, uint32_t serial, bool erase = true); void onSetCursor(SP seatResource, uint32_t serial, SP surf, const Vector2D& hotspot); -- cgit v1.2.3