diff --git a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs index 62de8527bb8e..a5aed3d9c9b4 100644 --- a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs @@ -225,11 +225,30 @@ protected override void ZoomIn() RootZoom.IsZoomedInViewActive = true; } - protected virtual void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) + protected virtual void FileList_SelectionChanged(object sender, SelectionChangedEventArgs? e) { - SelectedItems = ListViewBase.SelectedItems.Cast().Where(x => x is not null).ToList(); + + if (e is null && SelectedItems?.Count == 0) + return; + + if (e is not null && e.AddedItems.Count == 0 && e.RemovedItems.Count == 0) + return; + + var selectedItems = ListViewBase.SelectedItems.Cast().Where(x => x is not null).ToList(); + + if (SelectedItems is not null && SelectedItems.SequenceEqual(selectedItems)) + return; + + SelectedItems = selectedItems; + + if (e is null) + return; + + OnSelectionChanged(e); } + protected abstract void OnSelectionChanged(SelectionChangedEventArgs e); + protected virtual void SelectionRectangle_SelectionEnded(object? sender, EventArgs e) { ListViewBase.Focus(FocusState.Programmatic); diff --git a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs index 51f7bd4ff314..d5cf968dc4fb 100644 --- a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs @@ -326,12 +326,8 @@ public override void Dispose() columnsOwner = null; } - protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) + protected override void OnSelectionChanged(SelectionChangedEventArgs e) { - base.FileList_SelectionChanged(sender, e); - if (e is null) - return; - if (e.AddedItems.Count > 0) columnsOwner?.HandleSelectionChange(this); @@ -353,8 +349,8 @@ protected override void FileList_SelectionChanged(object sender, SelectionChange return; // Open the selected folder if selected through tap - if (UserSettingsService.FoldersSettingsService.OpenFoldersInColumnsViewWithSingleClick.ShouldOpenWithSingleClick(lastPointerDeviceType) && - !isDraggingSelectionRectangle) ItemInvoked?.Invoke(new ColumnParam { Source = this, NavPathParam = (SelectedItem is IShortcutItem sht ? sht.TargetPath : SelectedItem.ItemPath), ListView = FileList }, EventArgs.Empty); + if (UserSettingsService.FoldersSettingsService.OpenFoldersInColumnsViewWithSingleClick.ShouldOpenWithSingleClick(lastPointerDeviceType)) + ItemInvoked?.Invoke(new ColumnParam { Source = this, NavPathParam = (SelectedItem is IShortcutItem sht ? sht.TargetPath : SelectedItem.ItemPath), ListView = FileList }, EventArgs.Empty); else CloseFolder(); } diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index ab3bb639884d..d6b84e528407 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -360,18 +360,13 @@ private void FolderSettings_LayoutModeChangeRequested(object? sender, LayoutMode } - protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) + protected override void OnSelectionChanged(SelectionChangedEventArgs e) { - SelectedItems = FileList.SelectedItems.Cast().Where(x => x is not null).ToList(); + foreach (var item in e.AddedItems) + SetCheckboxSelectionState(item); - if (e != null) - { - foreach (var item in e.AddedItems) - SetCheckboxSelectionState(item); - - foreach (var item in e.RemovedItems) - SetCheckboxSelectionState(item); - } + foreach (var item in e.RemovedItems) + SetCheckboxSelectionState(item); } override public void StartRenameItem() diff --git a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs index 6d04f4f4da68..e91c337616e5 100644 --- a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs @@ -338,18 +338,13 @@ private void FileList_Loaded(object sender, RoutedEventArgs e) ContentScroller = FileList.FindDescendant(x => x.Name == "ScrollViewer"); } - protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) + protected override void OnSelectionChanged(SelectionChangedEventArgs e) { - base.FileList_SelectionChanged(sender, e); + foreach (var item in e.AddedItems) + SetCheckboxSelectionState(item); - if (e != null) - { - foreach (var item in e.AddedItems) - SetCheckboxSelectionState(item); - - foreach (var item in e.RemovedItems) - SetCheckboxSelectionState(item); - } + foreach (var item in e.RemovedItems) + SetCheckboxSelectionState(item); } override public void StartRenameItem()