1010
1111namespace Community . VisualStudio . Toolkit
1212{
13+
1314 /// <summary>
1415 /// A base class for providing same-word highlighting.
1516 /// </summary>
@@ -48,8 +49,11 @@ public ITagger<T> CreateTagger<T>(ITextView textView, ITextBuffer buffer) where
4849 {
4950 ITextStructureNavigator ? navigator = _textStructureNavigatorSelector ? . GetTextStructureNavigator ( textView . TextBuffer ) ;
5051
51- return ( ITagger < T > ) buffer . Properties . GetOrCreateSingletonProperty ( ( ) =>
52+ var tagger = textView . Properties . GetOrCreateSingletonProperty ( ( ) =>
5253 new SameWordHighlighterTagger ( textView , buffer , _textSearchService , navigator , this ) ) ;
54+ tagger . Counter += 1 ;
55+
56+ return ( ITagger < T > ) tagger ;
5357 }
5458 }
5559
@@ -60,6 +64,7 @@ public HighlightWordTag(string tagName) : base(tagName) { }
6064
6165 internal class SameWordHighlighterTagger : ITagger < HighlightWordTag > , IDisposable
6266 {
67+ internal int Counter ;
6368 private readonly ITextView _view ;
6469 private readonly ITextBuffer _buffer ;
6570 private readonly ITextSearchService ? _textSearchService ;
@@ -83,6 +88,7 @@ public SameWordHighlighterTagger(ITextView view, ITextBuffer sourceBuffer, IText
8388 _currentWord = null ;
8489 _view . Caret . PositionChanged += CaretPositionChanged ;
8590 _view . LayoutChanged += ViewLayoutChanged ;
91+ Counter = 0 ;
8692 }
8793
8894 private void ViewLayoutChanged ( object sender , TextViewLayoutChangedEventArgs e )
@@ -226,11 +232,14 @@ public void Dispose()
226232 {
227233 if ( ! _isDisposed )
228234 {
229- _view . Caret . PositionChanged -= CaretPositionChanged ;
230- _view . LayoutChanged -= ViewLayoutChanged ;
235+ this . Counter -= 1 ;
236+ if ( this . Counter == 0 )
237+ {
238+ _view . Caret . PositionChanged -= CaretPositionChanged ;
239+ _view . LayoutChanged -= ViewLayoutChanged ;
240+ _isDisposed = true ;
241+ }
231242 }
232-
233- _isDisposed = true ;
234243 }
235244
236245 public event EventHandler < SnapshotSpanEventArgs > ? TagsChanged ;
0 commit comments