diff --git a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
index 35970397d594..044291902261 100644
--- a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
+++ b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs
@@ -1,11 +1,20 @@
// 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 object? _Icon;
+ public object? Icon
+ {
+ get => _Icon;
+ set => SetProperty(ref _Icon, value);
+ }
+
private string? _Text;
public string? Text
{
@@ -88,5 +97,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..02adc64e731a 100644
--- a/src/Files.App/UserControls/NavigationToolbar.xaml
+++ b/src/Files.App/UserControls/NavigationToolbar.xaml
@@ -383,42 +383,47 @@
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}">
-
+
-
-
-
-
-
-
-
+ Foreground="{ThemeResource TextFillColorPrimaryBrush}"
+ MaxLines="1"
+ TextTrimming="CharacterEllipsis"
+ TextWrapping="NoWrap">
+
+
+
+
+
- -->
+
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,8 @@ public bool IsOmnibarFocused
_ = PopulateOmnibarSuggestionsForPathMode();
break;
case OmnibarPaletteModeName:
+ if (OmnibarCommandPaletteModeSuggestionItems.Count is 0)
+ PopulateOmnibarSuggestionsForCommandPaletteMode();
break;
case OmnibarSearchModeName:
break;
@@ -1126,6 +1132,32 @@ void AddNoResultsItem()
}
}
+ public void PopulateOmnibarSuggestionsForCommandPaletteMode()
+ {
+ OmnibarCommandPaletteModeText ??= string.Empty;
+
+ 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()
+ {
+ Icon = command.Icon,
+ 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)
{