From 2eac155b0c8225e29691a1630ddaf5d303801f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 1 Apr 2021 17:05:40 -0400 Subject: [PATCH] distantrenderer: update frame on rendering stopped and switch A regression was introduced in c472fe83aeb9a0ed712abad1dfa8b5baf1a60053 where the distantRenderingStopped and setRendererId don't update the current rendered frame Change-Id: I5aa477e89ae2031ffd282a2f02ae363dffef569a GitLab: #269 --- src/distantrenderer.cpp | 12 +++++++++++- src/rendermanager.cpp | 6 ++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/distantrenderer.cpp b/src/distantrenderer.cpp index 7969b36ca..87c1238fc 100644 --- a/src/distantrenderer.cpp +++ b/src/distantrenderer.cpp @@ -30,13 +30,21 @@ DistantRenderer::DistantRenderer(QQuickItem* parent) setPerformanceHint(QQuickPaintedItem::FastFBOResizing); connect(this, &DistantRenderer::lrcInstanceChanged, [this] { - if (lrcInstance_) + if (lrcInstance_) { connect(lrcInstance_->renderer(), &RenderManager::distantFrameUpdated, [this](const QString& id) { if (distantRenderId_ == id) update(QRect(0, 0, width(), height())); }); + + connect(lrcInstance_->renderer(), + &RenderManager::distantRenderingStopped, + [this](const QString& id) { + if (distantRenderId_ == id) + update(QRect(0, 0, width(), height())); + }); + } }); } @@ -46,6 +54,8 @@ void DistantRenderer::setRendererId(const QString& id) { distantRenderId_ = id; + // Note: Force a paint to update frame as we change the renderer + update(QRect(0, 0, width(), height())); } int diff --git a/src/rendermanager.cpp b/src/rendermanager.cpp index 84646d32a..22bff5db3 100644 --- a/src/rendermanager.cpp +++ b/src/rendermanager.cpp @@ -268,6 +268,11 @@ RenderManager::addDistantRenderer(const QString& id) [this](const QString& id) { Q_EMIT distantFrameUpdated(id); }); + distantConnectionMap_[id].stopped = QObject::connect(dfw.get(), + &FrameWrapper::renderingStopped, + [this](const QString& id) { + Q_EMIT distantRenderingStopped(id); + }); /* * Connect FrameWrapper to avmodel. @@ -301,6 +306,7 @@ RenderManager::removeDistantRenderer(const QString& id) if (dcIt != distantConnectionMap_.end()) { QObject::disconnect(dcIt->second.started); QObject::disconnect(dcIt->second.updated); + QObject::disconnect(dcIt->second.stopped); } /* -- GitLab