Skip to content

Commit 9d914f2

Browse files
authored
Code Quality: Fixed tab key navigation in Omnibar (#17219)
1 parent 78a2d6e commit 9d914f2

File tree

2 files changed

+36
-19
lines changed

2 files changed

+36
-19
lines changed

src/Files.App.Controls/Omnibar/Omnibar.Events.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
// Copyright (c) Files Community
22
// Licensed under the MIT License.
33

4+
using Microsoft.UI.Input;
45
using Microsoft.UI.Xaml.Input;
56
using Windows.System;
7+
using Windows.UI.Core;
68

79
namespace Files.App.Controls
810
{
@@ -47,7 +49,7 @@ private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e)
4749
IsFocused = false;
4850
}
4951

50-
private void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e)
52+
private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e)
5153
{
5254
if (e.Key is VirtualKey.Enter)
5355
{
@@ -98,6 +100,14 @@ private void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e)
98100
previouslyFocusedElement?.Focus(FocusState.Programmatic);
99101
}
100102
}
103+
else if (e.Key == VirtualKey.Tab && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down))
104+
{
105+
// Focus on inactive content when pressing Tab instead of moving to the next control in the tab order
106+
e.Handled = true;
107+
IsFocused = false;
108+
await Task.Delay(15);
109+
CurrentSelectedMode?.ContentOnInactive?.Focus(FocusState.Keyboard);
110+
}
101111
else
102112
{
103113
_textChangeReason = OmnibarTextChangeReason.UserInput;

src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,31 +1209,38 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode()
12091209

12101210
dispatcherQueue.TryEnqueue(() =>
12111211
{
1212-
var selectedItemPath = ContentPageContext.SelectedItem.ItemPath;
1213-
var fileActionEntity = ActionManager.Instance.EntityFactory.CreateFileEntity(selectedItemPath);
1214-
var actions = ActionManager.Instance.ActionRuntime.ActionCatalog.GetActionsForInputs(new[] { fileActionEntity });
1215-
1216-
foreach (var action in actions.Where(a => a.Definition.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase)))
1212+
try
12171213
{
1218-
var newItem = new NavigationBarSuggestionItem
1219-
{
1220-
PrimaryDisplay = action.Definition.Description,
1221-
SearchText = OmnibarCommandPaletteModeText,
1222-
ActionInstance = action
1223-
};
1214+
var selectedItemPath = ContentPageContext.SelectedItem.ItemPath;
1215+
var fileActionEntity = ActionManager.Instance.EntityFactory.CreateFileEntity(selectedItemPath);
1216+
var actions = ActionManager.Instance.ActionRuntime.ActionCatalog.GetActionsForInputs(new[] { fileActionEntity });
12241217

1225-
if (Uri.TryCreate(action.Definition.IconFullPath, UriKind.RelativeOrAbsolute, out Uri? validUri))
1218+
foreach (var action in actions.Where(a => a.Definition.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase)))
12261219
{
1227-
try
1220+
var newItem = new NavigationBarSuggestionItem
12281221
{
1229-
newItem.ActionIconSource = new BitmapImage(validUri);
1230-
}
1231-
catch (Exception)
1222+
PrimaryDisplay = action.Definition.Description,
1223+
SearchText = OmnibarCommandPaletteModeText,
1224+
ActionInstance = action
1225+
};
1226+
1227+
if (Uri.TryCreate(action.Definition.IconFullPath, UriKind.RelativeOrAbsolute, out Uri? validUri))
12321228
{
1229+
try
1230+
{
1231+
newItem.ActionIconSource = new BitmapImage(validUri);
1232+
}
1233+
catch (Exception)
1234+
{
1235+
}
12331236
}
1234-
}
12351237

1236-
OmnibarCommandPaletteModeSuggestionItems.Add(newItem);
1238+
OmnibarCommandPaletteModeSuggestionItems.Add(newItem);
1239+
}
1240+
}
1241+
catch (Exception ex)
1242+
{
1243+
App.Logger.LogWarning(ex, ex.Message);
12371244
}
12381245
});
12391246
}

0 commit comments

Comments
 (0)