Skip to content

Commit bc8d064

Browse files
committed
POC
1 parent 44b4ce5 commit bc8d064

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ protected override void UnhookEvents()
9595
ItemManipulationModel.RefreshItemsThumbnailInvoked -= ItemManipulationModel_RefreshItemsThumbnail;
9696
}
9797

98-
protected override void Page_CharacterReceived(UIElement sender, CharacterReceivedRoutedEventArgs args)
98+
protected override void Page_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
9999
{
100100
if (ParentShellPageInstance is null ||
101101
ParentShellPageInstance.CurrentPageType != this.GetType() ||
@@ -112,7 +112,7 @@ focusedElement is PasswordBox ||
112112
DependencyObjectHelpers.FindParent<ContentDialog>(focusedElement) is not null)
113113
return;
114114

115-
base.Page_CharacterReceived(sender, args);
115+
base.Page_PreviewKeyDown(sender, e);
116116
}
117117

118118
// Virtual methods

src/Files.App/Views/Layouts/BaseLayoutPage.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ protected override async void OnNavigatedTo(NavigationEventArgs e)
401401
base.OnNavigatedTo(e);
402402

403403
// Add item jumping handler
404-
CharacterReceived += Page_CharacterReceived;
404+
PreviewKeyDown += Page_PreviewKeyDown; ;
405405

406406
navigationArguments = (NavigationArguments)e.Parameter;
407407
ParentShellPageInstance = navigationArguments.AssociatedTabInstance;
@@ -565,7 +565,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
565565
base.OnNavigatingFrom(e);
566566

567567
// Remove item jumping handler
568-
CharacterReceived -= Page_CharacterReceived;
568+
PreviewKeyDown -= Page_PreviewKeyDown;
569569
FolderSettings!.LayoutModeChangeRequested -= BaseFolderSettings_LayoutModeChangeRequested;
570570
FolderSettings.GroupOptionPreferenceUpdated -= FolderSettings_GroupOptionPreferenceUpdated;
571571
FolderSettings.GroupDirectionPreferenceUpdated -= FolderSettings_GroupDirectionPreferenceUpdated;
@@ -996,12 +996,33 @@ private void RemoveOverflow(CommandBarFlyout contextMenuFlyout)
996996
overflowSeparator.Visibility = Visibility.Collapsed;
997997
}
998998

999-
protected virtual void Page_CharacterReceived(UIElement sender, CharacterReceivedRoutedEventArgs args)
999+
protected virtual void Page_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
10001000
{
1001-
if (ParentShellPageInstance!.IsCurrentInstance)
1001+
// Get the virtual key
1002+
var key = e.Key;
1003+
1004+
// Convert to character if it's a printable key
1005+
string keyString = key.ToString();
1006+
1007+
// Basic filtering: check if it's a letter
1008+
if (key >= VirtualKey.A && key <= VirtualKey.Z)
1009+
{
1010+
char letter = (char)('A' + (key - VirtualKey.A));
1011+
1012+
if (ParentShellPageInstance!.IsCurrentInstance)
1013+
{
1014+
ParentShellPageInstance!.ShellViewModel.FilesAndFoldersFilter += letter.ToString().ToLowerInvariant();
1015+
JumpString += letter.ToString().ToLowerInvariant();
1016+
}
1017+
}
1018+
else if (key is VirtualKey.Space && !string.IsNullOrEmpty(ParentShellPageInstance!.ShellViewModel.FilesAndFoldersFilter))
1019+
{
1020+
ParentShellPageInstance!.ShellViewModel.FilesAndFoldersFilter += " ";
1021+
}
1022+
else if (key is VirtualKey.Back && !string.IsNullOrEmpty(ParentShellPageInstance!.ShellViewModel.FilesAndFoldersFilter))
10021023
{
1003-
char letter = args.Character;
1004-
JumpString += letter.ToString().ToLowerInvariant();
1024+
ParentShellPageInstance.ShellViewModel.FilesAndFoldersFilter =
1025+
ParentShellPageInstance.ShellViewModel.FilesAndFoldersFilter.Substring(0, ParentShellPageInstance.ShellViewModel.FilesAndFoldersFilter.Length - 1);
10051026
}
10061027
}
10071028

src/Files.App/Views/MainPage.xaml.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ private async Task OnPreviewKeyDownAsync(KeyRoutedEventArgs e)
216216
if (source?.FindAscendantOrSelf<TextBox>() is not null)
217217
break;
218218

219+
// Prevent the back key from executing a command if the filter header is not empty
220+
if (e.Key is VirtualKey.Back && !string.IsNullOrEmpty(SidebarAdaptiveViewModel.PaneHolder?.ActivePaneOrColumn!.ShellViewModel.FilesAndFoldersFilter))
221+
break;
222+
219223
// Execute command for hotkey
220224
var command = Commands[hotKey];
221225

0 commit comments

Comments
 (0)