From a20a4327f55695eefa30c30d8e1bfacb8dc602c0 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Tue, 18 May 2021 02:24:46 +0200 Subject: [PATCH] screencasting: Make sure we don't stream after we've stopped a stream When doing some (intense) testing I've seen it crash. This will prevent it for good. --- src/plugins/screencast/screencastmanager.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/screencast/screencastmanager.cpp b/src/plugins/screencast/screencastmanager.cpp index d5728cb81f..9cbe2a5779 100644 --- a/src/plugins/screencast/screencastmanager.cpp +++ b/src/plugins/screencast/screencastmanager.cpp @@ -49,18 +49,22 @@ public: } connect(toplevel, &Toplevel::windowClosed, this, &PipeWireStream::stopStreaming); connect(this, &PipeWireStream::startStreaming, this, &WindowStream::startFeeding); + connect(this, &PipeWireStream::stopStreaming, this, &WindowStream::stopFeeding); } private: void startFeeding() { - auto scene = Compositor::self()->scene(); - connect(scene, &Scene::frameRendered, this, &WindowStream::bufferToStream); + connect(Compositor::self()->scene(), &Scene::frameRendered, this, &WindowStream::bufferToStream); connect(m_toplevel, &Toplevel::damaged, this, &WindowStream::includeDamage); m_damagedRegion = m_toplevel->visibleGeometry(); m_toplevel->addRepaintFull(); } + void stopFeeding() { + disconnect(Compositor::self()->scene(), &Scene::frameRendered, this, &WindowStream::bufferToStream); + } + void includeDamage(Toplevel *toplevel, const QRegion &damage) { Q_ASSERT(m_toplevel == toplevel); m_damagedRegion |= damage;