From 4b65de9ba88cb0127ab465ffa51f0e24f862fc72 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Tue, 8 Jul 2025 14:58:03 +0900 Subject: [PATCH 1/4] Init --- .../SearchBoxTextChangedEventArgs.cs | 1 + .../UserControls/NavigationToolbar.xaml.cs | 68 +++++++-------- src/Files.App/UserControls/SearchBox.xaml.cs | 1 + .../NavigationToolbarViewModel.cs | 85 ++++++++++++------- .../UserControls/SearchBoxViewModel.cs | 1 + src/Files.App/Views/Shells/BaseShellPage.cs | 2 + 6 files changed, 87 insertions(+), 71 deletions(-) diff --git a/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs b/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs index e484adee3f02..c85c8cd76b3d 100644 --- a/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs @@ -7,6 +7,7 @@ namespace Files.App.Data.EventArguments { + [Obsolete("Superseded by Omnibar.")] public sealed class SearchBoxTextChangedEventArgs { public SearchBoxTextChangeReason Reason { get; } diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 291e4ee96223..3459d52ca9b0 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -259,18 +259,13 @@ private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedEventArgs args) { - var mode = Omnibar.CurrentSelectedMode; - - // Path mode - if (mode == OmnibarPathMode) + if (Omnibar.CurrentSelectedMode == OmnibarPathMode) { await ViewModel.HandleItemNavigationAsync(args.Text); (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); return; } - - // Command palette mode - else if (mode == OmnibarCommandPaletteMode) + else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) { var item = args.Item as NavigationBarSuggestionItem; @@ -312,26 +307,9 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); return; } - - // Search mode - else if (mode == OmnibarSearchMode) + else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - var shellPage = ContentPageContext.ShellPage; - - if (args.Item is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath) && shellPage is not null) - await NavigationHelpers.OpenPath(item.ItemPath, shellPage); - else - { - var searchQuery = args.Item is SuggestionModel x && !string.IsNullOrWhiteSpace(x.Name) - ? x.Name - : args.Text; - - shellPage?.SubmitSearch(searchQuery); // use the resolved shellPage for consistency - ViewModel.SaveSearchQueryToList(searchQuery); - } - - (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); - return; + ContentPageContext.ShellPage?.SubmitSearch(args.Text); } } @@ -340,20 +318,26 @@ private async void Omnibar_TextChanged(Omnibar sender, OmnibarTextChangedEventAr if (args.Reason is not OmnibarTextChangeReason.UserInput) return; - if (Omnibar.CurrentSelectedMode == OmnibarPathMode) + if (args.Mode == OmnibarPathMode) { - await ViewModel.PopulateOmnibarSuggestionsForPathMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(async () => + { + await ViewModel.PopulateOmnibarSuggestionsForPathMode(); + }); } - else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) + else if (args.Mode == OmnibarCommandPaletteMode) { - await DispatcherQueue.EnqueueOrInvokeAsync(() => + await DispatcherQueue.EnqueueOrInvokeAsync(async () => { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); + await ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); }); } - else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) + else if (args.Mode == OmnibarSearchMode) { - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(async () => + { + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + }); } } @@ -465,9 +449,9 @@ await DispatcherQueue.EnqueueOrInvokeAsync(async () => { ViewModel.OmnibarCommandPaletteModeText = string.Empty; - await DispatcherQueue.EnqueueOrInvokeAsync(() => + await DispatcherQueue.EnqueueOrInvokeAsync(async () => { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); + await ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); }); } else if (e.NewMode == OmnibarSearchMode) @@ -477,7 +461,10 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => else ViewModel.OmnibarSearchModeText = ViewModel.InstanceViewModel.CurrentSearchQuery; - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(async () => + { + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + }); } } @@ -500,14 +487,17 @@ await DispatcherQueue.EnqueueOrInvokeAsync(async () => { ViewModel.OmnibarCommandPaletteModeText = string.Empty; - await DispatcherQueue.EnqueueOrInvokeAsync(() => + await DispatcherQueue.EnqueueOrInvokeAsync(async () => { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); + await ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); }); } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(async () => + { + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + }); } } } diff --git a/src/Files.App/UserControls/SearchBox.xaml.cs b/src/Files.App/UserControls/SearchBox.xaml.cs index ff31b9899cd1..43fb5c13656d 100644 --- a/src/Files.App/UserControls/SearchBox.xaml.cs +++ b/src/Files.App/UserControls/SearchBox.xaml.cs @@ -8,6 +8,7 @@ namespace Files.App.UserControls { + [Obsolete("Superseded by Omnibar.")] public sealed partial class SearchBox : UserControl { public static readonly DependencyProperty SearchBoxViewModelProperty = diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 5a156a255218..bdf920e99aa6 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -12,6 +12,7 @@ using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media.Imaging; using System.IO; +using System.Threading.Tasks; using System.Windows.Input; using Windows.AI.Actions; using Windows.ApplicationModel.DataTransfer; @@ -82,6 +83,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool IsSingleItemOverride { get; set; } + [Obsolete("Superseded by Omnibar.")] public bool SearchHasFocus { get; private set; } public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; @@ -93,6 +95,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private NavigationToolbar? AddressToolbar => (MainWindow.Instance.Content as Frame)?.FindDescendant(); + [Obsolete("Superseded by Omnibar.")] public SearchBoxViewModel SearchBoxViewModel => (SearchBoxViewModel)SearchBox; public bool HasAdditionalAction => @@ -186,15 +189,19 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool CanRefresh { get => _CanRefresh; set => SetProperty(ref _CanRefresh, value); } private string _SearchButtonGlyph = "\uE721"; + [Obsolete("Superseded by Omnibar.")] public string SearchButtonGlyph { get => _SearchButtonGlyph; set => SetProperty(ref _SearchButtonGlyph, value); } private bool _ManualEntryBoxLoaded; + [Obsolete("Superseded by Omnibar.")] public bool ManualEntryBoxLoaded { get => _ManualEntryBoxLoaded; set => SetProperty(ref _ManualEntryBoxLoaded, value); } private bool _ClickablePathLoaded = true; + [Obsolete("Superseded by Omnibar.")] public bool ClickablePathLoaded { get => _ClickablePathLoaded; set => SetProperty(ref _ClickablePathLoaded, value); } private string _PathControlDisplayText; + [Obsolete("Superseded by Omnibar.")] public string PathControlDisplayText { get => _PathControlDisplayText; set => SetProperty(ref _PathControlDisplayText, value); } private bool _HasItem = false; @@ -204,9 +211,11 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public Style LayoutThemedIcon { get => _LayoutThemedIcon; set => SetProperty(ref _LayoutThemedIcon, value); } private ISearchBoxViewModel _SearchBox = new SearchBoxViewModel(); + [Obsolete("Superseded by Omnibar.")] public ISearchBoxViewModel SearchBox { get => _SearchBox; set => SetProperty(ref _SearchBox, value); } private bool _IsSearchBoxVisible; + [Obsolete("Superseded by Omnibar.")] public bool IsSearchBoxVisible { get => _IsSearchBoxVisible; @@ -236,11 +245,7 @@ public string? PathText public string? OmnibarSearchModeText { get => _OmnibarSearchModeText; set => SetProperty(ref _OmnibarSearchModeText, value); } private string _OmnibarCurrentSelectedModeName = OmnibarPathModeName; - public string OmnibarCurrentSelectedModeName - { - get => _OmnibarCurrentSelectedModeName; - set => SetProperty(ref _OmnibarCurrentSelectedModeName, value); - } + public string OmnibarCurrentSelectedModeName { get => _OmnibarCurrentSelectedModeName; set => SetProperty(ref _OmnibarCurrentSelectedModeName, value); } private CurrentInstanceViewModel _InstanceViewModel; public CurrentInstanceViewModel InstanceViewModel @@ -540,6 +545,7 @@ x.Item is ZipStorageFile || deferral.Complete(); } + [Obsolete("Superseded by Omnibar.")] public void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) { var pathSeparatorIcon = sender as FontIcon; @@ -553,28 +559,33 @@ public void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataCo }); } + [Obsolete("Superseded by Omnibar.")] public void PathboxItemFlyout_Opening(object sender, object e) { ToolbarFlyoutOpening?.Invoke(this, new ToolbarFlyoutOpeningEventArgs((MenuFlyout)sender)); } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItemFlyout_Closed(object sender, object e) { ((MenuFlyout)sender).Items.Clear(); } + [Obsolete("Superseded by Omnibar.")] public void CurrentPathSetTextBox_TextChanged(object sender, TextChangedEventArgs args) { if (sender is TextBox textBox) PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = textBox.Text }); } + [Obsolete("Superseded by Omnibar.")] public void VisiblePath_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) AddressBarTextEntered?.Invoke(this, new AddressBarTextEnteredEventArgs() { AddressBarTextField = sender }); } + [Obsolete("Superseded by Omnibar.")] public void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) { PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = args.QueryText }); @@ -582,6 +593,7 @@ public void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuer (this as IAddressToolbarViewModel).IsEditModeEnabled = false; } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItem_PointerPressed(object sender, PointerRoutedEventArgs e) { if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Mouse) @@ -710,6 +722,7 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidItemDialogTitle.GetLoca PathControlDisplayText = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { switch (e.Key) @@ -794,6 +807,7 @@ public void UpdateAdditionalActions() OnPropertyChanged(nameof(HasAdditionalAction)); } + [Obsolete("Superseded by Omnibar.")] private void CloseSearchBox(bool doFocus = false) { if (_SearchBox.WasQuerySubmitted) @@ -818,11 +832,13 @@ private void CloseSearchBox(bool doFocus = false) } } + [Obsolete("Superseded by Omnibar.")] public void SearchRegion_GotFocus(object sender, RoutedEventArgs e) { SearchHasFocus = true; } + [Obsolete("Superseded by Omnibar.")] public void SearchRegion_LostFocus(object sender, RoutedEventArgs e) { var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(); @@ -833,6 +849,7 @@ public void SearchRegion_LostFocus(object sender, RoutedEventArgs e) CloseSearchBox(); } + [Obsolete("Superseded by Omnibar.")] private void SearchRegion_Escaped(object? sender, ISearchBoxViewModel _SearchBox) => CloseSearchBox(true); @@ -1153,7 +1170,7 @@ void AddNoResultsItem() } } - public void PopulateOmnibarSuggestionsForCommandPaletteMode() + public async Task PopulateOmnibarSuggestionsForCommandPaletteMode() { var newSuggestions = new List(); @@ -1194,22 +1211,27 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() } } - var suggestionItems = Commands - .Where(command => command.IsExecutable - && command.IsAccessibleGlobally - && (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) - || command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) - .Select(command => new NavigationBarSuggestionItem - { - ThemedIconStyle = command.Glyph.ToThemedIconStyle(), - Glyph = command.Glyph.BaseGlyph, - Text = command.Description, - PrimaryDisplay = command.Description, - HotKeys = command.HotKeys, - SearchText = OmnibarCommandPaletteModeText, - }) - .Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString() - && item.Text != Commands.EditPath.Description.ToString()); + IEnumerable suggestionItems = null!; + + await Task.Run(() => + { + suggestionItems = Commands + .Where(command => command.IsExecutable + && command.IsAccessibleGlobally + && (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) + || command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) + .Select(command => new NavigationBarSuggestionItem + { + ThemedIconStyle = command.Glyph.ToThemedIconStyle(), + Glyph = command.Glyph.BaseGlyph, + Text = command.Description, + PrimaryDisplay = command.Description, + HotKeys = command.HotKeys, + SearchText = OmnibarCommandPaletteModeText, + }) + .Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString() + && item.Text != Commands.EditPath.Description.ToString()); + }); newSuggestions.AddRange(suggestionItems); @@ -1257,20 +1279,19 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() public async Task PopulateOmnibarSuggestionsForSearchMode() { + OmnibarSearchModeSuggestionItems.Clear(); + if (ContentPageContext.ShellPage is null) return; - List newSuggestions = []; + ContentPageContext.ShellPage.ShellViewModel.FilesAndFoldersFilter = OmnibarSearchModeText; - if (string.IsNullOrWhiteSpace(OmnibarSearchModeText)) - { - var previousSearchQueries = UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList; - if (previousSearchQueries is not null) - newSuggestions.AddRange(previousSearchQueries.Select(query => new SuggestionModel(query, true))); - } - else + // Refresh the browser to apply the search filter + await ContentPageContext.ShellPage.ShellViewModel.ApplyFilesAndFoldersChangesAsync(); + + if (!string.IsNullOrWhiteSpace(OmnibarSearchModeText)) { - var search = new FolderSearch + var search = new FolderSearch() { Query = OmnibarSearchModeText, Folder = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory, @@ -1298,7 +1319,7 @@ public async Task PopulateOmnibarSuggestionsForSearchMode() } - [Obsolete("Remove once Omnibar goes out of experimental.")] + [Obsolete("Superseded by Omnibar.")] public async Task SetAddressBarSuggestionsAsync(AutoSuggestBox sender, IShellPage shellpage) { if (sender.Text is not null && shellpage.ShellViewModel is not null) diff --git a/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs b/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs index a2cadcb3dd72..00d679b291c2 100644 --- a/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs @@ -9,6 +9,7 @@ namespace Files.App.ViewModels.UserControls { + [Obsolete("Superseded by Omnibar.")] public sealed partial class SearchBoxViewModel : ObservableObject, ISearchBoxViewModel { private string query; diff --git a/src/Files.App/Views/Shells/BaseShellPage.cs b/src/Files.App/Views/Shells/BaseShellPage.cs index 65a60d14d6e4..139ade7b38ec 100644 --- a/src/Files.App/Views/Shells/BaseShellPage.cs +++ b/src/Files.App/Views/Shells/BaseShellPage.cs @@ -345,6 +345,7 @@ protected void ShellPage_PreviewKeyDown(object sender, KeyRoutedEventArgs args) } } + [Obsolete("Superseded by Omnibar.")] protected async void ShellPage_QuerySubmitted(ISearchBoxViewModel sender, SearchBoxQuerySubmittedEventArgs e) { if (e.ChosenSuggestion is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath)) @@ -353,6 +354,7 @@ protected async void ShellPage_QuerySubmitted(ISearchBoxViewModel sender, Search SubmitSearch(sender.Query); } + [Obsolete("Superseded by Omnibar.")] protected async void ShellPage_TextChanged(ISearchBoxViewModel sender, SearchBoxTextChangedEventArgs e) { if (e.Reason != SearchBoxTextChangeReason.UserInput) From 9f4b4748b0a58e5569758ef0095034b04ddcdb53 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 17 Jul 2025 00:15:19 +0900 Subject: [PATCH 2/4] Fix rebase --- .../UserControls/NavigationToolbar.xaml.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 3459d52ca9b0..8124cf4ca4ab 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -309,7 +309,22 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - ContentPageContext.ShellPage?.SubmitSearch(args.Text); + var shellPage = ContentPageContext.ShellPage; + + if (args.Item is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath) && shellPage is not null) + await NavigationHelpers.OpenPath(item.ItemPath, shellPage); + else + { + var searchQuery = args.Item is SuggestionModel x && !string.IsNullOrWhiteSpace(x.Name) + ? x.Name + : args.Text; + + shellPage?.SubmitSearch(searchQuery); // use the resolved shellPage for consistency + ViewModel.SaveSearchQueryToList(searchQuery); + } + + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); + return; } } From 9ab845f3925f5a64f520af6adaed1f30ff6226d7 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 17 Jul 2025 00:17:02 +0900 Subject: [PATCH 3/4] Fix rebase 2 --- .../UserControls/NavigationToolbarViewModel.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index bdf920e99aa6..1a4071f8d5a1 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -1279,19 +1279,20 @@ await Task.Run(() => public async Task PopulateOmnibarSuggestionsForSearchMode() { - OmnibarSearchModeSuggestionItems.Clear(); - if (ContentPageContext.ShellPage is null) return; - ContentPageContext.ShellPage.ShellViewModel.FilesAndFoldersFilter = OmnibarSearchModeText; - - // Refresh the browser to apply the search filter - await ContentPageContext.ShellPage.ShellViewModel.ApplyFilesAndFoldersChangesAsync(); + List newSuggestions = []; - if (!string.IsNullOrWhiteSpace(OmnibarSearchModeText)) + if (string.IsNullOrWhiteSpace(OmnibarSearchModeText)) + { + var previousSearchQueries = UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList; + if (previousSearchQueries is not null) + newSuggestions.AddRange(previousSearchQueries.Select(query => new SuggestionModel(query, true))); + } + else { - var search = new FolderSearch() + var search = new FolderSearch { Query = OmnibarSearchModeText, Folder = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory, From dcdaf4e76b4ac9aa8efbbf39fbb49b7f647e5291 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 17 Jul 2025 00:19:04 +0900 Subject: [PATCH 4/4] Update --- src/Files.App/UserControls/NavigationToolbar.xaml.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 8124cf4ca4ab..be1cb3dce069 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -309,10 +309,13 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - var shellPage = ContentPageContext.ShellPage; + if (ContentPageContext.ShellPage is not { } shellPage) + return; - if (args.Item is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath) && shellPage is not null) + if (args.Item is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath)) + { await NavigationHelpers.OpenPath(item.ItemPath, shellPage); + } else { var searchQuery = args.Item is SuggestionModel x && !string.IsNullOrWhiteSpace(x.Name) @@ -324,6 +327,7 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes } (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); + return; } }