diff options
| author | Ikalco <73481042+ikalco@users.noreply.github.com> | 2026-03-05 08:06:55 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-05 14:06:55 +0000 |
| commit | 803e81ac398ff56816321fbe24f013671cfebc7f (patch) | |
| tree | 9c3007c6b9f65f06d5969f03b2cf8c6c5e0f94fd /src/protocols/ToplevelExport.cpp | |
| parent | 34c7cc7d38256f32f30a947f8b459df220149feb (diff) | |
screenshare: improve destroy logic of objects (#13554)
Diffstat (limited to 'src/protocols/ToplevelExport.cpp')
| -rw-r--r-- | src/protocols/ToplevelExport.cpp | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index bf553a92..d7ba7519 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -13,10 +13,7 @@ CToplevelExportClient::CToplevelExportClient(SP<CHyprlandToplevelExportManagerV1 if UNLIKELY (!good()) return; - m_resource->setOnDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { - Screenshare::mgr()->destroyClientSessions(m_savedClient); - PROTO::toplevelExport->destroyResource(this); - }); + m_resource->setOnDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); m_resource->setDestroy([this](CHyprlandToplevelExportManagerV1* pMgr) { PROTO::toplevelExport->destroyResource(this); }); m_resource->setCaptureToplevel([this](CHyprlandToplevelExportManagerV1* pMgr, uint32_t frame, int32_t overlayCursor, uint32_t handle) { captureToplevel(frame, overlayCursor, g_pCompositor->getWindowFromHandle(handle)); @@ -28,10 +25,6 @@ CToplevelExportClient::CToplevelExportClient(SP<CHyprlandToplevelExportManagerV1 m_savedClient = m_resource->client(); } -CToplevelExportClient::~CToplevelExportClient() { - Screenshare::mgr()->destroyClientSessions(m_savedClient); -} - void CToplevelExportClient::captureToplevel(uint32_t frame, int32_t overlayCursor_, PHLWINDOW handle) { auto session = Screenshare::mgr()->getManagedSession(m_resource->client(), handle); @@ -63,11 +56,6 @@ CToplevelExportFrame::CToplevelExportFrame(SP<CHyprlandToplevelExportFrameV1> re m_resource->setDestroy([this](CHyprlandToplevelExportFrameV1* pFrame) { PROTO::toplevelExport->destroyResource(this); }); m_resource->setCopy([this](CHyprlandToplevelExportFrameV1* pFrame, wl_resource* res, int32_t ignoreDamage) { shareFrame(res, !!ignoreDamage); }); - m_listeners.stopped = m_session->m_events.stopped.listen([this]() { - if (good()) - m_resource->sendFailed(); - }); - m_frame = m_session->nextFrame(overlayCursor); auto formats = m_session->allowedFormats(); @@ -100,6 +88,12 @@ void CToplevelExportFrame::shareFrame(wl_resource* buffer, bool ignoreDamage) { return; } + if UNLIKELY (m_session.expired() || !m_session->monitor()) { + LOGM(Log::ERR, "Session stopped for frame {:x}", (uintptr_t)this); + m_resource->sendFailed(); + return; + } + if UNLIKELY (m_buffer) { LOGM(Log::ERR, "Buffer used in {:x}", (uintptr_t)this); m_resource->error(HYPRLAND_TOPLEVEL_EXPORT_FRAME_V1_ERROR_ALREADY_USED, "frame already used"); |
