Skip to content

Commit 50a82de

Browse files
authored
Fix: Fixed issue with opening items from search results in Columns View (#17657)
1 parent 0d6836e commit 50a82de

File tree

2 files changed

+72
-9
lines changed

2 files changed

+72
-9
lines changed

src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -458,18 +458,28 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv
458458

459459
if (ctrlPressed && !shiftPressed)
460460
{
461-
var folders = ParentShellPageInstance?.SlimContentPage.SelectedItems?.Where(file => file.PrimaryItemAttribute == StorageItemTypes.Folder);
462-
if (folders is not null)
461+
var folders = SelectedItems?.Where(file => file.PrimaryItemAttribute == StorageItemTypes.Folder);
462+
if (folders?.Any() ?? false)
463463
{
464464
foreach (ListedItem folder in folders)
465465
await NavigationHelpers.OpenPathInNewTab(folder.ItemPath);
466466
}
467467
}
468468
else if (ctrlPressed && shiftPressed)
469469
{
470-
var selectedFolder = SelectedItems?.FirstOrDefault(item => item.PrimaryItemAttribute == StorageItemTypes.Folder);
471-
if (selectedFolder is not null)
472-
NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolder);
470+
var selectedFolders = SelectedItems?.Where(item => item.PrimaryItemAttribute == StorageItemTypes.Folder);
471+
if (selectedFolders?.Count() == 1)
472+
{
473+
NavigationHelpers.OpenInSecondaryPane(ParentShellPageInstance, selectedFolders.First());
474+
}
475+
}
476+
else if (!ctrlPressed && !shiftPressed && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick)
477+
{
478+
if (SelectedItems?.Any() ?? false)
479+
{
480+
foreach (var selectedItem in SelectedItems)
481+
await OpenItem(selectedItem);
482+
}
473483
}
474484
}
475485
else if (e.Key == VirtualKey.Enter && e.KeyStatus.IsMenuKeyDown)
@@ -607,12 +617,34 @@ clickedItem is Microsoft.UI.Xaml.Shapes.Rectangle
607617
}
608618
}
609619

620+
private async Task OpenItem(ListedItem item)
621+
{
622+
if (!Commands.OpenItem.IsExecutable)
623+
{
624+
// Fallback if the command is not executable. It occurs only when search is performed from the columns view.
625+
var itemType = item.PrimaryItemAttribute == StorageItemTypes.Folder ? FilesystemItemType.Directory : FilesystemItemType.File;
626+
await NavigationHelpers.OpenPath(item.ItemPath, ParentShellPageInstance, itemType);
627+
}
628+
else
629+
{
630+
await Commands.OpenItem.ExecuteAsync();
631+
}
632+
}
633+
610634
private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
611635
{
612636
// Skip opening selected items if the double tap doesn't capture an item
613-
if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem item && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick)
614-
await Commands.OpenItem.ExecuteAsync();
615-
else if ((e.OriginalSource as FrameworkElement)?.DataContext is not ListedItem && UserSettingsService.FoldersSettingsService.DoubleClickToGoUp)
637+
var originalElement = e.OriginalSource as FrameworkElement;
638+
var dataContext = originalElement?.DataContext;
639+
640+
// Try to get the item from DataContext or from sender (ListView)
641+
ListedItem? item = dataContext as ListedItem;
642+
if (item == null && sender is ListView listView && listView.SelectedItem is ListedItem selectedItem)
643+
item = selectedItem;
644+
645+
if (item != null && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick)
646+
await OpenItem(item);
647+
else if (item == null && UserSettingsService.FoldersSettingsService.DoubleClickToGoUp)
616648
await Commands.NavigateUp.ExecuteAsync();
617649

618650
ResetRenameDoubleClick();

src/Files.App/Views/Shells/ColumnShellPage.xaml.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using CommunityToolkit.WinUI;
55
using Microsoft.UI.Xaml;
66
using Microsoft.UI.Xaml.Controls;
7+
using Microsoft.UI.Xaml.Media.Animation;
78
using Microsoft.UI.Xaml.Navigation;
89

910
namespace Files.App.Views.Shells
@@ -185,7 +186,37 @@ public override void NavigateToPath(string navigationPath, Type sourcePageType,
185186
if (string.IsNullOrEmpty(navigationPath))
186187
return;
187188

188-
this.FindAscendant<ColumnsLayoutPage>()?.SetSelectedPathOrNavigate(navigationPath, sourcePageType, navArgs);
189+
var columnsLayoutPage = this.FindAscendant<ColumnsLayoutPage>();
190+
if (columnsLayoutPage != null)
191+
{
192+
columnsLayoutPage.SetSelectedPathOrNavigate(navigationPath, sourcePageType, navArgs);
193+
}
194+
else
195+
{
196+
if (sourcePageType is null)
197+
sourcePageType = InstanceViewModel.FolderSettings.GetLayoutType(navigationPath);
198+
199+
if (navArgs is not null && navArgs.AssociatedTabInstance is not null)
200+
{
201+
ItemDisplayFrame.Navigate(
202+
sourcePageType,
203+
navArgs,
204+
new SuppressNavigationTransitionInfo());
205+
}
206+
else
207+
{
208+
var newNavArgs = new NavigationArguments()
209+
{
210+
NavPathParam = navigationPath,
211+
AssociatedTabInstance = this
212+
};
213+
214+
ItemDisplayFrame.Navigate(
215+
sourcePageType,
216+
newNavArgs,
217+
new SuppressNavigationTransitionInfo());
218+
}
219+
}
189220
}
190221

191222
public override void NavigateHome()

0 commit comments

Comments
 (0)