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();
}