From 02d02acf8a0544024b4ee54259503a0834e13e2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kaj=20Gr=C3=B6nholm?= <kaj.gronholm@qt.io>
Date: Mon, 30 Mar 2020 09:33:23 +0300
Subject: [PATCH] Fix importScene with external component
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When importScene is used directly with external component, don't add
content as children again.

Task-number: QTBUG-83141
Change-Id: Ibe92c9fede694bd2df5b474d2f0132f117eb5b97
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
---
 src/quick3d/qquick3dscenerenderer.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/quick3d/qquick3dscenerenderer.cpp b/src/quick3d/qquick3dscenerenderer.cpp
index e1706d21c..e26fb004a 100644
--- a/src/quick3d/qquick3dscenerenderer.cpp
+++ b/src/quick3d/qquick3dscenerenderer.cpp
@@ -341,8 +341,14 @@ void QQuick3DSceneRenderer::synchronize(QQuick3DViewport *item, const QSize &siz
         if (m_importRootNode)
             removeNodeFromLayer(m_importRootNode);
 
-        if (importRootNode)
-            m_layer->addChildrenToLayer(*importRootNode);
+        if (importRootNode) {
+            // if root node has already parent at this point
+            // it means "importScene: MyScene { }" type of inclusion.
+            // In this case don't duplicate content by adding it again.
+            const bool isEmbedded = importRootNode->parent;
+            if (!isEmbedded)
+                m_layer->addChildrenToLayer(*importRootNode);
+        }
 
         m_importRootNode = importRootNode;
     }
-- 
GitLab