diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 60c7791633..c053007067 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -5,17 +5,18 @@ // $Revision$ // -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; using System; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; +using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using System.Windows.Media; using System.Windows.Threading; + using ICSharpCode.AvalonEdit.CodeCompletion; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Editing; @@ -28,6 +29,7 @@ using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Editor.CodeCompletion; namespace ICSharpCode.AvalonEdit.AddIn { @@ -175,6 +177,12 @@ namespace ICSharpCode.AvalonEdit.AddIn return textEditor; } + protected virtual void DisposeTextEditor(TextEditor textEditor) + { + // detach IconBarMargin from IconBarManager + textEditor.TextArea.LeftMargins.OfType().Single().TextView = null; + } + void textEditor_TextArea_TextView_ContextMenuOpening(object sender, ContextMenuEventArgs e) { ITextEditor adapter = GetAdapterFromSender(sender); @@ -222,6 +230,7 @@ namespace ICSharpCode.AvalonEdit.AddIn } else { // remove secondary editor this.Children.Remove(secondaryTextEditor); + DisposeTextEditor(secondaryTextEditor); secondaryTextEditor = null; secondaryTextEditorAdapter = null; this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs index 7468eac0df..1c01fe842a 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs @@ -37,16 +37,18 @@ namespace ICSharpCode.AvalonEdit.AddIn protected override void OnTextViewChanged(TextView oldTextView, TextView newTextView) { if (oldTextView != null) { - oldTextView.VisualLinesChanged -= TextViewVisualLinesChanged; + oldTextView.VisualLinesChanged -= OnRedrawRequested; + manager.RedrawRequested -= OnRedrawRequested; } base.OnTextViewChanged(oldTextView, newTextView); if (newTextView != null) { - newTextView.VisualLinesChanged += TextViewVisualLinesChanged; + newTextView.VisualLinesChanged += OnRedrawRequested; + manager.RedrawRequested += OnRedrawRequested; } InvalidateVisual(); } - void TextViewVisualLinesChanged(object sender, EventArgs e) + void OnRedrawRequested(object sender, EventArgs e) { InvalidateVisual(); } diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkBase.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkBase.cs index 5e20d7e071..8e01e076b2 100644 --- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkBase.cs +++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkBase.cs @@ -60,6 +60,9 @@ namespace ICSharpCode.SharpDevelop.Bookmarks void AnchorDeleted(object sender, EventArgs e) { + // the anchor just became invalid, so don't try to use it again + location = Location.Empty; + anchor = null; RemoveMark(); }