From e9d82cf21cc86640c31ba3ef49606376cf3c511e Mon Sep 17 00:00:00 2001 From: ferrariofilippo Date: Mon, 16 Jan 2023 12:24:40 +0100 Subject: [PATCH 1/3] Fixed: using the arrow keys when renaming a file will start selecting other files --- src/Files.App/UserControls/SearchBox.xaml | 1 + src/Files.App/UserControls/SearchBox.xaml.cs | 2 ++ .../ViewModels/SearchBoxViewModel.cs | 22 ++++++------------- .../Views/LayoutModes/GridViewBrowser.xaml.cs | 8 +++++-- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/Files.App/UserControls/SearchBox.xaml b/src/Files.App/UserControls/SearchBox.xaml index b1ab9af999e7..2e86ec023d90 100644 --- a/src/Files.App/UserControls/SearchBox.xaml +++ b/src/Files.App/UserControls/SearchBox.xaml @@ -75,6 +75,7 @@ x:Name="SearchRegion" ItemTemplate="{StaticResource SuggestionTemplate}" ItemsSource="{x:Bind SearchBoxViewModel.Suggestions, Mode=OneWay}" + KeyDown="SearchRegion_KeyDown" PlaceholderText="{helpers:ResourceString Name=NavigationToolbarSearchRegion/PlaceholderText}" QuerySubmitted="SearchRegion_QuerySubmitted" Text="{x:Bind SearchBoxViewModel.Query, Mode=TwoWay}" diff --git a/src/Files.App/UserControls/SearchBox.xaml.cs b/src/Files.App/UserControls/SearchBox.xaml.cs index 01edc002ae1a..11fb6f7e32c7 100644 --- a/src/Files.App/UserControls/SearchBox.xaml.cs +++ b/src/Files.App/UserControls/SearchBox.xaml.cs @@ -24,5 +24,7 @@ private void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQu => SearchBoxViewModel.SearchRegion_QuerySubmitted(sender, e); private void SearchRegion_Escaped(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs e) => SearchBoxViewModel.SearchRegion_Escaped(sender, e); + private void SearchRegion_KeyDown(object sender, KeyRoutedEventArgs e) + => SearchBoxViewModel.SearchRegion_KeyDown(sender, e); } } diff --git a/src/Files.App/ViewModels/SearchBoxViewModel.cs b/src/Files.App/ViewModels/SearchBoxViewModel.cs index 114d40e7e1c7..72ca23abdd0d 100644 --- a/src/Files.App/ViewModels/SearchBoxViewModel.cs +++ b/src/Files.App/ViewModels/SearchBoxViewModel.cs @@ -8,6 +8,7 @@ using System.Collections.ObjectModel; using System.Linq; using Windows.Foundation; +using Windows.System; namespace Files.App.ViewModels { @@ -32,9 +33,7 @@ public string Query private readonly List oldQueries = new List(); public void ClearSuggestions() - { - Suggestions.Clear(); - } + => Suggestions.Clear(); public void SetSuggestions(IEnumerable suggestions) { @@ -44,9 +43,7 @@ public void SetSuggestions(IEnumerable suggestions) var oldSuggestions = Suggestions.Except(items, suggestionComparer).ToList(); foreach (var oldSuggestion in oldSuggestions) - { Suggestions.Remove(oldSuggestion); - } var newSuggestions = items.Except(Suggestions, suggestionComparer).ToList(); foreach (var newSuggestion in newSuggestions) @@ -65,9 +62,7 @@ public void SetSuggestions(IEnumerable suggestions) } public void SearchRegion_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs e) - { - TextChanged?.Invoke(this, new SearchBoxTextChangedEventArgs(e.Reason)); - } + => TextChanged?.Invoke(this, new SearchBoxTextChangedEventArgs(e.Reason)); public void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs e) { @@ -95,25 +90,22 @@ public void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQue // Limit to last 5 queries to improve performance if (oldQueries.Count > 5) - { oldQueries.RemoveAt(5); - } } } public void SearchRegion_Escaped(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs e) - { - Escaped?.Invoke(this, this); - } + => Escaped?.Invoke(this, this); public void SearchRegion_GotFocus(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(query)) - { AddRecentQueries(); - } } + public void SearchRegion_KeyDown(object sender, KeyRoutedEventArgs e) + => e.Handled = e.Key == VirtualKey.Left || e.Key == VirtualKey.Right; + public void AddRecentQueries() { ClearSuggestions(); diff --git a/src/Files.App/Views/LayoutModes/GridViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/GridViewBrowser.xaml.cs index 46c8058e164a..22c7f6054e07 100644 --- a/src/Files.App/Views/LayoutModes/GridViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/GridViewBrowser.xaml.cs @@ -308,9 +308,9 @@ private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTe private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) { + var textBox = (TextBox)sender; if (e.Key == VirtualKey.Escape) { - TextBox textBox = (TextBox)sender; textBox.LostFocus -= RenameTextBox_LostFocus; textBox.Text = OldItemName; EndRename(textBox); @@ -318,11 +318,15 @@ private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) } else if (e.Key == VirtualKey.Enter) { - TextBox textBox = (TextBox)sender; textBox.LostFocus -= RenameTextBox_LostFocus; CommitRename(textBox); e.Handled = true; } + else if ((e.Key == VirtualKey.Left && textBox.SelectionStart == 0) || + (e.Key == VirtualKey.Right && (textBox.SelectionStart + textBox.SelectionLength) == textBox.Text.Length)) + { + e.Handled = true; + } } private void RenameTextBox_LostFocus(object sender, RoutedEventArgs e) From b832ae882daf94d1310aa75815990204e6a15c02 Mon Sep 17 00:00:00 2001 From: ferrariofilippo Date: Mon, 16 Jan 2023 18:55:29 +0100 Subject: [PATCH 2/3] Partial fix of Up/Down arrows --- .../ViewModels/SearchBoxViewModel.cs | 6 +++- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 34 +++++++++++------- .../LayoutModes/DetailsLayoutBrowser.xaml.cs | 36 +++++++++++-------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/Files.App/ViewModels/SearchBoxViewModel.cs b/src/Files.App/ViewModels/SearchBoxViewModel.cs index 72ca23abdd0d..881c23674f7f 100644 --- a/src/Files.App/ViewModels/SearchBoxViewModel.cs +++ b/src/Files.App/ViewModels/SearchBoxViewModel.cs @@ -104,7 +104,11 @@ public void SearchRegion_GotFocus(object sender, RoutedEventArgs e) } public void SearchRegion_KeyDown(object sender, KeyRoutedEventArgs e) - => e.Handled = e.Key == VirtualKey.Left || e.Key == VirtualKey.Right; + { + e.Handled = e.Key == VirtualKey.Left || + e.Key == VirtualKey.Right || + ((e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) && Suggestions.Count == 0); + } public void AddRecentQueries() { diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 8ed9489980b5..4769727ed5ed 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -262,20 +262,28 @@ private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTe private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) { - if (e.Key == VirtualKey.Escape) + var textBox = (TextBox)sender; + switch (e.Key) { - TextBox textBox = (TextBox)sender; - textBox.LostFocus -= RenameTextBox_LostFocus; - textBox.Text = OldItemName; - EndRename(textBox); - e.Handled = true; - } - else if (e.Key == VirtualKey.Enter) - { - TextBox textBox = (TextBox)sender; - textBox.LostFocus -= RenameTextBox_LostFocus; - CommitRename(textBox); - e.Handled = true; + case VirtualKey.Escape: + textBox.LostFocus -= RenameTextBox_LostFocus; + textBox.Text = OldItemName; + EndRename(textBox); + e.Handled = true; + break; + case VirtualKey.Enter: + textBox.LostFocus -= RenameTextBox_LostFocus; + CommitRename(textBox); + e.Handled = true; + break; + case VirtualKey.Up: + textBox.SelectionStart = 0; + e.Handled = true; + break; + case VirtualKey.Down: + textBox.SelectionStart = textBox.Text.Length; + e.Handled = true; + break; } } diff --git a/src/Files.App/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs index 460d72987a05..2dbfb142b153 100644 --- a/src/Files.App/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs @@ -355,22 +355,28 @@ private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTe private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) { - if (e.Key == VirtualKey.Escape) + var textBox = (TextBox)sender; + switch (e.Key) { - TextBox? textBox = sender as TextBox; - textBox!.LostFocus -= RenameTextBox_LostFocus; - textBox.Text = OldItemName; - EndRename(textBox); - e.Handled = true; - } - else if (e.Key == VirtualKey.Enter) - { - TextBox? textBox = sender as TextBox; - if (textBox is null) - return; - textBox.LostFocus -= RenameTextBox_LostFocus; - CommitRename(textBox); - e.Handled = true; + case VirtualKey.Escape: + textBox.LostFocus -= RenameTextBox_LostFocus; + textBox.Text = OldItemName; + EndRename(textBox); + e.Handled = true; + break; + case VirtualKey.Enter: + textBox.LostFocus -= RenameTextBox_LostFocus; + CommitRename(textBox); + e.Handled = true; + break; + case VirtualKey.Up: + textBox.SelectionStart = 0; + e.Handled = true; + break; + case VirtualKey.Down: + textBox.SelectionStart = textBox.Text.Length; + e.Handled = true; + break; } } From 26c349d6fd9f67fe41ccffe2378d2d1424650650 Mon Sep 17 00:00:00 2001 From: ferrariofilippo Date: Thu, 19 Jan 2023 23:32:46 +0100 Subject: [PATCH 3/3] Reverted Single Line Methods --- src/Files.App/ViewModels/SearchBoxViewModel.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Files.App/ViewModels/SearchBoxViewModel.cs b/src/Files.App/ViewModels/SearchBoxViewModel.cs index 881c23674f7f..34510a9f36b5 100644 --- a/src/Files.App/ViewModels/SearchBoxViewModel.cs +++ b/src/Files.App/ViewModels/SearchBoxViewModel.cs @@ -33,7 +33,9 @@ public string Query private readonly List oldQueries = new List(); public void ClearSuggestions() - => Suggestions.Clear(); + { + Suggestions.Clear(); + } public void SetSuggestions(IEnumerable suggestions) { @@ -62,7 +64,9 @@ public void SetSuggestions(IEnumerable suggestions) } public void SearchRegion_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs e) - => TextChanged?.Invoke(this, new SearchBoxTextChangedEventArgs(e.Reason)); + { + TextChanged?.Invoke(this, new SearchBoxTextChangedEventArgs(e.Reason)); + } public void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs e) { @@ -95,7 +99,9 @@ public void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQue } public void SearchRegion_Escaped(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs e) - => Escaped?.Invoke(this, this); + { + Escaped?.Invoke(this, this); + } public void SearchRegion_GotFocus(object sender, RoutedEventArgs e) {