diff --git a/src/settings-ui/Settings.UI/Services/NavigationService.cs b/src/settings-ui/Settings.UI/Services/NavigationService.cs index d7c408208b90..c8f6854dcf19 100644 --- a/src/settings-ui/Settings.UI/Services/NavigationService.cs +++ b/src/settings-ui/Settings.UI/Services/NavigationService.cs @@ -4,6 +4,7 @@ using System; +using ManagedCommon; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Animation; @@ -57,13 +58,21 @@ public static bool Navigate(Type pageType, object parameter = null, NavigationTr // Don't open the same page multiple times if (Frame.Content?.GetType() != pageType || (parameter != null && !parameter.Equals(lastParamUsed))) { - var navigationResult = Frame.Navigate(pageType, parameter, infoOverride); - if (navigationResult) + try { - lastParamUsed = parameter; - } + var navigationResult = Frame.Navigate(pageType, parameter, infoOverride); + if (navigationResult) + { + lastParamUsed = parameter; + } - return navigationResult; + return navigationResult; + } + catch (Exception ex) + { + Logger.LogError($"Navigation to {pageType?.Name} failed with exception", ex); + return false; + } } else { @@ -101,7 +110,14 @@ internal static void EnsurePageIsSelected(Type pageType) { if (Frame.Content == null) { - Frame.Navigate(pageType); + try + { + Frame.Navigate(pageType); + } + catch (Exception ex) + { + Logger.LogError($"EnsurePageIsSelected failed for {pageType?.Name}", ex); + } } } } diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs index 7515cad863fc..a78406913571 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/ShellPage.xaml.cs @@ -599,27 +599,34 @@ private List BuildSuggestionItems(string query, List(); - return; - } + var queryText = (args.QueryText ?? _lastQueryText)?.Trim(); + if (string.IsNullOrWhiteSpace(queryText)) + { + NavigationService.Navigate(); + return; + } - // Prefer cached results (from live search); if empty, perform a fresh search - var matched = _lastSearchResults?.Count > 0 && string.Equals(_lastQueryText, queryText, StringComparison.Ordinal) - ? _lastSearchResults - : await Task.Run(() => SearchIndexService.Search(queryText)); + // Prefer cached results (from live search); if empty, perform a fresh search + var matched = _lastSearchResults?.Count > 0 && string.Equals(_lastQueryText, queryText, StringComparison.Ordinal) + ? _lastSearchResults + : await Task.Run(() => SearchIndexService.Search(queryText)); - var searchParams = new SearchResultsNavigationParams(queryText, matched); - NavigationService.Navigate(searchParams); + var searchParams = new SearchResultsNavigationParams(queryText, matched); + NavigationService.Navigate(searchParams); + } + catch (Exception ex) + { + Logger.LogError("Search query submission failed", ex); + } } public void Dispose() diff --git a/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs index aa0e8855f2de..c04afdf39510 100644 --- a/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/ShellViewModel.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using System.Windows.Input; +using ManagedCommon; using Microsoft.PowerToys.Settings.UI.Helpers; using Microsoft.PowerToys.Settings.UI.Library; using Microsoft.PowerToys.Settings.UI.Library.Helpers; @@ -135,7 +136,8 @@ private void OnBackRequested(NavigationView sender, NavigationViewBackRequestedE private void Frame_NavigationFailed(object sender, NavigationFailedEventArgs e) { - throw e.Exception; + e.Handled = true; + Logger.LogError($"Failed to load page '{e.SourcePageType?.FullName}'", e.Exception); } private void Frame_Navigated(object sender, NavigationEventArgs e)