summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-02-07 15:38:01 +0300
committerGitHub <noreply@github.com>2026-02-07 12:38:01 +0000
commit9f9dbb0dc54e76ef7d9dd6da8961e9ca1d4ac0ec (patch)
tree3ca57255748bedc670c29fce08454af05cb965e1 /src/managers
parentcfbbfb591ae5c7d11bae72effe6e08ef60ce7453 (diff)
renderer: allow tearing with DS with invisible cursors (#13155)
Diffstat (limited to 'src/managers')
-rw-r--r--src/managers/PointerManager.cpp11
-rw-r--r--src/managers/PointerManager.hpp1
2 files changed, 10 insertions, 2 deletions
diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp
index 44084d2c..5db37cb0 100644
--- a/src/managers/PointerManager.cpp
+++ b/src/managers/PointerManager.cpp
@@ -72,8 +72,10 @@ void CPointerManager::lockSoftwareForMonitor(PHLMONITOR mon) {
void CPointerManager::unlockSoftwareForMonitor(PHLMONITOR mon) {
auto const state = stateFor(mon);
state->softwareLocks--;
- if (state->softwareLocks < 0)
+ if (state->softwareLocks < 0) {
state->softwareLocks = 0;
+ Log::logger->log(Log::WARN, "Unlocking SW for monitor while it's not locked");
+ }
if (state->softwareLocks == 0)
updateCursorBackend();
@@ -81,7 +83,12 @@ void CPointerManager::unlockSoftwareForMonitor(PHLMONITOR mon) {
bool CPointerManager::softwareLockedFor(PHLMONITOR mon) {
auto const state = stateFor(mon);
- return state->softwareLocks > 0 || state->hardwareFailed;
+ return state->softwareLocks > 0 || (state->hardwareFailed && hasCursor() && g_pHyprRenderer->shouldRenderCursor());
+}
+
+bool CPointerManager::hasVisibleHWCursor(PHLMONITOR pMonitor) {
+ auto const state = stateFor(pMonitor);
+ return state->softwareLocks == 0 && !state->hardwareFailed && hasCursor() && g_pHyprRenderer->shouldRenderCursor();
}
Vector2D CPointerManager::position() {
diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp
index d60903a6..29603513 100644
--- a/src/managers/PointerManager.hpp
+++ b/src/managers/PointerManager.hpp
@@ -48,6 +48,7 @@ class CPointerManager {
void lockSoftwareAll();
void unlockSoftwareAll();
bool softwareLockedFor(PHLMONITOR pMonitor);
+ bool hasVisibleHWCursor(PHLMONITOR pMonitor);
void renderSoftwareCursorsFor(PHLMONITOR pMonitor, const Time::steady_tp& now, CRegion& damage /* logical */, std::optional<Vector2D> overridePos = {} /* monitor-local */,
bool forceRender = false);