@@ -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 ( ) ;
0 commit comments