diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index 5d4108e2c4..cd0436a762 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -546,9 +546,9 @@ namespace ICSharpCode.AvalonEdit.AddIn } } iconBarManager.UpdateClassMemberBookmarks(parseInfo); - primaryTextEditor.UpdateParseInformation(parseInfo); + primaryTextEditor.UpdateParseInformationForFolding(parseInfo); if (secondaryTextEditor != null) - secondaryTextEditor.UpdateParseInformation(parseInfo); + secondaryTextEditor.UpdateParseInformationForFolding(parseInfo); } public void Dispose() diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs index c7176ff50d..5304aa6b7a 100755 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs @@ -71,7 +71,7 @@ namespace ICSharpCode.AvalonEdit.AddIn if (e.PropertyName == "HighlightBrackets") HighlightBrackets(null, e); else if (e.PropertyName == "EnableFolding") - UpdateParseInformation(); + UpdateParseInformationForFolding(); else if (e.PropertyName == "HighlightSymbol") { if (this.caretReferencesRenderer != null) this.caretReferencesRenderer.ClearHighlight(); @@ -252,15 +252,15 @@ namespace ICSharpCode.AvalonEdit.AddIn toolTip.Closed += ToolTipClosed; } toolTip.PlacementTarget = this; // required for property inheritance - + if(args.ContentToShow is string) { - toolTip.Content = new TextBlock + toolTip.Content = new TextBlock { Text = args.ContentToShow as string, TextWrapping = TextWrapping.Wrap }; } - else + else toolTip.Content = args.ContentToShow; toolTip.IsOpen = true; @@ -434,14 +434,26 @@ namespace ICSharpCode.AvalonEdit.AddIn } #region UpdateParseInformation - Folding - void UpdateParseInformation() + void UpdateParseInformationForFolding() { - UpdateParseInformation(ParserService.GetExistingParseInformation(this.Adapter.FileName)); + UpdateParseInformationForFolding(ParserService.GetExistingParseInformation(this.Adapter.FileName)); + } + + bool disableParseInformationFolding; + + public bool DisableParseInformationFolding { + get { return disableParseInformationFolding; } + set { + if (disableParseInformationFolding != value) { + disableParseInformationFolding = value; + UpdateParseInformationForFolding(); + } + } } - public void UpdateParseInformation(ParseInformation parseInfo) + public void UpdateParseInformationForFolding(ParseInformation parseInfo) { - if (!CodeEditorOptions.Instance.EnableFolding) + if (!CodeEditorOptions.Instance.EnableFolding || disableParseInformationFolding) parseInfo = null; IServiceContainer container = this.Adapter.GetService(typeof(IServiceContainer)) as IServiceContainer; diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs index a4e1c68c88..c49b8eb8b8 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/FoldingManagerAdapter.cs @@ -30,5 +30,13 @@ namespace ICSharpCode.XmlEditor foldingManager.UpdateFoldings(newFoldings, firstErrorOffset); } } + + public void Dispose() + { + if (foldingManager != null) { + FoldingManager.Uninstall(foldingManager); + foldingManager = null; + } + } } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs index 16604f99d7..1902c579bd 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/IFoldingManager.cs @@ -7,7 +7,7 @@ using ICSharpCode.AvalonEdit.Folding; namespace ICSharpCode.XmlEditor { - public interface IFoldingManager + public interface IFoldingManager : IDisposable { void UpdateFoldings(IEnumerable newFoldings, int firstErrorOffset); } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs index 79d313b3df..cf01b3bbf1 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFoldingManager.cs @@ -53,6 +53,7 @@ namespace ICSharpCode.XmlEditor public void Dispose() { document.Changed -= DocumentChanged; + foldingManager.Dispose(); } public IList GetFolds(ITextBuffer textBuffer) diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs index 18ddfd6c7a..852d5fd1ae 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlLanguageBinding.cs @@ -10,6 +10,7 @@ namespace ICSharpCode.XmlEditor public class XmlLanguageBinding : DefaultLanguageBinding { XmlFoldingManager foldingManager; + AvalonEdit.AddIn.CodeEditorView codeEditorView; public override IFormattingStrategy FormattingStrategy { get { return new XmlFormattingStrategy(); } @@ -17,6 +18,11 @@ namespace ICSharpCode.XmlEditor public override void Attach(ITextEditor editor) { + // HACK: disable SharpDevelop's built-in folding + codeEditorView = editor.GetService(typeof(AvalonEdit.TextEditor)) as AvalonEdit.AddIn.CodeEditorView; + if (codeEditorView != null) + codeEditorView.DisableParseInformationFolding = true; + foldingManager = new XmlFoldingManager(editor); foldingManager.UpdateFolds(); foldingManager.Start(); @@ -29,6 +35,9 @@ namespace ICSharpCode.XmlEditor foldingManager.Stop(); foldingManager.Dispose(); + if (codeEditorView != null) + codeEditorView.DisableParseInformationFolding = false; + base.Detach(); } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin index 92183c3daf..f3508d1256 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.addin @@ -14,6 +14,7 @@ + diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj index c39ad9f90a..12e980a04c 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj @@ -230,5 +230,10 @@ ICSharpCode.SharpDevelop.Widgets False + + {0162E499-42D0-409B-AA25-EED21F75336B} + AvalonEdit.AddIn + False + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs index 9029eb03fe..0e4d3cd876 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/FakeFoldingManager.cs @@ -24,5 +24,9 @@ namespace XmlEditor.Tests.Utils NewFoldsPassedToUpdateFoldings.AddRange(newFoldings); FirstErrorOffset = firstErrorOffset; } + + public void Dispose() + { + } } }