Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 40 additions & 8 deletions src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -458,18 +458,29 @@ 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);
}
}
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)
{
if (SelectedItems?.Any() ?? false)
{
foreach (var selectedItem in SelectedItems)
await OpenItem(selectedItem);
}
}
}
else if (e.Key == VirtualKey.Enter && e.KeyStatus.IsMenuKeyDown)
Expand Down Expand Up @@ -607,12 +618,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();
Expand Down
33 changes: 32 additions & 1 deletion src/Files.App/Views/Shells/ColumnShellPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -185,7 +186,37 @@ public override void NavigateToPath(string navigationPath, Type sourcePageType,
if (string.IsNullOrEmpty(navigationPath))
return;

this.FindAscendant<ColumnsLayoutPage>()?.SetSelectedPathOrNavigate(navigationPath, sourcePageType, navArgs);
var columnsLayoutPage = this.FindAscendant<ColumnsLayoutPage>();
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()
Expand Down
Loading