diff --git a/src/events/Devices.cpp b/src/events/Devices.cpp index 7a47df774..df4501cfd 100644 --- a/src/events/Devices.cpp +++ b/src/events/Devices.cpp @@ -56,7 +56,16 @@ void Events::listener_mouseAxis(wl_listener* listener, void* data) { void Events::listener_requestMouse(wl_listener* listener, void* data) { const auto EVENT = (wlr_seat_pointer_request_set_cursor_event*)data; + + if (!g_pHyprRenderer->shouldRenderCursor()) + return; + if (!EVENT->surface) { + g_pHyprRenderer->m_bWindowRequestedCursorHide = true; + } else { + g_pHyprRenderer->m_bWindowRequestedCursorHide = false; + } + if (EVENT->seat_client == g_pCompositor->m_sSeat.seat->pointer_state.focused_client) wlr_cursor_set_surface(g_pCompositor->m_sWLRCursor, EVENT->surface, EVENT->hotspot_x, EVENT->hotspot_y); } diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index affb49ff4..f73289974 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -772,7 +772,8 @@ void CHyprRenderer::ensureCursorRenderingMode() { } else if (*PCURSORTIMEOUT > PASSEDCURSORSECONDS && !m_bHasARenderedCursor) { m_bHasARenderedCursor = true; - wlr_xcursor_manager_set_cursor_image(g_pCompositor->m_sWLRXCursorMgr, "left_ptr", g_pCompositor->m_sWLRCursor); + if (!m_bWindowRequestedCursorHide) + wlr_xcursor_manager_set_cursor_image(g_pCompositor->m_sWLRXCursorMgr, "left_ptr", g_pCompositor->m_sWLRCursor); Debug::log(LOG, "Showing the cursor (timeout)"); @@ -782,4 +783,8 @@ void CHyprRenderer::ensureCursorRenderingMode() { } else { m_bHasARenderedCursor = true; } +} + +bool CHyprRenderer::shouldRenderCursor() { + return m_bHasARenderedCursor; } \ No newline at end of file diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 73508623f..43a241ed2 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -32,6 +32,9 @@ public: bool shouldRenderWindow(CWindow*, SMonitor*); bool shouldRenderWindow(CWindow*); void ensureCursorRenderingMode(); + bool shouldRenderCursor(); + + bool m_bWindowRequestedCursorHide = false; DAMAGETRACKINGMODES damageTrackingModeFromStr(const std::string&);