@@ -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