From 04f3f328be30b0703ccf1611edc4a0cc446690e0 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Tue, 12 Sep 2023 16:53:59 -0500 Subject: [PATCH] Fix failure to expand outlining regions during Document Outline navigation Fixes #69902 --- .../Core/Def/DocumentOutline/DocumentOutlineView.xaml.cs | 7 ++++++- .../AbstractLanguageService`2.VsCodeWindowManager.cs | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/VisualStudio/Core/Def/DocumentOutline/DocumentOutlineView.xaml.cs b/src/VisualStudio/Core/Def/DocumentOutline/DocumentOutlineView.xaml.cs index a4931f57662ba..4a9014040dab6 100644 --- a/src/VisualStudio/Core/Def/DocumentOutline/DocumentOutlineView.xaml.cs +++ b/src/VisualStudio/Core/Def/DocumentOutline/DocumentOutlineView.xaml.cs @@ -18,6 +18,7 @@ using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Text; +using Microsoft.VisualStudio.Text.Outlining; using InternalUtilities = Microsoft.Internal.VisualStudio.PlatformUI.Utilities; using IOleCommandTarget = Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget; using OLECMD = Microsoft.VisualStudio.OLE.Interop.OLECMD; @@ -34,6 +35,7 @@ internal sealed partial class DocumentOutlineView : UserControl, IOleCommandTarg { private readonly IThreadingContext _threadingContext; private readonly IGlobalOptionService _globalOptionService; + private readonly IOutliningManagerService _outliningManagerService; private readonly VsCodeWindowViewTracker _viewTracker; private readonly DocumentOutlineViewModel _viewModel; private readonly IVsToolbarTrayHost _toolbarTrayHost; @@ -44,11 +46,13 @@ public DocumentOutlineView( IVsWindowSearchHostFactory windowSearchHostFactory, IThreadingContext threadingContext, IGlobalOptionService globalOptionService, + IOutliningManagerService outliningManagerService, VsCodeWindowViewTracker viewTracker, DocumentOutlineViewModel viewModel) { _threadingContext = threadingContext; _globalOptionService = globalOptionService; + _outliningManagerService = outliningManagerService; _viewTracker = viewTracker; _viewModel = viewModel; @@ -284,7 +288,8 @@ private void SymbolTree_SourceUpdated(object sender, DataTransferEventArgs e) { var textView = _viewTracker.GetActiveView(); textView.TryMoveCaretToAndEnsureVisible( - symbolModel.Data.SelectionRangeSpan.TranslateTo(textView.TextSnapshot, SpanTrackingMode.EdgeInclusive).Start); + symbolModel.Data.SelectionRangeSpan.TranslateTo(textView.TextSnapshot, SpanTrackingMode.EdgeInclusive).Start, + _outliningManagerService); } finally { diff --git a/src/VisualStudio/Core/Def/LanguageService/AbstractLanguageService`2.VsCodeWindowManager.cs b/src/VisualStudio/Core/Def/LanguageService/AbstractLanguageService`2.VsCodeWindowManager.cs index 4f36b9043584f..ced4bca7cecff 100644 --- a/src/VisualStudio/Core/Def/LanguageService/AbstractLanguageService`2.VsCodeWindowManager.cs +++ b/src/VisualStudio/Core/Def/LanguageService/AbstractLanguageService`2.VsCodeWindowManager.cs @@ -27,6 +27,7 @@ using Microsoft.VisualStudio.OLE.Interop; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Text; +using Microsoft.VisualStudio.Text.Outlining; using Microsoft.VisualStudio.TextManager.Interop; using Roslyn.Utilities; @@ -264,6 +265,7 @@ private void GetOutline(out IntPtr phwnd) var asyncListenerProvider = _languageService.Package.ComponentModel.GetService(); var asyncListener = asyncListenerProvider.GetListener(FeatureAttribute.DocumentOutline); var editorAdaptersFactoryService = _languageService.Package.ComponentModel.GetService(); + var outliningManagerService = _languageService.Package.ComponentModel.GetService(); // Assert that the previous Document Outline Control and host have been freed. Contract.ThrowIfFalse(_documentOutlineView is null); @@ -271,7 +273,7 @@ private void GetOutline(out IntPtr phwnd) var viewTracker = new VsCodeWindowViewTracker(_codeWindow, threadingContext, editorAdaptersFactoryService); _documentOutlineView = new DocumentOutlineView( - uiShell, windowSearchHostFactory, threadingContext, _globalOptions, viewTracker, + uiShell, windowSearchHostFactory, threadingContext, _globalOptions, outliningManagerService, viewTracker, new DocumentOutlineViewModel(threadingContext, viewTracker, languageServiceBroker, asyncListener)); _documentOutlineViewHost = new ElementHost