From d6344d4dda4c2a663d0cfb854231930596dd4224 Mon Sep 17 00:00:00 2001 From: Samir Boulema Date: Wed, 1 Apr 2026 21:03:19 +0200 Subject: [PATCH 1/3] feat: Hide toolwindow for unsupported filetypes #168 --- .../Languages/CSharp/Mappers/ClassMapper.cs | 2 +- .../Services/CodeDocumentService.cs | 30 +++++++++++++++++++ .../ToolWindows/CodeNavToolWindow.cs | 6 ++-- src/CodeNav/Services/TextViewService.cs | 7 ++++- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/CodeNav.OutOfProc/Languages/CSharp/Mappers/ClassMapper.cs b/src/CodeNav.OutOfProc/Languages/CSharp/Mappers/ClassMapper.cs index 07c56b9..9da7c84 100644 --- a/src/CodeNav.OutOfProc/Languages/CSharp/Mappers/ClassMapper.cs +++ b/src/CodeNav.OutOfProc/Languages/CSharp/Mappers/ClassMapper.cs @@ -70,7 +70,7 @@ public static CodeClassItem MapClass(ClassDeclarationSyntax member, { // If it is part of a region, add the implemented interface item to the region, add the member to the interface item var regionItem = RegionMapper.GetRegion(regions, implementedInterfaceItemMember); - AddImplementedInterfaceMember(regionItem, implementedInterfaceItem, implementedInterfaceItemMember); + AddImplementedInterfaceMember(regionItem!, implementedInterfaceItem, implementedInterfaceItemMember); } else { diff --git a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs index 67cfcb9..1a633be 100644 --- a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs +++ b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs @@ -5,6 +5,7 @@ using CodeNav.OutOfProc.Models; using CodeNav.OutOfProc.ViewModels; using Microsoft.VisualStudio.Extensibility; +using Microsoft.VisualStudio.Extensibility.ToolWindows; using Microsoft.VisualStudio.Extensibility.UI; using System.Windows; @@ -36,6 +37,8 @@ public class CodeDocumentService( public OutliningService OutliningService => outliningService; + public ToolWindow? ToolWindow { get; set; } + public async Task UpdateCodeDocumentViewModel( VisualStudioExtensibility? extensibility, string? filePath, @@ -80,9 +83,16 @@ public async Task UpdateCodeDocumentViewModel( if (!codeItems.Any()) { CodeDocumentViewModel.CodeItems = PlaceholderHelper.CreateNoCodeItemsFound(); + + // No code items found, hide the tool window after showing the "No code items found" message + await HideToolWindow(cancellationToken); + return CodeDocumentViewModel; } + // Code items were found, make sure the tool window is visible + await ShowToolWindow(cancellationToken); + // Sort the list of code items, // And update the DataContext for the tool window CodeDocumentViewModel.CodeItems = SortHelper.Sort(codeItems, CodeDocumentViewModel.SortOrder); @@ -204,4 +214,24 @@ public async Task LoadGlobalSettings(bool readFromDisk = false) await LogHelper.LogException(this, "Error loading global settings", e); } } + + private async Task HideToolWindow(CancellationToken cancellationToken) + { + if (ToolWindow == null) + { + return; + } + + await ToolWindow.HideAsync(cancellationToken); + } + + private async Task ShowToolWindow(CancellationToken cancellationToken) + { + if (ToolWindow == null) + { + return; + } + + await ToolWindow.ShowAsync(activate: false, cancellationToken); + } } diff --git a/src/CodeNav.OutOfProc/ToolWindows/CodeNavToolWindow.cs b/src/CodeNav.OutOfProc/ToolWindows/CodeNavToolWindow.cs index 2a386da..7d7af86 100644 --- a/src/CodeNav.OutOfProc/ToolWindows/CodeNavToolWindow.cs +++ b/src/CodeNav.OutOfProc/ToolWindows/CodeNavToolWindow.cs @@ -6,7 +6,7 @@ namespace CodeNav.OutOfProc.ToolWindows; [VisualStudioContribution] -internal class CodeNavToolWindow(CodeDocumentService documentService) : ToolWindow +internal class CodeNavToolWindow(CodeDocumentService codeDocumentService) : ToolWindow { public override ToolWindowConfiguration ToolWindowConfiguration => new() { @@ -20,9 +20,11 @@ public override Task InitializeAsync(CancellationToken cancellationToken) { Title = "CodeNav"; + codeDocumentService.ToolWindow = this; + return Task.CompletedTask; } public override Task GetContentAsync(CancellationToken cancellationToken) - => Task.FromResult(new CodeNavToolWindowControl(documentService.CodeDocumentViewModel)); + => Task.FromResult(new CodeNavToolWindowControl(codeDocumentService.CodeDocumentViewModel)); } diff --git a/src/CodeNav/Services/TextViewService.cs b/src/CodeNav/Services/TextViewService.cs index e7dca15..46e0e86 100644 --- a/src/CodeNav/Services/TextViewService.cs +++ b/src/CodeNav/Services/TextViewService.cs @@ -140,8 +140,13 @@ private async Task GetCurrentNativeTextViewAsync() /// Gets the text view from the window frame. /// /// if the window isn't a document window. - private async Task GetTextView(IVsWindowFrame windowFrame) + private async Task GetTextView(IVsWindowFrame? windowFrame) { + if (windowFrame == null) + { + return null; + } + try { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); From 7e02137869ed2ded0b6c2c7d87070d10ddd7ca61 Mon Sep 17 00:00:00 2001 From: Samir Boulema Date: Mon, 13 Apr 2026 13:34:31 +0200 Subject: [PATCH 2/3] Hide toolwindow in more cases --- src/CodeNav.OutOfProc/Services/CodeDocumentService.cs | 6 +++++- src/CodeNav.OutOfProc/Services/OutOfProcService.cs | 6 +++++- src/CodeNav.OutOfProc/TextViewEventListener.cs | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs index f7c3d9d..5027309 100644 --- a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs +++ b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs @@ -57,6 +57,10 @@ public async Task UpdateCodeDocumentViewModel( if (!DocumentMapper.CanMapDocument(filePath)) { CodeDocumentViewModel.CodeItems = PlaceholderHelper.CreateNoCodeItemsFound(); + + // No code items found, hide the tool window after showing the "No code items found" message + await HideToolWindow(cancellationToken); + return CodeDocumentViewModel; } @@ -221,7 +225,7 @@ public async Task LoadGlobalSettings(bool readFromDisk = false) } } - private async Task HideToolWindow(CancellationToken cancellationToken) + public async Task HideToolWindow(CancellationToken cancellationToken) { if (ToolWindow == null) { diff --git a/src/CodeNav.OutOfProc/Services/OutOfProcService.cs b/src/CodeNav.OutOfProc/Services/OutOfProcService.cs index 29f472f..40f019b 100644 --- a/src/CodeNav.OutOfProc/Services/OutOfProcService.cs +++ b/src/CodeNav.OutOfProc/Services/OutOfProcService.cs @@ -42,10 +42,14 @@ public async Task ProcessActiveFrameChanged(string documentViewJsonString) // Conditions: // - Frame is not a document frame // Actions: - // - Do nothing + // - Show placeholder item prompting the user to select a document + // - Hide the tool window since there is no document to show if (documentView.IsDocumentFrame != true) { codeDocumentService.CodeDocumentViewModel.CodeItems = PlaceholderHelper.CreateSelectDocumentItem(); + + await codeDocumentService.HideToolWindow(default); + return; } diff --git a/src/CodeNav.OutOfProc/TextViewEventListener.cs b/src/CodeNav.OutOfProc/TextViewEventListener.cs index f73aef8..5d92ca7 100644 --- a/src/CodeNav.OutOfProc/TextViewEventListener.cs +++ b/src/CodeNav.OutOfProc/TextViewEventListener.cs @@ -95,6 +95,8 @@ public async Task TextViewClosedAsync(ITextViewSnapshot textViewSnapshot, Cancel try { codeDocumentService.CodeDocumentViewModel.CodeItems = PlaceholderHelper.CreateSelectDocumentItem(); + + await codeDocumentService.HideToolWindow(cancellationToken); } catch (Exception e) { From b67df0e50c68d4a3c94de8ba9b04cafb761981ca Mon Sep 17 00:00:00 2001 From: Samir Boulema Date: Wed, 15 Apr 2026 16:01:17 +0200 Subject: [PATCH 3/3] Add setting to show/hide toolw window --- .github/workflows/workflow.yml | 2 +- CodeNav.slnx | 4 +++- README.md | 1 + art/Settings.png | Bin 16802 -> 20000 bytes docs/settings.md | 4 ++++ .../SettingsDialog/SettingsDialogControl.xaml | 4 ++++ .../SettingsDialog/SettingsDialogData.cs | 6 ++++++ .../Models/GlobalSettings.cs | 7 +++++++ .../Services/CodeDocumentService.cs | 11 +++++++++++ .../ViewModels/CodeDocumentViewModel.cs | 1 + 10 files changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 034dc3d..7df5ecc 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -7,7 +7,7 @@ on: - 'feature/**' env: - version: '10.6.${{ github.run_number }}' + version: '10.7.${{ github.run_number }}' dotnetVersion: '8' repoUrl: ${{ github.server_url }}/${{ github.repository }} vsixPath: src/CodeNav/bin/Release/net472/CodeNav.vsix diff --git a/CodeNav.slnx b/CodeNav.slnx index 31353c6..0159e60 100644 --- a/CodeNav.slnx +++ b/CodeNav.slnx @@ -1,7 +1,9 @@ - + + + diff --git a/README.md b/README.md index 383997a..c26f582 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Visual Studio extension to show the code structure of your current document - Customizable fonts - Bookmarks - Synced collapsing/expanding outline regions +- Option to hide the tool window for unsupported files and files without code items ## Supported Visual Studio versions diff --git a/art/Settings.png b/art/Settings.png index d532f767935f208b4db6e3f1f95d79eca6dba586..45b34f28986b21b3b3652905cabc1806b0e249d7 100644 GIT binary patch literal 20000 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 literal 16802 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 L71;`DqoDr>%(f42 diff --git a/docs/settings.md b/docs/settings.md index ee093aa..c922d87 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -14,6 +14,10 @@ Enable or disable showing which items you have visited in CodeNav Enable or disable highlighting the item in CodeNav based on caret position +**Show the tool window for unsupported files and files without code items** + +Enable or disable showing the CodeNav tool window for unsupported files and files without code items + **Update CodeNav while typing** Enable of disable updating the list of code items in CodeNav while typing in the text editor diff --git a/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogControl.xaml b/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogControl.xaml index 87d7b7d..354ff44 100644 --- a/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogControl.xaml +++ b/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogControl.xaml @@ -31,6 +31,10 @@ Auto-highlight active code item + + + Show the tool window for unsupported files and files without code items + diff --git a/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogData.cs b/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogData.cs index c304508..925a4ef 100644 --- a/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogData.cs +++ b/src/CodeNav.OutOfProc/Dialogs/SettingsDialog/SettingsDialogData.cs @@ -40,4 +40,10 @@ public class SettingsDialogData /// [DataMember] public bool EnableCrashAnalytics { get; set; } + + ///

