@@ -36,10 +36,14 @@ public sealed partial class ColumnViewBase : StandardViewBase
36
36
37
37
private ListViewItem ? openedFolderPresenter ;
38
38
39
+ // Indicates if the selection rectangle is currently being dragged
40
+ private bool isDraggingSelectionRectangle = false ;
41
+
39
42
public ColumnViewBase ( ) : base ( )
40
43
{
41
44
InitializeComponent ( ) ;
42
45
var selectionRectangle = RectangleSelection . Create ( FileList , SelectionRectangle , FileList_SelectionChanged ) ;
46
+ selectionRectangle . SelectionStarted += SelectionRectangle_SelectionStarted ;
43
47
selectionRectangle . SelectionEnded += SelectionRectangle_SelectionEnded ;
44
48
ItemInvoked += ColumnViewBase_ItemInvoked ;
45
49
GotFocus += ColumnViewBase_GotFocus ;
@@ -211,17 +215,29 @@ protected override void FileList_SelectionChanged(object sender, SelectionChange
211
215
presenter ! . Background = this . Resources [ "ListViewItemBackgroundSelected" ] as SolidColorBrush ;
212
216
}
213
217
214
- if ( SelectedItems ? . Count == 1 && SelectedItem ? . PrimaryItemAttribute is StorageItemTypes . Folder && openedFolderPresenter != FileList . ContainerFromItem ( SelectedItem ) )
218
+ if ( SelectedItems ? . Count == 1 && SelectedItem ? . PrimaryItemAttribute is StorageItemTypes . Folder )
215
219
{
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 )
217
232
ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
218
233
else
219
234
CloseFolder ( ) ;
220
235
}
221
236
else if ( SelectedItems ? . Count > 1
222
237
|| 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
225
241
{
226
242
CloseFolder ( ) ;
227
243
}
@@ -482,6 +498,23 @@ protected override void BaseFolderSettings_LayoutModeChangeRequested(object? sen
482
498
}
483
499
}
484
500
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
+
485
518
internal void ClearSelectionIndicator ( )
486
519
{
487
520
LockPreviewPaneContent = true ;
0 commit comments