From 03dc7c8eb03b03251c0643cb3fe38913a156f311 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Sun, 22 May 2022 10:27:34 +0200 Subject: [PATCH] Clear redo stack when pushing remote transaction or ending a local one --- crates/text/src/tests.rs | 10 ++++++++++ crates/text/src/text.rs | 2 ++ 2 files changed, 12 insertions(+) diff --git a/crates/text/src/tests.rs b/crates/text/src/tests.rs index 7994d5b8f1..e66837f21b 100644 --- a/crates/text/src/tests.rs +++ b/crates/text/src/tests.rs @@ -529,6 +529,16 @@ fn test_history() { assert!(buffer.end_transaction_at(now).is_none()); buffer.undo(); assert_eq!(buffer.text(), "12cde6"); + + // Redo stack gets cleared after performing an edit. + buffer.edit([(0..0, "X")]); + assert_eq!(buffer.text(), "X12cde6"); + buffer.redo(); + assert_eq!(buffer.text(), "X12cde6"); + buffer.undo(); + assert_eq!(buffer.text(), "12cde6"); + buffer.undo(); + assert_eq!(buffer.text(), "123456"); } #[test] diff --git a/crates/text/src/text.rs b/crates/text/src/text.rs index 7bf8ee208f..8d37ad0c8b 100644 --- a/crates/text/src/text.rs +++ b/crates/text/src/text.rs @@ -216,6 +216,7 @@ impl History { self.undo_stack.pop(); None } else { + self.redo_stack.clear(); let entry = self.undo_stack.last_mut().unwrap(); entry.last_edit_at = now; Some(entry) @@ -276,6 +277,7 @@ impl History { last_edit_at: now, suppress_grouping: false, }); + self.redo_stack.clear(); } fn push_undo(&mut self, op_id: clock::Local) {