Skip to content

Commit bb4f748

Browse files
authored
Code Quality: Reduce redundant SelectedItems updates in SelectionChanged (#18495)
1 parent ea5ca26 commit bb4f748

4 files changed

Lines changed: 34 additions & 29 deletions

File tree

src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,30 @@ protected override void ZoomIn()
225225
RootZoom.IsZoomedInViewActive = true;
226226
}
227227

228-
protected virtual void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e)
228+
protected virtual void FileList_SelectionChanged(object sender, SelectionChangedEventArgs? e)
229229
{
230-
SelectedItems = ListViewBase.SelectedItems.Cast<ListedItem>().Where(x => x is not null).ToList();
230+
231+
if (e is null && SelectedItems?.Count == 0)
232+
return;
233+
234+
if (e is not null && e.AddedItems.Count == 0 && e.RemovedItems.Count == 0)
235+
return;
236+
237+
var selectedItems = ListViewBase.SelectedItems.Cast<ListedItem>().Where(x => x is not null).ToList();
238+
239+
if (SelectedItems is not null && SelectedItems.SequenceEqual(selectedItems))
240+
return;
241+
242+
SelectedItems = selectedItems;
243+
244+
if (e is null)
245+
return;
246+
247+
OnSelectionChanged(e);
231248
}
232249

250+
protected abstract void OnSelectionChanged(SelectionChangedEventArgs e);
251+
233252
protected virtual void SelectionRectangle_SelectionEnded(object? sender, EventArgs e)
234253
{
235254
ListViewBase.Focus(FocusState.Programmatic);

src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,8 @@ public override void Dispose()
326326
columnsOwner = null;
327327
}
328328

329-
protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e)
329+
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
330330
{
331-
base.FileList_SelectionChanged(sender, e);
332-
if (e is null)
333-
return;
334-
335331
if (e.AddedItems.Count > 0)
336332
columnsOwner?.HandleSelectionChange(this);
337333

@@ -353,8 +349,8 @@ protected override void FileList_SelectionChanged(object sender, SelectionChange
353349
return;
354350

355351
// Open the selected folder if selected through tap
356-
if (UserSettingsService.FoldersSettingsService.OpenFoldersInColumnsViewWithSingleClick.ShouldOpenWithSingleClick(lastPointerDeviceType) &&
357-
!isDraggingSelectionRectangle) ItemInvoked?.Invoke(new ColumnParam { Source = this, NavPathParam = (SelectedItem is IShortcutItem sht ? sht.TargetPath : SelectedItem.ItemPath), ListView = FileList }, EventArgs.Empty);
352+
if (UserSettingsService.FoldersSettingsService.OpenFoldersInColumnsViewWithSingleClick.ShouldOpenWithSingleClick(lastPointerDeviceType))
353+
ItemInvoked?.Invoke(new ColumnParam { Source = this, NavPathParam = (SelectedItem is IShortcutItem sht ? sht.TargetPath : SelectedItem.ItemPath), ListView = FileList }, EventArgs.Empty);
358354
else
359355
CloseFolder();
360356
}

src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -360,18 +360,13 @@ private void FolderSettings_LayoutModeChangeRequested(object? sender, LayoutMode
360360

361361
}
362362

363-
protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e)
363+
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
364364
{
365-
SelectedItems = FileList.SelectedItems.Cast<ListedItem>().Where(x => x is not null).ToList();
365+
foreach (var item in e.AddedItems)
366+
SetCheckboxSelectionState(item);
366367

367-
if (e != null)
368-
{
369-
foreach (var item in e.AddedItems)
370-
SetCheckboxSelectionState(item);
371-
372-
foreach (var item in e.RemovedItems)
373-
SetCheckboxSelectionState(item);
374-
}
368+
foreach (var item in e.RemovedItems)
369+
SetCheckboxSelectionState(item);
375370
}
376371

377372
override public void StartRenameItem()

src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -338,18 +338,13 @@ private void FileList_Loaded(object sender, RoutedEventArgs e)
338338
ContentScroller = FileList.FindDescendant<ScrollViewer>(x => x.Name == "ScrollViewer");
339339
}
340340

341-
protected override void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e)
341+
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
342342
{
343-
base.FileList_SelectionChanged(sender, e);
343+
foreach (var item in e.AddedItems)
344+
SetCheckboxSelectionState(item);
344345

345-
if (e != null)
346-
{
347-
foreach (var item in e.AddedItems)
348-
SetCheckboxSelectionState(item);
349-
350-
foreach (var item in e.RemovedItems)
351-
SetCheckboxSelectionState(item);
352-
}
346+
foreach (var item in e.RemovedItems)
347+
SetCheckboxSelectionState(item);
353348
}
354349

355350
override public void StartRenameItem()

0 commit comments

Comments
 (0)