From 69e12d77be2caa0eb27a40eff300b881b08da045 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 13 Aug 2025 23:25:57 +0200 Subject: [PATCH] Add preventing autosave when using editor context menus #3220 --- Source/Editor/Editor.cs | 6 +++++- Source/Editor/Managed/ManagedEditor.cpp | 9 +++++++++ Source/Editor/Managed/ManagedEditor.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 8c3256eb9..853a6eb7d 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -528,7 +528,11 @@ namespace FlaxEditor var timeSinceLastSave = Time.UnscaledGameTime - _lastAutoSaveTimer; var timeToNextSave = options.AutoSaveFrequency * 60.0f - timeSinceLastSave; - if (timeToNextSave <= 0.0f || _autoSaveNow) + if (timeToNextSave <= 0.0f && GetWindows().Any(x => x.GUI.Children.Any(c => c is GUI.ContextMenu.ContextMenuBase))) + { + // Skip aut-save if any context menu is opened to wait for user to end interaction + } + else if (timeToNextSave <= 0.0f || _autoSaveNow) { Log("Auto save"); _lastAutoSaveTimer = Time.UnscaledGameTime; diff --git a/Source/Editor/Managed/ManagedEditor.cpp b/Source/Editor/Managed/ManagedEditor.cpp index d65ae6e0a..6ff8e814f 100644 --- a/Source/Editor/Managed/ManagedEditor.cpp +++ b/Source/Editor/Managed/ManagedEditor.cpp @@ -11,6 +11,7 @@ #include "Engine/Scripting/ManagedCLR/MClass.h" #include "Engine/Scripting/ManagedCLR/MException.h" #include "Engine/Scripting/Internal/MainThreadManagedInvokeAction.h" +#include "Engine/Platform/WindowsManager.h" #include "Engine/Content/Assets/VisualScript.h" #include "Engine/Content/Content.h" #include "Engine/CSG/CSGBuilder.h" @@ -622,6 +623,14 @@ void ManagedEditor::WipeOutLeftoverSceneObjects() ObjectsRemovalService::Flush(); } +Array ManagedEditor::GetWindows() +{ + WindowsManager::WindowsLocker.Lock(); + auto result = WindowsManager::Windows; + WindowsManager::WindowsLocker.Unlock(); + return result; +} + void ManagedEditor::OnEditorAssemblyLoaded(MAssembly* assembly) { ASSERT(!HasManagedInstance()); diff --git a/Source/Editor/Managed/ManagedEditor.h b/Source/Editor/Managed/ManagedEditor.h index 3d4f49708..15649b97b 100644 --- a/Source/Editor/Managed/ManagedEditor.h +++ b/Source/Editor/Managed/ManagedEditor.h @@ -259,6 +259,7 @@ public: API_FUNCTION(Internal) static Array GetVisualScriptLocals(); API_FUNCTION(Internal) static bool EvaluateVisualScriptLocal(VisualScript* script, API_PARAM(Ref) VisualScriptLocal& local); API_FUNCTION(Internal) static void WipeOutLeftoverSceneObjects(); + API_FUNCTION(Internal) static Array GetWindows(); private: void OnEditorAssemblyLoaded(MAssembly* assembly);