Skip to content

Commit 79220aa

Browse files
Fix: Don't clear multiselect on hover if the item is part of the selection (#11873)
1 parent 8d6680e commit 79220aa

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

src/Files.App/BaseLayout.cs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,46 +1101,46 @@ protected internal void FileListItem_PointerEntered(object sender, PointerRouted
11011101
if (!UserSettingsService.FoldersSettingsService.SelectFilesOnHover)
11021102
return;
11031103

1104-
var hovered = GetItemFromElement(sender);
1105-
if (hovered != hoveredItem)
1104+
hoveredItem = GetItemFromElement(sender);
1105+
1106+
hoverTimer.Stop();
1107+
hoverTimer.Debounce(() =>
11061108
{
1107-
hoveredItem = hovered;
1109+
if (hoveredItem is null)
1110+
return;
1111+
11081112
hoverTimer.Stop();
1109-
hoverTimer.Debounce(() =>
1113+
1114+
// selection of multiple individual items with control
1115+
if (e.KeyModifiers == VirtualKeyModifiers.Control &&
1116+
selectedItems is not null)
11101117
{
1111-
if (hoveredItem is not null)
1118+
ItemManipulationModel.AddSelectedItem(hoveredItem);
1119+
}
1120+
// selection of a range of items with shift
1121+
else if (e.KeyModifiers == VirtualKeyModifiers.Shift &&
1122+
selectedItems is not null &&
1123+
selectedItems.Any())
1124+
{
1125+
var last = selectedItems.Last();
1126+
byte found = 0;
1127+
for (int i = 0; i < ItemsControl.Items.Count && found != 2; i++)
11121128
{
1113-
hoverTimer.Stop();
1114-
if (e.KeyModifiers == VirtualKeyModifiers.Control &&
1115-
selectedItems is not null)
1116-
{
1117-
ItemManipulationModel.AddSelectedItem(hoveredItem);
1118-
}
1119-
else if (e.KeyModifiers == VirtualKeyModifiers.Shift &&
1120-
selectedItems is not null &&
1121-
selectedItems.Any())
1122-
{
1123-
var last = selectedItems.Last();
1124-
byte found = 0;
1125-
for (int i = 0; i < ItemsControl.Items.Count && found != 2; i++)
1126-
{
1127-
if (ItemsControl.Items[i] == last || ItemsControl.Items[i] == hoveredItem)
1128-
found++;
1129+
if (ItemsControl.Items[i] == last || ItemsControl.Items[i] == hoveredItem)
1130+
found++;
11291131

1130-
if (found != 0 && !selectedItems.Contains(ItemsControl.Items[i]))
1131-
ItemManipulationModel.AddSelectedItem((ListedItem)ItemsControl.Items[i]);
1132-
}
1133-
}
1134-
else
1135-
{
1136-
ItemManipulationModel.SetSelectedItem(hoveredItem);
1137-
}
1138-
1139-
hoveredItem = null;
1132+
if (found != 0 && !selectedItems.Contains(ItemsControl.Items[i]))
1133+
ItemManipulationModel.AddSelectedItem((ListedItem)ItemsControl.Items[i]);
11401134
}
1141-
},
1142-
TimeSpan.FromMilliseconds(600), false);
1143-
}
1135+
}
1136+
// avoid resetting the selection if multiple items are selected
1137+
else if (SelectedItems is null ||
1138+
SelectedItems.Count <= 1)
1139+
{
1140+
ItemManipulationModel.SetSelectedItem(hoveredItem);
1141+
}
1142+
},
1143+
TimeSpan.FromMilliseconds(600), false);
11441144
}
11451145

11461146
protected internal void FileListItem_PointerExited(object sender, PointerRoutedEventArgs e)

0 commit comments

Comments
 (0)