+ /// Setting if CodeNav should be shown or hidden for unsupported files and files without code items + /// + [DataMember] + public bool ShowToolWindowForUnsupportedFiles { get; set; } = true; } diff --git a/src/CodeNav.OutOfProc/Models/GlobalSettings.cs b/src/CodeNav.OutOfProc/Models/GlobalSettings.cs index f3b9d5b..462cd0f 100644 --- a/src/CodeNav.OutOfProc/Models/GlobalSettings.cs +++ b/src/CodeNav.OutOfProc/Models/GlobalSettings.cs @@ -1,4 +1,5 @@ using CodeNav.OutOfProc.Constants; +using System.Runtime.Serialization; namespace CodeNav.OutOfProc.Models; @@ -34,6 +35,12 @@ public class GlobalSettings /// public bool EnableCrashAnalytics { get; set; } + /// + /// Setting if CodeNav should be shown or hidden for unsupported files and files without code items + /// + [DataMember] + public bool ShowToolWindowForUnsupportedFiles { get; set; } = true; + /// /// Main toolbar - Setting to store the selected sort order for code items /// diff --git a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs index 5027309..43957d5 100644 --- a/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs +++ b/src/CodeNav.OutOfProc/Services/CodeDocumentService.cs @@ -170,6 +170,7 @@ public async Task LoadGlobalSettings(bool readFromDisk = false) ShowHistoryIndicators = GlobalSettings.ShowHistoryIndicators, UpdateWhileTyping = GlobalSettings.UpdateWhileTyping, EnableCrashAnalytics = GlobalSettings.EnableCrashAnalytics, + ShowToolWindowForUnsupportedFiles = GlobalSettings.ShowToolWindowForUnsupportedFiles, }; var filterRules = GlobalSettings @@ -232,6 +233,11 @@ public async Task HideToolWindow(CancellationToken cancellationToken) return; } + if (GlobalSettings!.ShowToolWindowForUnsupportedFiles) + { + return; + } + await ToolWindow.HideAsync(cancellationToken); } @@ -242,6 +248,11 @@ private async Task ShowToolWindow(CancellationToken cancellationToken) return; } + if (GlobalSettings!.ShowToolWindowForUnsupportedFiles) + { + return; + } + await ToolWindow.ShowAsync(activate: false, cancellationToken); } } diff --git a/src/CodeNav.OutOfProc/ViewModels/CodeDocumentViewModel.cs b/src/CodeNav.OutOfProc/ViewModels/CodeDocumentViewModel.cs index f2d813b..a017dc6 100644 --- a/src/CodeNav.OutOfProc/ViewModels/CodeDocumentViewModel.cs +++ b/src/CodeNav.OutOfProc/ViewModels/CodeDocumentViewModel.cs @@ -241,6 +241,7 @@ private async Task Settings(object? commandParameter, IClientContext clientConte CodeDocumentService.GlobalSettings.ShowHistoryIndicators = CodeDocumentService.SettingsDialogData.ShowHistoryIndicators; CodeDocumentService.GlobalSettings.UpdateWhileTyping = CodeDocumentService.SettingsDialogData.UpdateWhileTyping; CodeDocumentService.GlobalSettings.EnableCrashAnalytics = CodeDocumentService.SettingsDialogData.EnableCrashAnalytics; + CodeDocumentService.GlobalSettings.ShowToolWindowForUnsupportedFiles = CodeDocumentService.SettingsDialogData.ShowToolWindowForUnsupportedFiles; await SettingsHelper.SaveGlobalSettings(CodeDocumentService);