2
2
// Licensed under the MIT License. See the LICENSE.
3
3
4
4
using CommunityToolkit . WinUI . UI ;
5
- using Files . App . Utils . StorageItems ;
6
5
using Files . App . Helpers . ContextFlyouts ;
7
6
using Files . App . UserControls . Menus ;
8
7
using Microsoft . UI . Xaml ;
@@ -35,6 +34,8 @@ public abstract class BaseLayout : Page, IBaseLayout, INotifyPropertyChanged
35
34
{
36
35
private readonly DispatcherQueueTimer jumpTimer ;
37
36
37
+ private readonly DragEventHandler Item_DragOverEventHandler ;
38
+
38
39
protected IUserSettingsService UserSettingsService { get ; } = Ioc . Default . GetService < IUserSettingsService > ( ) ! ;
39
40
40
41
protected IFileTagsSettingsService FileTagsSettingsService { get ; } = Ioc . Default . GetService < IFileTagsSettingsService > ( ) ! ;
@@ -263,6 +264,8 @@ public BaseLayout()
263
264
jumpTimer . Interval = TimeSpan . FromSeconds ( 0.8 ) ;
264
265
jumpTimer . Tick += JumpTimer_Tick ;
265
266
267
+ Item_DragOverEventHandler = new DragEventHandler ( Item_DragOver ) ;
268
+
266
269
SelectedItemsPropertiesViewModel = new SelectedItemsPropertiesViewModel ( ) ;
267
270
DirectoryPropertiesViewModel = new DirectoryPropertiesViewModel ( ) ;
268
271
@@ -944,7 +947,7 @@ private void Item_DragLeave(object sender, DragEventArgs e)
944
947
dragOverItem = null ;
945
948
}
946
949
947
- protected async void Item_DragOver ( object sender , DragEventArgs e )
950
+ private async void Item_DragOver ( object sender , DragEventArgs e )
948
951
{
949
952
var item = GetItemFromElement ( sender ) ;
950
953
if ( item is null )
@@ -956,23 +959,6 @@ protected async void Item_DragOver(object sender, DragEventArgs e)
956
959
{
957
960
deferral = e . GetDeferral ( ) ;
958
961
959
- if ( dragOverItem != item )
960
- {
961
- dragOverItem = item ;
962
- dragOverTimer . Stop ( ) ;
963
- dragOverTimer . Debounce ( ( ) =>
964
- {
965
- if ( dragOverItem is not null && ! dragOverItem . IsExecutable )
966
- {
967
- dragOverTimer . Stop ( ) ;
968
- ItemManipulationModel . SetSelectedItem ( dragOverItem ) ;
969
- dragOverItem = null ;
970
- _ = NavigationHelpers . OpenSelectedItems ( ParentShellPageInstance ! , false ) ;
971
- }
972
- } ,
973
- TimeSpan . FromMilliseconds ( 1000 ) , false ) ;
974
- }
975
-
976
962
if ( FilesystemHelpers . HasDraggedStorageItems ( e . DataView ) )
977
963
{
978
964
e . Handled = true ;
@@ -1030,14 +1016,35 @@ protected async void Item_DragOver(object sender, DragEventArgs e)
1030
1016
}
1031
1017
}
1032
1018
}
1019
+
1020
+ if ( dragOverItem != item )
1021
+ {
1022
+ dragOverItem = item ;
1023
+ dragOverTimer . Stop ( ) ;
1024
+
1025
+ if ( e . AcceptedOperation != DataPackageOperation . None )
1026
+ {
1027
+ dragOverTimer . Debounce ( ( ) =>
1028
+ {
1029
+ if ( dragOverItem is not null && ! dragOverItem . IsExecutable )
1030
+ {
1031
+ dragOverTimer . Stop ( ) ;
1032
+ ItemManipulationModel . SetSelectedItem ( dragOverItem ) ;
1033
+ dragOverItem = null ;
1034
+ _ = NavigationHelpers . OpenSelectedItems ( ParentShellPageInstance ! , false ) ;
1035
+ }
1036
+ } ,
1037
+ TimeSpan . FromMilliseconds ( 1000 ) , false ) ;
1038
+ }
1039
+ }
1033
1040
}
1034
1041
finally
1035
1042
{
1036
1043
deferral ? . Complete ( ) ;
1037
1044
}
1038
1045
}
1039
1046
1040
- protected async void Item_Drop ( object sender , DragEventArgs e )
1047
+ private async void Item_Drop ( object sender , DragEventArgs e )
1041
1048
{
1042
1049
var deferral = e . GetDeferral ( ) ;
1043
1050
@@ -1188,26 +1195,25 @@ protected void FileListItem_RightTapped(object sender, RightTappedRoutedEventArg
1188
1195
if ( rightClickedItem is not null && ! ( ( SelectorItem ) sender ) . IsSelected )
1189
1196
ItemManipulationModel . SetSelectedItem ( rightClickedItem ) ;
1190
1197
}
1191
-
1192
- protected void InitializeDrag ( UIElement containter , ListedItem item )
1198
+ protected void InitializeDrag ( UIElement container , ListedItem item )
1193
1199
{
1194
1200
if ( item is null )
1195
1201
return ;
1196
1202
1197
- UninitializeDrag ( containter ) ;
1203
+ UninitializeDrag ( container ) ;
1198
1204
if ( ( item . PrimaryItemAttribute == StorageItemTypes . Folder && ! RecycleBinHelpers . IsPathUnderRecycleBin ( item . ItemPath ) ) || item . IsExecutable )
1199
1205
{
1200
- containter . AllowDrop = true ;
1201
- containter . DragOver += Item_DragOver ;
1202
- containter . DragLeave += Item_DragLeave ;
1203
- containter . Drop += Item_Drop ;
1206
+ container . AllowDrop = true ;
1207
+ container . AddHandler ( UIElement . DragOverEvent , Item_DragOverEventHandler , true ) ;
1208
+ container . DragLeave += Item_DragLeave ;
1209
+ container . Drop += Item_Drop ;
1204
1210
}
1205
1211
}
1206
1212
1207
1213
protected void UninitializeDrag ( UIElement element )
1208
1214
{
1209
1215
element . AllowDrop = false ;
1210
- element . DragOver -= Item_DragOver ;
1216
+ element . RemoveHandler ( UIElement . DragOverEvent , Item_DragOverEventHandler ) ;
1211
1217
element . DragLeave -= Item_DragLeave ;
1212
1218
element . Drop -= Item_Drop ;
1213
1219
}
0 commit comments