summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-04-21 01:47:38 +0100
committerVaxry <vaxry@vaxry.net>2024-04-21 01:49:23 +0100
commit30e4b404f2a30230f57c946b655c2365b3bf8e3d (patch)
tree705e3143484dffed5d90df82d2c9ea26e02bedc2 /src/managers/input/InputManager.cpp
parenta141bbbea503ae7b320eba614a80ca2f4e5c1cba (diff)
cursor-shape: move to new impl
Diffstat (limited to 'src/managers/input/InputManager.cpp')
-rw-r--r--src/managers/input/InputManager.cpp40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index 60e4270d..4a7fc11a 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -4,6 +4,29 @@
#include <ranges>
#include "../../config/ConfigValue.hpp"
#include "../../desktop/Window.hpp"
+#include "../../protocols/CursorShape.hpp"
+
+CInputManager::CInputManager() {
+ m_sListeners.setCursorShape = PROTO::cursorShape->events.setShape.registerListener([this](std::any data) {
+ if (!cursorImageUnlocked())
+ return;
+
+ auto event = std::any_cast<CCursorShapeProtocol::SSetShapeEvent>(data);
+
+ if (wl_resource_get_client(event.pMgr->resource()) != g_pCompositor->m_sSeat.seat->pointer_state.focused_client->client)
+ return;
+
+ Debug::log(LOG, "cursorImage request: shape {} -> {}", (uint32_t)event.shape, event.shapeName);
+
+ m_sCursorSurfaceInfo.wlSurface.unassign();
+ m_sCursorSurfaceInfo.vHotspot = {};
+ m_sCursorSurfaceInfo.name = event.shapeName;
+ m_sCursorSurfaceInfo.hidden = false;
+
+ m_sCursorSurfaceInfo.inUse = true;
+ g_pHyprRenderer->setCursorFromName(m_sCursorSurfaceInfo.name);
+ });
+}
CInputManager::~CInputManager() {
m_vConstraints.clear();
@@ -509,23 +532,6 @@ void CInputManager::processMouseRequest(wlr_seat_pointer_request_set_cursor_even
}
}
-void CInputManager::processMouseRequest(wlr_cursor_shape_manager_v1_request_set_shape_event* e) {
- if (!cursorImageUnlocked())
- return;
-
- Debug::log(LOG, "cursorImage request: shape {}", (uint32_t)e->shape);
-
- if (e->seat_client == g_pCompositor->m_sSeat.seat->pointer_state.focused_client) {
- m_sCursorSurfaceInfo.wlSurface.unassign();
- m_sCursorSurfaceInfo.vHotspot = {};
- m_sCursorSurfaceInfo.name = wlr_cursor_shape_v1_name(e->shape);
- m_sCursorSurfaceInfo.hidden = false;
-
- m_sCursorSurfaceInfo.inUse = true;
- g_pHyprRenderer->setCursorFromName(m_sCursorSurfaceInfo.name);
- }
-}
-
void CInputManager::restoreCursorIconToApp() {
if (m_sCursorSurfaceInfo.inUse)
return;