From e8684034525829d58054c32da914d1713398fbb8 Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Thu, 12 Mar 2026 12:57:06 +0100 Subject: 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 --- src/protocols/ImageCopyCapture.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'src/protocols/ImageCopyCapture.cpp') 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(SPsendStopped(); - 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(SPnewCursorSession(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 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; } -- cgit v1.2.3