From 8196711aaa78c8f62e6f720636ef707783685036 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:37:53 +0300 Subject: screencopy: check share session state (#13839) --- src/managers/screenshare/ScreenshareManager.cpp | 2 +- src/managers/screenshare/ScreenshareManager.hpp | 1 + src/managers/screenshare/ScreenshareSession.cpp | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src/managers') diff --git a/src/managers/screenshare/ScreenshareManager.cpp b/src/managers/screenshare/ScreenshareManager.cpp index 63f2bbbc..6a0f5b95 100644 --- a/src/managers/screenshare/ScreenshareManager.cpp +++ b/src/managers/screenshare/ScreenshareManager.cpp @@ -156,7 +156,7 @@ bool CScreenshareManager::isOutputBeingSSd(PHLMONITOR monitor) { return std::ranges::any_of(m_sessions, [monitor](const auto& s) { if (!s) return false; - return (s->m_type == SHARE_MONITOR || s->m_type == SHARE_REGION) && s->m_monitor == monitor; + return s->isActive() && (s->m_type == SHARE_MONITOR || s->m_type == SHARE_REGION) && s->m_monitor == monitor; }); } diff --git a/src/managers/screenshare/ScreenshareManager.hpp b/src/managers/screenshare/ScreenshareManager.hpp index 5a4ada5e..7f45f68d 100644 --- a/src/managers/screenshare/ScreenshareManager.hpp +++ b/src/managers/screenshare/ScreenshareManager.hpp @@ -45,6 +45,7 @@ namespace Screenshare { UP nextFrame(bool overlayCursor); void stop(); + bool isActive(); // constraints const std::vector& allowedFormats() const; diff --git a/src/managers/screenshare/ScreenshareSession.cpp b/src/managers/screenshare/ScreenshareSession.cpp index 8dbfc72a..75f700ba 100644 --- a/src/managers/screenshare/ScreenshareSession.cpp +++ b/src/managers/screenshare/ScreenshareSession.cpp @@ -61,6 +61,10 @@ void CScreenshareSession::stop() { screenshareEvents(false); } +bool CScreenshareSession::isActive() { + return !m_stopped && m_sharing; +} + void CScreenshareSession::init() { uintptr_t ptr = m_type == SHARE_WINDOW && !m_window.expired() ? (uintptr_t)m_window.get() : (m_monitor.expired() ? (uintptr_t)nullptr : (uintptr_t)m_monitor.get()); LOGM(Log::TRACE, "Created screenshare session for ({}): {}, {:x}", m_type, m_name, ptr); -- cgit v1.2.3