diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs index d5b5d12094..e27c12cc6f 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorSettingsProvider.cs @@ -175,7 +175,15 @@ private void OnFocusOut(FocusOutEvent @event = null) private void ValidateAndSaveAsset(InputActionAsset asset) { - ProjectWideActionsAsset.Verify(asset); // Ignore verification result for save + // This code should be cleaned up once we migrate the InputControl stuff from ImGUI completely. + // Since at that point it stops being a separate window that steals focus. + // (See case ISXB-1713) + if (!InputEditorUserSettings.autoSaveInputActionAssets || m_View.IsControlSchemeViewActive()) + { + return; + } + + ProjectWideActionsAsset.Verify(asset); // Ignore verification result for save EditorHelpers.SaveAsset(AssetDatabase.GetAssetPath(asset), asset.ToJson()); } diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs index ae6e80c63a..41e890533a 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/InputActionsEditorWindow.cs @@ -256,7 +256,6 @@ private void BuildUI() if (!rootVisualElement.styleSheets.Contains(InputActionsEditorWindowUtils.theme)) rootVisualElement.styleSheets.Add(InputActionsEditorWindowUtils.theme); m_View = new InputActionsEditorView(rootVisualElement, m_StateContainer, false, () => Save(isAutoSave: false)); - m_StateContainer.Initialize(rootVisualElement.Q("action-editor")); } @@ -334,8 +333,10 @@ private void OnLostFocus() // This code should be cleaned up once we migrate the InputControl stuff from ImGUI completely. // Since at that point it stops being a separate window that steals focus. // (See case ISXB-1221) - if (!InputControlPathEditor.IsShowingDropdown) + if (!InputControlPathEditor.IsShowingDropdown && !m_View.IsControlSchemeViewActive()) + { Save(isAutoSave: true); + } } analytics.RegisterEditorFocusOut(); @@ -415,8 +416,7 @@ private bool TryUpdateFromAsset() var assetPath = AssetDatabase.GUIDToAssetPath(m_AssetGUID); if (assetPath == null) { - Debug.LogWarning( - $"Failed to open InputActionAsset with GUID {m_AssetGUID}. The asset might have been deleted."); + Debug.LogWarning($"Failed to open InputActionAsset with GUID {m_AssetGUID}. The asset might have been deleted."); return false; } diff --git a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs index 1f1fd66d52..d36d82ef78 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Editor/UITKAssetEditor/Views/InputActionsEditorView.cs @@ -115,6 +115,11 @@ private void CloseControlSchemeView() m_ControlSchemesView?.Cancel(); } + public bool IsControlSchemeViewActive() + { + return m_ControlSchemesView != null; + } + private void OnReset() { Dispatch(Commands.ReplaceActionMaps(ProjectWideActionsAsset.GetDefaultAssetJson())); @@ -238,6 +243,7 @@ private void ShowControlSchemeEditor(VisualElement parent, bool updateExisting = { m_ControlSchemesView = CreateChildView(new ControlSchemesView(parent, stateContainer, updateExisting)); m_ControlSchemesView.UpdateView(stateContainer.GetState()); + m_ControlSchemesView.OnClosing += _ => { DestroyChildView(m_ControlSchemesView);