@@ -458,18 +458,28 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv
458
458
459
459
if ( ctrlPressed && ! shiftPressed )
460
460
{
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 )
463
463
{
464
464
foreach ( ListedItem folder in folders )
465
465
await NavigationHelpers . OpenPathInNewTab ( folder . ItemPath ) ;
466
466
}
467
467
}
468
468
else if ( ctrlPressed && shiftPressed )
469
469
{
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
+ }
473
483
}
474
484
}
475
485
else if ( e . Key == VirtualKey . Enter && e . KeyStatus . IsMenuKeyDown )
@@ -607,12 +617,34 @@ clickedItem is Microsoft.UI.Xaml.Shapes.Rectangle
607
617
}
608
618
}
609
619
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
+
610
634
private async void FileList_DoubleTapped ( object sender , DoubleTappedRoutedEventArgs e )
611
635
{
612
636
// 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 )
616
648
await Commands . NavigateUp . ExecuteAsync ( ) ;
617
649
618
650
ResetRenameDoubleClick ( ) ;
0 commit comments