From 85bcae2c38bbaefa571d29deb8c3122fa3aea788 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 26 Jun 2020 17:49:28 +0300 Subject: [PATCH] QmlDesigner: Handle active scene id change properly on edit 3D view The scene id shown on the corner of edit 3D view is updated and toolstates are also stored under the new id. Change-Id: Ib3ac2f2bb829a5d908e22932c313c76bd4143592 Fixes: QDS-2277 Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri --- .../qml/qmlpuppet/mockfiles/EditView3D.qml | 8 ++++++++ .../qt5informationnodeinstanceserver.cpp | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index 22b8b0675aa..643b377e8b3 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -141,6 +141,14 @@ Item { _generalHelper.enableItemUpdate(editView, (scene && scene === activeScene)); } + function handleActiveSceneIdChange(newId) + { + if (sceneId !== newId) { + sceneId = newId; + storeCurrentToolStates(); + } + } + function fitToView() { if (editView) { diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index abed28978ee..2a2c7fce8fa 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -1253,12 +1253,26 @@ void Qt5InformationNodeInstanceServer::changeIds(const ChangeIdsCommand &command { Qt5NodeInstanceServer::changeIds(command); +#ifdef QUICK3D_MODULE + ServerNodeInstance sceneInstance = active3DSceneInstance(); if (m_active3DSceneUpdatePending) { - ServerNodeInstance sceneInstance = active3DSceneInstance(); const QString sceneId = sceneInstance.id(); if (!sceneId.isEmpty()) updateActiveSceneToEditView3D(); + } else { + qint32 sceneInstanceId = sceneInstance.instanceId(); + const QVector ids = command.ids(); + for (const auto &id : ids) { + if (sceneInstanceId == id.instanceId()) { + QMetaObject::invokeMethod(m_editView3DRootItem, "handleActiveSceneIdChange", + Qt::QueuedConnection, + Q_ARG(QVariant, QVariant(sceneInstance.id()))); + render3DEditView(); + break; + } + } } +#endif } void Qt5InformationNodeInstanceServer::changeState(const ChangeStateCommand &command)