Browse Source

fix non-disposed change watcher on file rename

4.1
Siegfried Pammer 15 years ago
parent
commit
3bb6b1fab2
  1. 29
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs
  2. 2
      src/AddIns/VersionControl/GitAddIn/Src/GitVersionProvider.cs

29
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs

@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ICSharpCode.AvalonEdit.AddIn.MyersDiff; using ICSharpCode.AvalonEdit.AddIn.MyersDiff;
using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Utils; using ICSharpCode.AvalonEdit.Utils;
@ -23,6 +22,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
IDocument baseDocument; IDocument baseDocument;
IDocumentVersionProvider usedProvider; IDocumentVersionProvider usedProvider;
IDisposable watcher; IDisposable watcher;
Core.FileName currentFileName;
public event EventHandler ChangeOccurred; public event EventHandler ChangeOccurred;
@ -40,29 +40,32 @@ namespace ICSharpCode.AvalonEdit.AddIn
public void Initialize(IDocument document) public void Initialize(IDocument document)
{ {
if (changeList != null && changeList.Any()) if (this.document == null) {
return; this.document = document;
this.textDocument = (TextDocument)document.GetService(typeof(TextDocument));
this.changeList = new CompressingTreeList<LineChangeInfo>((x, y) => x.Equals(y));
}
this.document = document; var fileName = ((ITextEditor)document.GetService(typeof(ITextEditor))).FileName;
this.textDocument = (TextDocument)document.GetService(typeof(TextDocument));
this.changeList = new CompressingTreeList<LineChangeInfo>((x, y) => x.Equals(y));
InitializeBaseDocument(); InitializeBaseDocument();
if (watcher != null)
watcher.Dispose();
if (usedProvider != null) { if (usedProvider != null)
string fileName = ((ITextEditor)document.GetService(typeof(ITextEditor))).FileName;
watcher = usedProvider.WatchBaseVersionChanges(fileName, HandleBaseVersionChanges); watcher = usedProvider.WatchBaseVersionChanges(fileName, HandleBaseVersionChanges);
}
SetupInitialFileState(false); SetupInitialFileState(fileName != currentFileName);
currentFileName = fileName;
this.textDocument.LineTrackers.Add(this); if (!this.textDocument.LineTrackers.Contains(this)) {
this.textDocument.UndoStack.PropertyChanged += UndoStackPropertyChanged; this.textDocument.LineTrackers.Add(this);
this.textDocument.UndoStack.PropertyChanged += UndoStackPropertyChanged;
}
} }
void HandleBaseVersionChanges(object sender, EventArgs e) void HandleBaseVersionChanges(object sender, EventArgs e)
{ {
ICSharpCode.Core.LoggingService.Info("HandleBaseVersionChanges");
InitializeBaseDocument(); InitializeBaseDocument();
SetupInitialFileState(true); SetupInitialFileState(true);
} }

2
src/AddIns/VersionControl/GitAddIn/Src/GitVersionProvider.cs

@ -185,6 +185,4 @@ namespace ICSharpCode.GitAddIn
watcher.ReleaseWatch(HandleChanges); watcher.ReleaseWatch(HandleChanges);
} }
} }
} }

Loading…
Cancel
Save