Skip to content

Commit dff8f65

Browse files
authored
Fix: Fixed an issue where folders would open when using the selection rectangle in Columns Layout (#13598)
1 parent 217a382 commit dff8f65

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

src/Files.App/Views/LayoutModes/ColumnViewBase.xaml.cs

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)