diff options
| author | outfoxxed <outfoxxed@outfoxxed.me> | 2026-03-12 12:57:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-12 11:57:06 +0000 |
| commit | e8684034525829d58054c32da914d1713398fbb8 (patch) | |
| tree | 45a16cc0c20d5d782f192a28af08523e8c5082cb /src/protocols/ImageCopyCapture.cpp | |
| parent | 8662ecba03bb4b4626963c080aa9353a6aa38854 (diff) | |
protocols: fix image-copy-capture stop handling and remove non protocol errors (#13706)
* protocols: send image-copy-capture stopped instead of destroy
Fixes a protocol error where the resource was destroyed instead of
sending stopped() to the client.
* protocols: don't send protocol errors in image-copy-capture for server errors
Diffstat (limited to 'src/protocols/ImageCopyCapture.cpp')
| -rw-r--r-- | src/protocols/ImageCopyCapture.cpp | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/src/protocols/ImageCopyCapture.cpp b/src/protocols/ImageCopyCapture.cpp index b9cc25e2..2e0527bf 100644 --- a/src/protocols/ImageCopyCapture.cpp +++ b/src/protocols/ImageCopyCapture.cpp @@ -40,14 +40,13 @@ CImageCopyCaptureSession::CImageCopyCaptureSession(SP<CExtImageCopyCaptureSessio if UNLIKELY (!m_session) { m_resource->sendStopped(); - m_resource->error(-1, "unable to share screen"); return; } sendConstraints(); m_listeners.constraintsChanged = m_session->m_events.constraintsChanged.listen([this]() { sendConstraints(); }); - m_listeners.stopped = m_session->m_events.stopped.listen([this]() { PROTO::imageCopyCapture->destroyResource(this); }); + m_listeners.stopped = m_session->m_events.stopped.listen([this]() { m_resource->sendStopped(); }); } CImageCopyCaptureSession::~CImageCopyCaptureSession() { @@ -66,7 +65,6 @@ void CImageCopyCaptureSession::sendConstraints() { if UNLIKELY (formats.empty()) { m_session->stop(); - m_resource->error(-1, "no formats available"); return; } @@ -144,7 +142,6 @@ CImageCopyCaptureCursorSession::CImageCopyCaptureCursorSession(SP<CExtImageCopyC m_session = Screenshare::mgr()->newCursorSession(pMgr->client(), m_pointer); if UNLIKELY (!m_session) { m_sessionResource->sendStopped(); - m_sessionResource->error(-1, "unable to share cursor"); return; } @@ -282,7 +279,6 @@ void CImageCopyCaptureCursorSession::sendConstraints() { auto format = m_session->format(); if UNLIKELY (format == DRM_FORMAT_INVALID) { m_session->stop(); - m_sessionResource->error(-1, "no formats available"); return; } @@ -314,13 +310,8 @@ void CImageCopyCaptureCursorSession::sendConstraints() { void CImageCopyCaptureCursorSession::sendCursorEvents() { const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(m_resource->client(), PERMISSION_TYPE_CURSOR_POS); - if (PERM != PERMISSION_RULE_ALLOW_MODE_ALLOW) { - if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) { - m_resource->error(-1, "client not allowed to capture cursor"); - PROTO::imageCopyCapture->destroyResource(this); - } + if (PERM != PERMISSION_RULE_ALLOW_MODE_ALLOW) return; - } const auto PMONITOR = m_source->m_monitor.expired() ? m_source->m_window->m_monitor.lock() : m_source->m_monitor.lock(); CBox sourceBox = m_source->logicalBox(); @@ -485,7 +476,7 @@ void CImageCopyCaptureProtocol::bindManager(wl_client* client, void* data, uint3 SP<CImageCaptureSource> source = PROTO::imageCaptureSource->sourceFromResource(source_); if (!source) { LOGM(Log::ERR, "Client tried to create image copy capture session from invalid source"); - destroyResource(pMgr); + pMgr->error(-1, "invalid image capture source"); return; } |
