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