From 7d2b5f0c1f199d88a5510ee605cb05131d278c54 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Fri, 4 Nov 2022 11:59:06 +0100 Subject: [PATCH 01/15] First refactoring to clear the method. --- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index be9afa253bd1..08554095c7a2 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -399,20 +399,37 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) } else if (e.Key == VirtualKey.Left) // Left arrow: select parent folder (previous column) { - if (!IsRenamingItem && !ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + if (IsRenamingItem || ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + return; + + if ((ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column == 0) + return; + + try { - if ((ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column > 0) - FocusManager.TryMoveFocus(FocusNavigationDirection.Previous); - e.Handled = true; + FocusManager.TryMoveFocus(FocusNavigationDirection.Previous); } + catch (Exception exception) + { + + } + + e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column { - if (!IsRenamingItem && !ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + if (IsRenamingItem || ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + return; + + try { FocusManager.TryMoveFocus(FocusNavigationDirection.Next); - e.Handled = true; } + catch(Exception ex) + { + + } + e.Handled = true; } } From ed8e2decf2cf3c5264e92f87b0eec78261c9e0b8 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 10:40:27 +0100 Subject: [PATCH 02/15] Now can move with keyboard to last blade. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 2 +- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 08554095c7a2..7e44f330899e 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -423,7 +423,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) try { - FocusManager.TryMoveFocus(FocusNavigationDirection.Next); + this.FindAscendant()?.MoveFocusToNextBlade(); } catch(Exception ex) { diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index b65123cdee0a..4e6fdd8f6fa7 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -204,6 +204,10 @@ public void NavigateUp() (ParentShellPageInstance as ModernShellPage)?.Up_Click(); } } + public void MoveFocusToNextBlade() + { + ColumnHost.ActiveBlades[^1].Focus(FocusState.Keyboard); + } public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null) { From 3aafa7cac160b5e79e4f3e7503418d5ede93921f Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 11:02:43 +0100 Subject: [PATCH 03/15] Now can move focus to the next blade. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 2 +- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 7e44f330899e..307f8f1f31b5 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -423,7 +423,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) try { - this.FindAscendant()?.MoveFocusToNextBlade(); + this.FindAscendant()?.MoveFocusToBlade((ParentShellPageInstance as ColumnShellPage).ColumnParams.Column + 1); } catch(Exception ex) { diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 4e6fdd8f6fa7..fe4193dad245 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -204,9 +204,12 @@ public void NavigateUp() (ParentShellPageInstance as ModernShellPage)?.Up_Click(); } } - public void MoveFocusToNextBlade() + + public void MoveFocusToBlade(int index) { - ColumnHost.ActiveBlades[^1].Focus(FocusState.Keyboard); + var activeBlades = ColumnHost.ActiveBlades; + DismissOtherBlades(index); + activeBlades[index].Focus(FocusState.Programmatic); } public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null) From 5beaf77a640cd51cf80853cdbb2be5d23e18e3c6 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 11:16:43 +0100 Subject: [PATCH 04/15] Can now move focus on previous blade. --- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 307f8f1f31b5..f176e04c40bb 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -399,15 +399,16 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) } else if (e.Key == VirtualKey.Left) // Left arrow: select parent folder (previous column) { - if (IsRenamingItem || ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + if (IsRenamingItem || (ParentShellPageInstance is not null && ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) ) return; - if ((ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column == 0) + var currentBladeIndex = (ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column; + if (currentBladeIndex == null || currentBladeIndex == 0) return; try { - FocusManager.TryMoveFocus(FocusNavigationDirection.Previous); + this.FindAscendant()?.MoveFocusToBlade( (int)currentBladeIndex - 1); } catch (Exception exception) { @@ -418,12 +419,14 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column { - if (IsRenamingItem || ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) + if (IsRenamingItem || (ParentShellPageInstance is not null && ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled)) return; try { - this.FindAscendant()?.MoveFocusToBlade((ParentShellPageInstance as ColumnShellPage).ColumnParams.Column + 1); + var associatedColumnShellPage = (ParentShellPageInstance as ColumnShellPage); + var currentBladeIndex = (associatedColumnShellPage is not null) ? associatedColumnShellPage.ColumnParams.Column : 0; + this.FindAscendant()?.MoveFocusToBlade((int) currentBladeIndex + 1); } catch(Exception ex) { From 0b5b34815df74802a0fc3fcec498f8844f5eae25 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 11:31:28 +0100 Subject: [PATCH 05/15] Refactored methods a bit and added conditions to prevent out of range. --- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 24 +++++-------------- .../LayoutModes/ColumnViewBrowser.xaml.cs | 6 +++-- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index f176e04c40bb..7780067761c9 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -403,18 +403,10 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) return; var currentBladeIndex = (ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column; - if (currentBladeIndex == null || currentBladeIndex == 0) + if (currentBladeIndex is null or 0) return; - try - { - this.FindAscendant()?.MoveFocusToBlade( (int)currentBladeIndex - 1); - } - catch (Exception exception) - { - - } - + this.FindAscendant()?.MoveFocusToBlade((int)currentBladeIndex - 1); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column @@ -422,15 +414,11 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (IsRenamingItem || (ParentShellPageInstance is not null && ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled)) return; - try - { - var associatedColumnShellPage = (ParentShellPageInstance as ColumnShellPage); - var currentBladeIndex = (associatedColumnShellPage is not null) ? associatedColumnShellPage.ColumnParams.Column : 0; - this.FindAscendant()?.MoveFocusToBlade((int) currentBladeIndex + 1); - } - catch(Exception ex) + var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; + this.FindAscendant()?.MoveFocusToBlade((int)currentBladeIndex + 1); + if (!IsItemSelected) { - + FileList.SelectedIndex = 0; } e.Handled = true; } diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index fe4193dad245..aecb4ea447ab 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -207,9 +207,11 @@ public void NavigateUp() public void MoveFocusToBlade(int index) { - var activeBlades = ColumnHost.ActiveBlades; + if (index < 0 || index >= ColumnHost.ActiveBlades.Count) + return; + DismissOtherBlades(index); - activeBlades[index].Focus(FocusState.Programmatic); + ColumnHost.ActiveBlades[index].Focus(FocusState.Programmatic); } public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null) From 67bad6cc919652637625c822511ea6487647b002 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 12:20:11 +0100 Subject: [PATCH 06/15] Removed unneeded code. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 7780067761c9..2493ed2d5f85 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -416,10 +416,6 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; this.FindAscendant()?.MoveFocusToBlade((int)currentBladeIndex + 1); - if (!IsItemSelected) - { - FileList.SelectedIndex = 0; - } e.Handled = true; } } From 9662a3061b8e2ddcd76ea9a79e4d453fb467eba3 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:04:36 +0100 Subject: [PATCH 07/15] Small cleaning. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 2493ed2d5f85..bdda3fcb75a7 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -402,11 +402,11 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (IsRenamingItem || (ParentShellPageInstance is not null && ParentShellPageInstance.ToolbarViewModel.IsEditModeEnabled) ) return; - var currentBladeIndex = (ParentShellPageInstance as ColumnShellPage)?.ColumnParams.Column; - if (currentBladeIndex is null or 0) + var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; + if (currentBladeIndex == 0) return; - this.FindAscendant()?.MoveFocusToBlade((int)currentBladeIndex - 1); + this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex - 1); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column @@ -415,7 +415,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) return; var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; - this.FindAscendant()?.MoveFocusToBlade((int)currentBladeIndex + 1); + this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex + 1); e.Handled = true; } } @@ -433,7 +433,7 @@ protected override void Page_CharacterReceived(UIElement sender, CharacterReceiv if ( - Microsoft.UI.Input.InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Enter) == CoreVirtualKeyStates.Down || + InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Enter) == CoreVirtualKeyStates.Down || focusedElement is Button || focusedElement is TextBox || focusedElement is PasswordBox || From 9378d526b0342660e48d32c87153d1a6788c62b7 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 14:40:59 +0100 Subject: [PATCH 08/15] Optimized blade dismission. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 4 ++-- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index bdda3fcb75a7..499032efa199 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -406,7 +406,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (currentBladeIndex == 0) return; - this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex - 1); + this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex - 1, FocusNavigationDirection.Previous); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column @@ -415,7 +415,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) return; var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; - this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex + 1); + this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex + 1, FocusNavigationDirection.Next); e.Handled = true; } } diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index aecb4ea447ab..c249af8f2575 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -10,6 +10,7 @@ using Microsoft.UI.Xaml.Navigation; using System; using System.Linq; +using Microsoft.UI.Xaml.Input; using static Files.App.Constants; namespace Files.App.Views.LayoutModes @@ -205,12 +206,14 @@ public void NavigateUp() } } - public void MoveFocusToBlade(int index) + public void MoveFocusToBlade(int index, FocusNavigationDirection direction) { if (index < 0 || index >= ColumnHost.ActiveBlades.Count) return; - DismissOtherBlades(index); + if (direction == FocusNavigationDirection.Previous) + DismissOtherBlades(index + 1); + ColumnHost.ActiveBlades[index].Focus(FocusState.Programmatic); } From 4ebd6d757e6630d04f50d31f3a797be494254597 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:21:33 +0100 Subject: [PATCH 09/15] Now correctly selecting the first object when moving right. --- .../Views/LayoutModes/ColumnViewBrowser.xaml.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index c249af8f2575..4fc131e121cf 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -214,7 +214,22 @@ public void MoveFocusToBlade(int index, FocusNavigationDirection direction) if (direction == FocusNavigationDirection.Previous) DismissOtherBlades(index + 1); - ColumnHost.ActiveBlades[index].Focus(FocusState.Programmatic); + var activeBlade = ColumnHost.ActiveBlades[index]; + activeBlade.Focus(FocusState.Programmatic); + + var activeBladeFrame = activeBlade.Content as Frame; + if (activeBladeFrame == null) + return; + + var activeBladePage = activeBladeFrame.Content as ColumnShellPage; + if (activeBladePage == null) + return; + + var activeBladeColumnViewBase = activeBladePage.SlimContentPage as ColumnViewBase; + if (activeBladeColumnViewBase == null) + return; + + activeBladeColumnViewBase.FileList.SelectedIndex = 0; } public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null) From d64d8e2ff8ae4e5ab126f7e6e2f3828fb0106b78 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:33:09 +0100 Subject: [PATCH 10/15] Separating the logic to move to previous or next blade. --- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 4 +- .../LayoutModes/ColumnViewBrowser.xaml.cs | 40 +++++++++++++------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 499032efa199..7a3f3395bc51 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -406,7 +406,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (currentBladeIndex == 0) return; - this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex - 1, FocusNavigationDirection.Previous); + this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex - 1, string.Empty); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column @@ -415,7 +415,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) return; var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; - this.FindAscendant()?.MoveFocusToBlade(currentBladeIndex + 1, FocusNavigationDirection.Next); + this.FindAscendant()?.MoveFocusToNextBlade(currentBladeIndex + 1); e.Handled = true; } } diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 4fc131e121cf..70ae1832db53 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -10,7 +10,6 @@ using Microsoft.UI.Xaml.Navigation; using System; using System.Linq; -using Microsoft.UI.Xaml.Input; using static Files.App.Constants; namespace Files.App.Views.LayoutModes @@ -206,30 +205,45 @@ public void NavigateUp() } } - public void MoveFocusToBlade(int index, FocusNavigationDirection direction) + public void MoveFocusToPreviousBlade(int index, string parentFolder) { - if (index < 0 || index >= ColumnHost.ActiveBlades.Count) + if (index < 0) return; - if (direction == FocusNavigationDirection.Previous) - DismissOtherBlades(index + 1); + DismissOtherBlades(index + 1); var activeBlade = ColumnHost.ActiveBlades[index]; activeBlade.Focus(FocusState.Programmatic); - var activeBladeFrame = activeBlade.Content as Frame; - if (activeBladeFrame == null) + var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); + if (activeBladeColumnViewBase != null) + activeBladeColumnViewBase.FileList.SelectedIndex = 0; + } + + public void MoveFocusToNextBlade(int index) + { + if (index >= ColumnHost.ActiveBlades.Count) return; + var activeBlade = ColumnHost.ActiveBlades[index]; + activeBlade.Focus(FocusState.Programmatic); + + var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); + if (activeBladeColumnViewBase != null) + activeBladeColumnViewBase.FileList.SelectedIndex = 0; + } + + private ColumnViewBase? RetrieveBladeColumnViewBase(BladeItem blade) + { + var activeBladeFrame = blade.Content as Frame; + if (activeBladeFrame == null) + return null; + var activeBladePage = activeBladeFrame.Content as ColumnShellPage; if (activeBladePage == null) - return; - - var activeBladeColumnViewBase = activeBladePage.SlimContentPage as ColumnViewBase; - if (activeBladeColumnViewBase == null) - return; + return null; - activeBladeColumnViewBase.FileList.SelectedIndex = 0; + return activeBladePage.SlimContentPage as ColumnViewBase; } public void SetSelectedPathOrNavigate(string navigationPath, Type sourcePageType, NavigationArguments navArgs = null) From 6a1bd1b38304d958a37eba2b493301d054203e8b Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:45:00 +0100 Subject: [PATCH 11/15] Now correctly select the parent folder. --- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 70ae1832db53..6c9deccfa60a 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -216,8 +216,12 @@ public void MoveFocusToPreviousBlade(int index, string parentFolder) activeBlade.Focus(FocusState.Programmatic); var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); - if (activeBladeColumnViewBase != null) - activeBladeColumnViewBase.FileList.SelectedIndex = 0; + if (activeBladeColumnViewBase == null) + return; + + var selectedItem = activeBladeColumnViewBase.FileList.SelectedItem; + activeBladeColumnViewBase.FileList.SelectedItem = null; + activeBladeColumnViewBase.FileList.SelectedItem = selectedItem; } public void MoveFocusToNextBlade(int index) From 611e1de32ddfa266607a4617a42e46cc77524c67 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:46:27 +0100 Subject: [PATCH 12/15] Removed unused param. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 2 +- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 7a3f3395bc51..a09085272c0e 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -406,7 +406,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (currentBladeIndex == 0) return; - this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex - 1, string.Empty); + this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex - 1); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 6c9deccfa60a..12ca33f85acc 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -205,7 +205,7 @@ public void NavigateUp() } } - public void MoveFocusToPreviousBlade(int index, string parentFolder) + public void MoveFocusToPreviousBlade(int index) { if (index < 0) return; @@ -219,6 +219,8 @@ public void MoveFocusToPreviousBlade(int index, string parentFolder) if (activeBladeColumnViewBase == null) return; + // QMK - This allows to deselect and reselect the parent folder, hence forcing the refocus. + // QMK - This is dirty as well, need to find better. var selectedItem = activeBladeColumnViewBase.FileList.SelectedItem; activeBladeColumnViewBase.FileList.SelectedItem = null; activeBladeColumnViewBase.FileList.SelectedItem = selectedItem; From 1e3897cd42fa22ec2a28be794a50325f5fca10c8 Mon Sep 17 00:00:00 2001 From: "Teissa \"Quaint Mako" <110472580+QuaintMako@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:57:29 +0100 Subject: [PATCH 13/15] Reworked the index processing. --- .../Views/LayoutModes/ColumnViewBase.xaml.cs | 2 +- .../Views/LayoutModes/ColumnViewBrowser.xaml.cs | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index a09085272c0e..225ece2bbcc7 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -406,7 +406,7 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (currentBladeIndex == 0) return; - this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex - 1); + this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex); e.Handled = true; } else if (e.Key == VirtualKey.Right) // Right arrow: switch focus to next column diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 12ca33f85acc..1f8b00cb8b61 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -205,14 +205,14 @@ public void NavigateUp() } } - public void MoveFocusToPreviousBlade(int index) + public void MoveFocusToPreviousBlade(int currentBladeIndex) { - if (index < 0) + if (currentBladeIndex <= 0) return; - DismissOtherBlades(index + 1); + DismissOtherBlades(currentBladeIndex); - var activeBlade = ColumnHost.ActiveBlades[index]; + var activeBlade = ColumnHost.ActiveBlades[currentBladeIndex - 1]; activeBlade.Focus(FocusState.Programmatic); var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); @@ -226,12 +226,12 @@ public void MoveFocusToPreviousBlade(int index) activeBladeColumnViewBase.FileList.SelectedItem = selectedItem; } - public void MoveFocusToNextBlade(int index) + public void MoveFocusToNextBlade(int currentBladeIndex) { - if (index >= ColumnHost.ActiveBlades.Count) + if (currentBladeIndex >= ColumnHost.ActiveBlades.Count) return; - var activeBlade = ColumnHost.ActiveBlades[index]; + var activeBlade = ColumnHost.ActiveBlades[currentBladeIndex]; activeBlade.Focus(FocusState.Programmatic); var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); From 3c9871476878f24001390400365eea47073f2960 Mon Sep 17 00:00:00 2001 From: Quaint Mako <110472580+QuaintMako@users.noreply.github.com> Date: Tue, 8 Nov 2022 18:28:02 +0100 Subject: [PATCH 14/15] Removed unnecessary comments --- src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 1f8b00cb8b61..19fb2e5c789d 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -219,8 +219,7 @@ public void MoveFocusToPreviousBlade(int currentBladeIndex) if (activeBladeColumnViewBase == null) return; - // QMK - This allows to deselect and reselect the parent folder, hence forcing the refocus. - // QMK - This is dirty as well, need to find better. + //This allows to deselect and reselect the parent folder, hence forcing the refocus. var selectedItem = activeBladeColumnViewBase.FileList.SelectedItem; activeBladeColumnViewBase.FileList.SelectedItem = null; activeBladeColumnViewBase.FileList.SelectedItem = selectedItem; From 11e7df228887a42b1ee1f641f6c4b05c72a013b9 Mon Sep 17 00:00:00 2001 From: Quaint Mako <110472580+QuaintMako@users.noreply.github.com> Date: Fri, 11 Nov 2022 18:08:29 +0100 Subject: [PATCH 15/15] Fixes given by PR review. --- src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs | 3 --- .../Views/LayoutModes/ColumnViewBrowser.xaml.cs | 10 ++++------ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs index 225ece2bbcc7..5b8374e6b200 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs @@ -403,9 +403,6 @@ private async void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e) return; var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams.Column : 0; - if (currentBladeIndex == 0) - return; - this.FindAscendant()?.MoveFocusToPreviousBlade(currentBladeIndex); e.Handled = true; } diff --git a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs index 19fb2e5c789d..480a212bfe97 100644 --- a/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs +++ b/src/Files.App/Views/LayoutModes/ColumnViewBrowser.xaml.cs @@ -216,7 +216,7 @@ public void MoveFocusToPreviousBlade(int currentBladeIndex) activeBlade.Focus(FocusState.Programmatic); var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); - if (activeBladeColumnViewBase == null) + if (activeBladeColumnViewBase is null) return; //This allows to deselect and reselect the parent folder, hence forcing the refocus. @@ -234,18 +234,16 @@ public void MoveFocusToNextBlade(int currentBladeIndex) activeBlade.Focus(FocusState.Programmatic); var activeBladeColumnViewBase = RetrieveBladeColumnViewBase(activeBlade); - if (activeBladeColumnViewBase != null) + if (activeBladeColumnViewBase is not null) activeBladeColumnViewBase.FileList.SelectedIndex = 0; } private ColumnViewBase? RetrieveBladeColumnViewBase(BladeItem blade) { - var activeBladeFrame = blade.Content as Frame; - if (activeBladeFrame == null) + if (blade.Content is not Frame activeBladeFrame) return null; - var activeBladePage = activeBladeFrame.Content as ColumnShellPage; - if (activeBladePage == null) + if (activeBladeFrame.Content is not ColumnShellPage activeBladePage) return null; return activeBladePage.SlimContentPage as ColumnViewBase;