diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs
index 00e2c0c25e..e2db61ef12 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Document/TextDocument.cs
@@ -722,13 +722,23 @@ namespace ICSharpCode.AvalonEdit.Document
}
}
- readonly UndoStack undoStack;
+ UndoStack undoStack;
///
/// Gets the of the document.
///
+ /// This property can also be used to set the undo stack, e.g. for sharing a common undo stack between multiple documents.
public UndoStack UndoStack {
get { return undoStack; }
+ set {
+ if (value == null)
+ throw new ArgumentNullException();
+ if (value != undoStack) {
+ undoStack.ClearAll(); // first clear old undo stack, so that it can't be used to perform unexpected changes on this document
+ // ClearAll() will also throw an exception when it's not safe to replace the undo stack (e.g. update is currently in progress)
+ undoStack = value;
+ }
+ }
}
///
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
index 2bb3c31424..373b5f5f70 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/Deque.cs
@@ -12,7 +12,7 @@ namespace ICSharpCode.AvalonEdit.Utils
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
[Serializable]
- public class Deque : ICollection
+ public sealed class Deque : ICollection
{
T[] arr = Empty.Array;
int size, head, tail;