From cad754c7e3f477ebc884a4289d2a95be8362c821 Mon Sep 17 00:00:00 2001
From: Yair <39923744+yaira2@users.noreply.github.com>
Date: Thu, 24 Apr 2025 18:11:47 -0400
Subject: [PATCH 1/2] Init
---
src/Files.App/Dialogs/SettingsDialog.xaml | 19 ++++
src/Files.App/Dialogs/SettingsDialog.xaml.cs | 103 ++++++++++++++++++-
2 files changed, 121 insertions(+), 1 deletion(-)
diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml b/src/Files.App/Dialogs/SettingsDialog.xaml
index 451a492f67d2..9e946f5a269d 100644
--- a/src/Files.App/Dialogs/SettingsDialog.xaml
+++ b/src/Files.App/Dialogs/SettingsDialog.xaml
@@ -82,6 +82,25 @@
PaneDisplayMode="Left"
SelectionChanged="MainSettingsNavigationView_SelectionChanged">
+
+
+
+
+
+
+
+
+
+
Text; // Ensures dropdown shows search text
+ }
+
+ private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
+ {
+ if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
+ {
+ var query = sender.Text;
+ var results = SearchSettingsPages(query);
+
+ // Store actual objects instead of just text
+ sender.ItemsSource = results;
+ }
+ }
+
+ private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
+ {
+ var query = args.QueryText;
+ var results = SearchSettingsPages(query);
+ sender.ItemsSource = results;
+ }
+
+ private void NavViewSearchBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
+ {
+ if (args.SelectedItem is SearchResultItem selectedItem)
+ {
+ SettingsContentFrame.Navigate(selectedItem.ParentPage.GetType());
+ NavViewSearchBox.Text = string.Empty;
+ }
+ }
+
+ private IEnumerable SearchVisualTreeForText(DependencyObject parent, string query)
+ {
+ var results = new List();
+
+ for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
+ {
+ var child = VisualTreeHelper.GetChild(parent, i);
+
+ if (child is FrameworkElement element)
+ {
+ if (element is TextBlock textBlock && textBlock.Text.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(textBlock.Text);
+ else if (element is SettingsCard settingsCard && settingsCard.Header is string headerText &&
+ headerText.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(headerText);
+ else if (element is SettingsExpander settingsExpander)
+ {
+ if (settingsExpander.Header is string expanderHeader &&
+ expanderHeader.Contains(query, StringComparison.OrdinalIgnoreCase))
+ results.Add(expanderHeader);
+
+ results.AddRange(SearchVisualTreeForText(settingsExpander, query));
+
+ results.AddRange(settingsExpander.Items.OfType()
+ .Select(subCard => subCard.Header)
+ .OfType()
+ .Where(subCardHeader => subCardHeader.Contains(query, StringComparison.OrdinalIgnoreCase)));
+ }
+ }
+
+ results.AddRange(SearchVisualTreeForText(child, query));
+ }
+
+ return results;
+ }
+
+
+ private IEnumerable SearchSettingsPages(string query)
+ {
+ var results = new List();
+
+ var settingsPages = new List
+ {
+ new AboutPage(),
+ new AppearancePage(),
+ new TagsPage(),
+ new DevToolsPage(),
+ new GeneralPage(),
+ new FoldersPage(),
+ };
+
+ foreach (var page in settingsPages)
+ {
+ var matches = SearchVisualTreeForText(page, query);
+ foreach (var match in matches)
+ {
+ results.Add(new SearchResultItem { Text = match, ParentPage = page });
+ }
+ }
+
+ return results;
+ }
+
}
}
From e362db46f81a4ce088c3ffc61eb96aff20286d25 Mon Sep 17 00:00:00 2001
From: Yair <39923744+yaira2@users.noreply.github.com>
Date: Tue, 27 May 2025 17:53:47 -0400
Subject: [PATCH 2/2] Update SettingsDialog.xaml
---
src/Files.App/Dialogs/SettingsDialog.xaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml b/src/Files.App/Dialogs/SettingsDialog.xaml
index 9e946f5a269d..5532ccd71123 100644
--- a/src/Files.App/Dialogs/SettingsDialog.xaml
+++ b/src/Files.App/Dialogs/SettingsDialog.xaml
@@ -89,7 +89,8 @@
QueryIcon="Find"
QuerySubmitted="AutoSuggestBox_QuerySubmitted"
SuggestionChosen="NavViewSearchBox_SuggestionChosen"
- TextChanged="AutoSuggestBox_TextChanged">
+ TextChanged="AutoSuggestBox_TextChanged"
+ UpdateTextOnSelect="False">