diff --git a/osu.Game/Screens/Edit/BeatmapEditorChangeHandler.cs b/osu.Game/Screens/Edit/BeatmapEditorChangeHandler.cs index b9349a31af..3c19994a8a 100644 --- a/osu.Game/Screens/Edit/BeatmapEditorChangeHandler.cs +++ b/osu.Game/Screens/Edit/BeatmapEditorChangeHandler.cs @@ -26,9 +26,6 @@ namespace osu.Game.Screens.Edit editorBeatmap.SaveStateTriggered += SaveState; patcher = new LegacyEditorBeatmapPatcher(editorBeatmap); - - // Initial state. - SaveState(); } protected override void WriteCurrentStateToStream(MemoryStream stream) diff --git a/osu.Game/Screens/Edit/EditorChangeHandler.cs b/osu.Game/Screens/Edit/EditorChangeHandler.cs index 4511b654b6..0bb17e4c5d 100644 --- a/osu.Game/Screens/Edit/EditorChangeHandler.cs +++ b/osu.Game/Screens/Edit/EditorChangeHandler.cs @@ -31,6 +31,8 @@ namespace osu.Game.Screens.Edit { get { + ensureStateSaved(); + using (var stream = new MemoryStream(savedStates[currentState])) return stream.ComputeSHA2Hash(); } @@ -40,6 +42,19 @@ namespace osu.Game.Screens.Edit public const int MAX_SAVED_STATES = 50; + public override void BeginChange() + { + ensureStateSaved(); + + base.BeginChange(); + } + + private void ensureStateSaved() + { + if (savedStates.Count == 0) + SaveState(); + } + protected override void UpdateState() { if (isRestoring) diff --git a/osu.Game/Screens/Edit/TransactionalCommitComponent.cs b/osu.Game/Screens/Edit/TransactionalCommitComponent.cs index f8362523f1..92f1e19e6f 100644 --- a/osu.Game/Screens/Edit/TransactionalCommitComponent.cs +++ b/osu.Game/Screens/Edit/TransactionalCommitComponent.cs @@ -33,7 +33,7 @@ namespace osu.Game.Screens.Edit /// /// Signal the beginning of a change. /// - public void BeginChange() + public virtual void BeginChange() { if (bulkChangesStarted++ == 0) TransactionBegan?.Invoke();