From 4e46cb0a01d1ec7105de797643228a1ce1bba41a Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 21 Sep 2021 11:14:47 -0500 Subject: [PATCH] Prevent crash in Landscape Canvas when creating a prefab from an open graph. Signed-off-by: Chris Galvan --- .../Code/Source/Editor/MainWindow.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp index 836eec682e..184f6eb886 100644 --- a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp +++ b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp @@ -2512,6 +2512,25 @@ namespace LandscapeCanvasEditor { // See comment above in OnPrefabInstancePropagationBegin m_prefabPropagationInProgress = false; + + // After prefab propagation is complete, the entity tied to one of our open + // graphs might have been deleted (e.g. if a prefab was created from that entity), + // so we need to close that graph to be safe. We need to close them in a separate + // iterator because the CloseEditor API will end up modifying m_dockWidgetsByEntity. + AZStd::vector dockWidgetsToDelete; + for (auto [entityId, dockWidgetId] : m_dockWidgetsByEntity) + { + AZ::Entity* entity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationRequests::FindEntity, entityId); + if (!entity) + { + dockWidgetsToDelete.push_back(dockWidgetId); + } + } + for (auto dockWidgetId : dockWidgetsToDelete) + { + CloseEditor(dockWidgetId); + } } void MainWindow::OnCryEditorEndCreate()