summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-03-25 16:37:53 +0300
committerGitHub <noreply@github.com>2026-03-25 13:37:53 +0000
commit8196711aaa78c8f62e6f720636ef707783685036 (patch)
treefc9362b4cc8410fd87276cae8ed272eba992e3c7 /src/managers
parentbbf6718c4fc55867be0db8946918ce03d3879f64 (diff)
screencopy: check share session state (#13839)
Diffstat (limited to 'src/managers')
-rw-r--r--src/managers/screenshare/ScreenshareManager.cpp2
-rw-r--r--src/managers/screenshare/ScreenshareManager.hpp1
-rw-r--r--src/managers/screenshare/ScreenshareSession.cpp4
3 files changed, 6 insertions, 1 deletions
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<CScreenshareFrame> nextFrame(bool overlayCursor);
void stop();
+ bool isActive();
// constraints
const std::vector<DRMFormat>& 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);