From abc121f093972986b6a674fb1f545e417188d389 Mon Sep 17 00:00:00 2001
From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com>
Date: Wed, 7 May 2025 23:41:26 +0900
Subject: [PATCH 1/4] Init
---
.../Data/Items/NavigationBarSuggestionItem.cs | 15 ++++-
.../UserControls/NavigationToolbar.xaml | 58 +++++++++----------
.../UserControls/NavigationToolbar.xaml.cs | 38 ++++++++++--
.../NavigationToolbarViewModel.cs | 31 ++++++++++
4 files changed, 107 insertions(+), 35 deletions(-)
diff --git a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
index 35970397d594..c8952f573719 100644
--- a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
+++ b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
@@ -1,10 +1,12 @@
// Copyright (c) Files Community
// Licensed under the MIT License.
+using Files.App.Controls;
+
namespace Files.App.Data.Items
{
[Obsolete("Remove once Omnibar goes out of experimental.")]
- public sealed partial class NavigationBarSuggestionItem : ObservableObject
+ public sealed partial class NavigationBarSuggestionItem : ObservableObject, IOmnibarTextMemberPathProvider
{
private string? _Text;
public string? Text
@@ -88,5 +90,16 @@ private void UpdatePrimaryDisplay()
}
}
}
+
+ public string GetTextMemberPath(string textMemberPath)
+ {
+ return textMemberPath switch
+ {
+ nameof(Text) => Text,
+ nameof(PrimaryDisplay) => PrimaryDisplay,
+ nameof(SearchText) => SearchText,
+ _ => string.Empty
+ };
+ }
}
}
diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml
index abb235b9c725..53a51b46494c 100644
--- a/src/Files.App/UserControls/NavigationToolbar.xaml
+++ b/src/Files.App/UserControls/NavigationToolbar.xaml
@@ -383,42 +383,42 @@
IconOnActive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Commands}, IsFilled=True}"
IconOnInactive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Commands}, IconType=Outline}"
ModeName="{helpers:ResourceString Name=CommandPalette}"
- PlaceholderText="{helpers:ResourceString Name=OmnibarCommandPaletteModeTextPlaceholder}">
-
+
+
+
+
+
+
- -->
+
PathModeSuggestionItems { get; } = [];
+ internal ObservableCollection OmnibarCommandPaletteModeSuggestionItems { get; } = [];
+
public bool IsSingleItemOverride { get; set; }
public bool SearchHasFocus { get; private set; }
@@ -218,6 +220,8 @@ public string? PathText
}
}
+ private string? _OmnibarCommandPaletteModeText;
+ public string? OmnibarCommandPaletteModeText { get => _OmnibarCommandPaletteModeText; set => SetProperty(ref _OmnibarCommandPaletteModeText, value); }
private bool _IsOmnibarFocused;
public bool IsOmnibarFocused
@@ -239,6 +243,7 @@ public bool IsOmnibarFocused
_ = PopulateOmnibarSuggestionsForPathMode();
break;
case OmnibarPaletteModeName:
+ _ = PopulateOmnibarSuggestionsForCommandPaletteMode();
break;
case OmnibarSearchModeName:
break;
@@ -1126,6 +1131,32 @@ void AddNoResultsItem()
}
}
+ public async Task PopulateOmnibarSuggestionsForCommandPaletteMode()
+ {
+ if (string.IsNullOrEmpty(OmnibarCommandPaletteModeText))
+ return;
+
+ OmnibarCommandPaletteModeSuggestionItems.Clear();
+
+ IList? suggestions = null;
+
+ suggestions = [.. Commands.Where(command =>
+ command.IsExecutable &&
+ command.IsAccessibleGlobally &&
+ (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) ||
+ command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase)))
+ .Select(command => new NavigationBarSuggestionItem()
+ {
+ Text = command.Code.ToString(),
+ PrimaryDisplay = command.Description,
+ HotKeys = command.HotKeys,
+ SearchText = OmnibarCommandPaletteModeText,
+ })];
+
+ foreach (var suggestionItem in suggestions)
+ OmnibarCommandPaletteModeSuggestionItems.Add(suggestionItem);
+ }
+
[Obsolete("Remove once Omnibar goes out of experimental.")]
public async Task SetAddressBarSuggestionsAsync(AutoSuggestBox sender, IShellPage shellpage)
{
From f454f1fa9f3595aa869d89c26937af0ba7e74a06 Mon Sep 17 00:00:00 2001
From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com>
Date: Thu, 8 May 2025 00:54:02 +0900
Subject: [PATCH 2/4] Update
---
src/Files.App/UserControls/NavigationToolbar.xaml.cs | 2 +-
.../ViewModels/UserControls/NavigationToolbarViewModel.cs | 7 +++----
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs
index 407bf79bb666..2c5bbbf14c7b 100644
--- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs
+++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs
@@ -292,7 +292,7 @@ private async void Omnibar_TextChanged(Omnibar sender, OmnibarTextChangedEventAr
}
else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode)
{
- await ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode();
+ ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode();
}
else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode)
{
diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
index 0a535c7267c2..b030ca5c652d 100644
--- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
+++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
@@ -243,7 +243,7 @@ public bool IsOmnibarFocused
_ = PopulateOmnibarSuggestionsForPathMode();
break;
case OmnibarPaletteModeName:
- _ = PopulateOmnibarSuggestionsForCommandPaletteMode();
+ PopulateOmnibarSuggestionsForCommandPaletteMode();
break;
case OmnibarSearchModeName:
break;
@@ -1131,10 +1131,9 @@ void AddNoResultsItem()
}
}
- public async Task PopulateOmnibarSuggestionsForCommandPaletteMode()
+ public void PopulateOmnibarSuggestionsForCommandPaletteMode()
{
- if (string.IsNullOrEmpty(OmnibarCommandPaletteModeText))
- return;
+ OmnibarCommandPaletteModeText ??= string.Empty;
OmnibarCommandPaletteModeSuggestionItems.Clear();
From a3c54ed6cfb25c5dfd83c68fa94f7eaab9fedfc4 Mon Sep 17 00:00:00 2001
From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com>
Date: Fri, 9 May 2025 14:33:45 +0900
Subject: [PATCH 3/4] Improved perf when focusing on Palette mode for the first
time
---
.../ViewModels/UserControls/NavigationToolbarViewModel.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
index b030ca5c652d..f191a9314a15 100644
--- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
+++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
@@ -243,7 +243,8 @@ public bool IsOmnibarFocused
_ = PopulateOmnibarSuggestionsForPathMode();
break;
case OmnibarPaletteModeName:
- PopulateOmnibarSuggestionsForCommandPaletteMode();
+ if (OmnibarCommandPaletteModeSuggestionItems.Count is 0)
+ PopulateOmnibarSuggestionsForCommandPaletteMode();
break;
case OmnibarSearchModeName:
break;
From 288ba5998f9f6e2a1b536aed6ebdd4904306bb30 Mon Sep 17 00:00:00 2001
From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com>
Date: Wed, 14 May 2025 00:41:01 +0900
Subject: [PATCH 4/4] Added an icon to a suggestion item
---
.../Data/Items/NavigationBarSuggestionItem.cs | 7 +++++++
src/Files.App/UserControls/NavigationToolbar.xaml | 11 ++++++++---
.../UserControls/NavigationToolbarViewModel.cs | 1 +
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
index c8952f573719..044291902261 100644
--- a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
+++ b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
@@ -8,6 +8,13 @@ namespace Files.App.Data.Items
[Obsolete("Remove once Omnibar goes out of experimental.")]
public sealed partial class NavigationBarSuggestionItem : ObservableObject, IOmnibarTextMemberPathProvider
{
+ private object? _Icon;
+ public object? Icon
+ {
+ get => _Icon;
+ set => SetProperty(ref _Icon, value);
+ }
+
private string? _Text;
public string? Text
{
diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml
index 53a51b46494c..02adc64e731a 100644
--- a/src/Files.App/UserControls/NavigationToolbar.xaml
+++ b/src/Files.App/UserControls/NavigationToolbar.xaml
@@ -396,14 +396,18 @@
-
-
-
+
+
+
diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
index f191a9314a15..1aae75d648e0 100644
--- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
+++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs
@@ -1147,6 +1147,7 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode()
command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase)))
.Select(command => new NavigationBarSuggestionItem()
{
+ Icon = command.Icon,
Text = command.Code.ToString(),
PrimaryDisplay = command.Description,
HotKeys = command.HotKeys,