From 44c365a685407d5d3005e893a350b9ef5a6f1c7f Mon Sep 17 00:00:00 2001 From: Saravanan Ganapathi Date: Fri, 19 Sep 2025 14:38:03 +0530 Subject: [PATCH 1/3] Fix: Fixed issue where open action not working for search results started from Columns view --- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 33 +++++++++++++++++-- .../Views/Shells/ColumnShellPage.xaml.cs | 33 ++++++++++++++++++- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 37ca9860a302..d3fa049316b7 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -471,6 +471,12 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv if (selectedFolder is not null) NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolder); } + else if (!ctrlPressed && !shiftPressed && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) + { + var selectedItem = SelectedItems?.FirstOrDefault(); + if (selectedItem != null) + await OpenItem(selectedItem); + } } else if (e.Key == VirtualKey.Enter && e.KeyStatus.IsMenuKeyDown) { @@ -607,12 +613,33 @@ clickedItem is Microsoft.UI.Xaml.Shapes.Rectangle } } + private async Task OpenItem(ListedItem item) + { + if (!Commands.OpenItem.IsExecutable) + { + var itemType = item.PrimaryItemAttribute == StorageItemTypes.Folder ? FilesystemItemType.Directory : FilesystemItemType.File; + await NavigationHelpers.OpenPath(item.ItemPath, ParentShellPageInstance, itemType); + } + else + { + await Commands.OpenItem.ExecuteAsync(); + } + } + private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { // Skip opening selected items if the double tap doesn't capture an item - if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem item && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) - await Commands.OpenItem.ExecuteAsync(); - else if ((e.OriginalSource as FrameworkElement)?.DataContext is not ListedItem && UserSettingsService.FoldersSettingsService.DoubleClickToGoUp) + var originalElement = e.OriginalSource as FrameworkElement; + var dataContext = originalElement?.DataContext; + + // Try to get the item from DataContext or from sender (ListView) + ListedItem? item = dataContext as ListedItem; + if (item == null && sender is ListView listView && listView.SelectedItem is ListedItem selectedItem) + item = selectedItem; + + if (item != null && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) + await OpenItem(item); + else if (item == null && UserSettingsService.FoldersSettingsService.DoubleClickToGoUp) await Commands.NavigateUp.ExecuteAsync(); ResetRenameDoubleClick(); diff --git a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs index 1610d58ff0e0..84cc26f16e1a 100644 --- a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs +++ b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs @@ -4,6 +4,7 @@ using CommunityToolkit.WinUI; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Media.Animation; using Microsoft.UI.Xaml.Navigation; namespace Files.App.Views.Shells @@ -185,7 +186,37 @@ public override void NavigateToPath(string navigationPath, Type sourcePageType, if (string.IsNullOrEmpty(navigationPath)) return; - this.FindAscendant()?.SetSelectedPathOrNavigate(navigationPath, sourcePageType, navArgs); + var columnsLayoutPage = this.FindAscendant(); + if (columnsLayoutPage != null) + { + columnsLayoutPage.SetSelectedPathOrNavigate(navigationPath, sourcePageType, navArgs); + } + else + { + if (sourcePageType is null) + sourcePageType = InstanceViewModel.FolderSettings.GetLayoutType(navigationPath); + + if (navArgs is not null && navArgs.AssociatedTabInstance is not null) + { + ItemDisplayFrame.Navigate( + sourcePageType, + navArgs, + new SuppressNavigationTransitionInfo()); + } + else + { + var newNavArgs = new NavigationArguments() + { + NavPathParam = navigationPath, + AssociatedTabInstance = this + }; + + ItemDisplayFrame.Navigate( + sourcePageType, + newNavArgs, + new SuppressNavigationTransitionInfo()); + } + } } public override void NavigateHome() From cdea7e8adbbd8d6c8debcc649f1e125719f198ed Mon Sep 17 00:00:00 2001 From: Saravanan Ganapathi Date: Mon, 22 Sep 2025 12:12:02 +0530 Subject: [PATCH 2/3] Fix: Enable handling of multiple item selection with Enter key in Details/Search Result view (from Columns view) --- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index d3fa049316b7..453be999c8fd 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -458,8 +458,8 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv if (ctrlPressed && !shiftPressed) { - var folders = ParentShellPageInstance?.SlimContentPage.SelectedItems?.Where(file => file.PrimaryItemAttribute == StorageItemTypes.Folder); - if (folders is not null) + var folders = SelectedItems?.Where(file => file.PrimaryItemAttribute == StorageItemTypes.Folder); + if (folders?.Any() ?? false) { foreach (ListedItem folder in folders) await NavigationHelpers.OpenPathInNewTab(folder.ItemPath); @@ -467,15 +467,20 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv } else if (ctrlPressed && shiftPressed) { - var selectedFolder = SelectedItems?.FirstOrDefault(item => item.PrimaryItemAttribute == StorageItemTypes.Folder); - if (selectedFolder is not null) - NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolder); + var selectedFolders = SelectedItems?.Where(item => item.PrimaryItemAttribute == StorageItemTypes.Folder); + if (selectedFolders?.Any() ?? false) + { + foreach (var selectedFolder in selectedFolders) + NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolder); + } } else if (!ctrlPressed && !shiftPressed && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) { - var selectedItem = SelectedItems?.FirstOrDefault(); - if (selectedItem != null) - await OpenItem(selectedItem); + if (SelectedItems?.Any() ?? false) + { + foreach (var selectedItem in SelectedItems) + await OpenItem(selectedItem); + } } } else if (e.Key == VirtualKey.Enter && e.KeyStatus.IsMenuKeyDown) From 4ae7c82b3052014fcedd2cd6f753fac9a600386a Mon Sep 17 00:00:00 2001 From: Saravanan Ganapathi Date: Fri, 26 Sep 2025 12:01:44 +0530 Subject: [PATCH 3/3] Fix: Updated folder selection logic to ensure only one folder is processed when `ctrl` and `shift` keys are pressed to display on the secondary pane. Additional comment regarding the fallback approach when performing a search from the columns view. --- src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 453be999c8fd..1fe68703eeec 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -468,10 +468,9 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv else if (ctrlPressed && shiftPressed) { var selectedFolders = SelectedItems?.Where(item => item.PrimaryItemAttribute == StorageItemTypes.Folder); - if (selectedFolders?.Any() ?? false) + if (selectedFolders?.Count() == 1) { - foreach (var selectedFolder in selectedFolders) - NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolder); + NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolders.First()); } } else if (!ctrlPressed && !shiftPressed && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) @@ -622,6 +621,7 @@ private async Task OpenItem(ListedItem item) { if (!Commands.OpenItem.IsExecutable) { + // Fallback if the command is not executable. It occurs only when search is performed from the columns view. var itemType = item.PrimaryItemAttribute == StorageItemTypes.Folder ? FilesystemItemType.Directory : FilesystemItemType.File; await NavigationHelpers.OpenPath(item.ItemPath, ParentShellPageInstance, itemType); }