diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs index ae33504899..328ff5f5d7 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/CommandProviderWrapper.cs @@ -51,12 +51,15 @@ public sealed class CommandProviderWrapper : ICommandProviderContext public bool SupportsPinning { get; private set; } + public TopLevelItemPageContext TopLevelPageContext { get; } + public CommandProviderWrapper(ICommandProvider provider, TaskScheduler mainThread) { // This ctor is only used for in-proc builtin commands. So the Unsafe! // calls are pretty dang safe actually. _commandProvider = new(provider); _taskScheduler = mainThread; + TopLevelPageContext = new TopLevelItemPageContext(this, _taskScheduler); // Hook the extension back into us ExtensionHost = new CommandPaletteHost(provider); @@ -81,6 +84,7 @@ public sealed class CommandProviderWrapper : ICommandProviderContext { _taskScheduler = mainThread; _commandProviderCache = commandProviderCache; + TopLevelPageContext = new TopLevelItemPageContext(this, _taskScheduler); Extension = extension; ExtensionHost = new CommandPaletteHost(extension); diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs index 02702ea192..3a4bb83617 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelCommandManager.cs @@ -103,8 +103,7 @@ public partial class TopLevelCommandManager : ObservableObject, // May be called from a background thread private async Task> LoadTopLevelCommandsFromProvider(CommandProviderWrapper commandProvider) { - TopLevelItemPageContext pageContext = new(commandProvider, _taskScheduler); - WeakReference weak = new(pageContext); + WeakReference weak = new(commandProvider.TopLevelPageContext); await commandProvider.LoadTopLevelCommands(_serviceProvider, weak); diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelItemPageContext.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelItemPageContext.cs index 8c84cda599..5bf02b49c2 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelItemPageContext.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelItemPageContext.cs @@ -11,7 +11,7 @@ namespace Microsoft.CmdPal.UI.ViewModels; /// Used as the PageContext for top-level items. Top level items are displayed /// on the MainListPage, which _we_ own. We need to have a placeholder page /// context for each provider that still connects those top-level items to the -/// CommandProvider they came from. +/// CommandProvider they came from. /// public partial class TopLevelItemPageContext : IPageContext {