@@ -36,10 +36,14 @@ public sealed partial class ColumnViewBase : StandardViewBase
3636
3737 private ListViewItem ? openedFolderPresenter ;
3838
39+ // Indicates if the selection rectangle is currently being dragged
40+ private bool isDraggingSelectionRectangle = false ;
41+
3942 public ColumnViewBase ( ) : base ( )
4043 {
4144 InitializeComponent ( ) ;
4245 var selectionRectangle = RectangleSelection . Create ( FileList , SelectionRectangle , FileList_SelectionChanged ) ;
46+ selectionRectangle . SelectionStarted += SelectionRectangle_SelectionStarted ;
4347 selectionRectangle . SelectionEnded += SelectionRectangle_SelectionEnded ;
4448 ItemInvoked += ColumnViewBase_ItemInvoked ;
4549 GotFocus += ColumnViewBase_GotFocus ;
@@ -211,17 +215,29 @@ protected override void FileList_SelectionChanged(object sender, SelectionChange
211215 presenter ! . Background = this . Resources [ "ListViewItemBackgroundSelected" ] as SolidColorBrush ;
212216 }
213217
214- if ( SelectedItems ? . Count == 1 && SelectedItem ? . PrimaryItemAttribute is StorageItemTypes . Folder && openedFolderPresenter != FileList . ContainerFromItem ( SelectedItem ) )
218+ if ( SelectedItems ? . Count == 1 && SelectedItem ? . PrimaryItemAttribute is StorageItemTypes . Folder )
215219 {
216- if ( UserSettingsService . FoldersSettingsService . ColumnLayoutOpenFoldersWithOneClick )
220+ // // Prevents the first selected folder from opening if the user is currently dragging the selection rectangle (#13418)
221+ if ( isDraggingSelectionRectangle )
222+ {
223+ CloseFolder ( ) ;
224+ return ;
225+ }
226+
227+ if ( openedFolderPresenter == FileList . ContainerFromItem ( SelectedItem ) )
228+ return ;
229+
230+ // Open the selected folder if selected through tap
231+ if ( UserSettingsService . FoldersSettingsService . ColumnLayoutOpenFoldersWithOneClick && ! isDraggingSelectionRectangle )
217232 ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
218233 else
219234 CloseFolder ( ) ;
220235 }
221236 else if ( SelectedItems ? . Count > 1
222237 || SelectedItem ? . PrimaryItemAttribute is StorageItemTypes . File
223- || openedFolderPresenter != null && ParentShellPageInstance != null &&
224- ! ParentShellPageInstance . FilesystemViewModel . FilesAndFolders . Contains ( FileList . ItemFromContainer ( openedFolderPresenter ) ) )
238+ || openedFolderPresenter != null && ParentShellPageInstance != null
239+ && ! ParentShellPageInstance . FilesystemViewModel . FilesAndFolders . Contains ( FileList . ItemFromContainer ( openedFolderPresenter ) )
240+ && ! isDraggingSelectionRectangle ) // Skip closing if dragging since nothing should be open
225241 {
226242 CloseFolder ( ) ;
227243 }
@@ -482,6 +498,23 @@ protected override void BaseFolderSettings_LayoutModeChangeRequested(object? sen
482498 }
483499 }
484500
501+ protected override void SelectionRectangle_SelectionEnded ( object ? sender , EventArgs e )
502+ {
503+ isDraggingSelectionRectangle = false ;
504+ // Open selected folder (if only one folder is selected) after the user finishes dragging the selection rectangle
505+ if ( SelectedItems ? . Count is 1
506+ && SelectedItem is not null
507+ && SelectedItem . PrimaryItemAttribute is StorageItemTypes . Folder )
508+ ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
509+
510+ base . SelectionRectangle_SelectionEnded ( sender , e ) ;
511+ }
512+
513+ private void SelectionRectangle_SelectionStarted ( object sender , EventArgs e )
514+ {
515+ isDraggingSelectionRectangle = true ;
516+ }
517+
485518 internal void ClearSelectionIndicator ( )
486519 {
487520 LockPreviewPaneContent = true ;
0 commit comments