summaryrefslogtreecommitdiff
path: root/src/protocols/ImageCopyCapture.cpp
diff options
context:
space:
mode:
authoroutfoxxed <outfoxxed@outfoxxed.me>2026-03-12 12:57:06 +0100
committerGitHub <noreply@github.com>2026-03-12 11:57:06 +0000
commite8684034525829d58054c32da914d1713398fbb8 (patch)
tree45a16cc0c20d5d782f192a28af08523e8c5082cb /src/protocols/ImageCopyCapture.cpp
parent8662ecba03bb4b4626963c080aa9353a6aa38854 (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.cpp15
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;
}