From 1198f83d8f084b78b51cecb56cd257a3baaf2c76 Mon Sep 17 00:00:00 2001 From: Szwagi Date: Fri, 19 Dec 2025 10:26:33 +0000 Subject: [PATCH] Fix locks and clean up CPointerManager::damageIfSoftware --- src/managers/PointerManager.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp index 4823e2428..53240b22a 100644 --- a/src/managers/PointerManager.cpp +++ b/src/managers/PointerManager.cpp @@ -744,16 +744,20 @@ void CPointerManager::damageIfSoftware() { auto b = getCursorBoxGlobal().expand(4); for (auto const& mw : m_monitorStates) { - auto monitor = mw->monitor; - if (monitor.expired() || !monitor->m_output || monitor->isMirror()) + auto monitor = mw->monitor.lock(); + if (!monitor || !monitor->m_output || monitor->isMirror()) continue; - if ((mw->softwareLocks > 0 || mw->hardwareFailed || g_pConfigManager->shouldUseSoftwareCursors(mw->monitor.lock())) && - b.overlaps({mw->monitor->m_position, mw->monitor->m_size}) && !mw->monitor->shouldSkipScheduleFrameOnMouseEvent()) { + auto usesSoftwareCursor = (mw->softwareLocks > 0 || mw->hardwareFailed || g_pConfigManager->shouldUseSoftwareCursors(monitor)); + if (!usesSoftwareCursor) + continue; - CBox damageBox = b.copy().translate(-monitor->m_position).scale(monitor->m_scale).round(); - mw->monitor->addDamage(damageBox); - } + auto shouldAddDamage = !monitor->shouldSkipScheduleFrameOnMouseEvent() && b.overlaps({monitor->m_position, monitor->m_size}); + if (!shouldAddDamage) + continue; + + CBox damageBox = b.copy().translate(-monitor->m_position).scale(monitor->m_scale).round(); + monitor->addDamage(damageBox); } }