19
19
using Windows . Storage ;
20
20
using Windows . System ;
21
21
using Windows . UI . Core ;
22
+ using DispatcherQueueTimer = Microsoft . UI . Dispatching . DispatcherQueueTimer ;
22
23
using static Files . App . Constants ;
24
+ using Microsoft . UI . Dispatching ;
23
25
24
26
namespace Files . App . Views . LayoutModes
25
27
{
@@ -31,6 +33,8 @@ public sealed partial class ColumnViewBase : StandardViewBase
31
33
32
34
protected override SemanticZoom RootZoom => RootGridZoom ;
33
35
36
+ private readonly DispatcherQueueTimer doubleClickTimer ;
37
+
34
38
private ColumnViewBrowser ? columnsOwner ;
35
39
36
40
private ListViewItem ? openedFolderPresenter ;
@@ -42,6 +46,8 @@ public ColumnViewBase() : base()
42
46
selectionRectangle . SelectionEnded += SelectionRectangle_SelectionEnded ;
43
47
ItemInvoked += ColumnViewBase_ItemInvoked ;
44
48
GotFocus += ColumnViewBase_GotFocus ;
49
+
50
+ doubleClickTimer = DispatcherQueue . CreateTimer ( ) ;
45
51
}
46
52
47
53
private void ColumnViewBase_GotFocus ( object sender , RoutedEventArgs e )
@@ -234,7 +240,7 @@ private void FileList_PreviewKeyUp(object sender, KeyRoutedEventArgs e)
234
240
{
235
241
// Open selected directory
236
242
if ( IsItemSelected && SelectedItem ? . PrimaryItemAttribute == StorageItemTypes . Folder )
237
- ItemInvoked ? . Invoke ( new ColumnParam { NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
243
+ ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
238
244
}
239
245
240
246
protected override async void FileList_PreviewKeyDown ( object sender , KeyRoutedEventArgs e )
@@ -259,7 +265,7 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv
259
265
e . Handled = true ;
260
266
261
267
if ( IsItemSelected && SelectedItem . PrimaryItemAttribute == StorageItemTypes . Folder )
262
- ItemInvoked ? . Invoke ( new ColumnParam { NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
268
+ ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( SelectedItem is ShortcutItem sht ? sht . TargetPath : SelectedItem . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
263
269
}
264
270
else if ( e . Key == VirtualKey . Enter && e . KeyStatus . IsMenuKeyDown )
265
271
{
@@ -316,6 +322,8 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv
316
322
317
323
private void FileList_DoubleTapped ( object sender , DoubleTappedRoutedEventArgs e )
318
324
{
325
+ doubleClickTimer . Stop ( ) ;
326
+
319
327
var clickedItem = e . OriginalSource as FrameworkElement ;
320
328
321
329
if ( clickedItem ? . DataContext is ListedItem item )
@@ -328,7 +336,7 @@ private void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
328
336
break ;
329
337
case StorageItemTypes . Folder :
330
338
if ( ! UserSettingsService . FoldersSettingsService . ColumnLayoutOpenFoldersWithOneClick )
331
- ItemInvoked ? . Invoke ( new ColumnParam { NavPathParam = ( item is ShortcutItem sht ? sht . TargetPath : item . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
339
+ ItemInvoked ? . Invoke ( new ColumnParam { Source = this , NavPathParam = ( item is ShortcutItem sht ? sht . TargetPath : item . ItemPath ) , ListView = FileList } , EventArgs . Empty ) ;
332
340
break ;
333
341
default :
334
342
if ( UserSettingsService . FoldersSettingsService . DoubleClickToGoUp )
@@ -405,24 +413,36 @@ private async void FileList_ItemTapped(object sender, TappedRoutedEventArgs e)
405
413
ItemInvoked ? . Invoke (
406
414
new ColumnParam
407
415
{
416
+ Source = this ,
408
417
NavPathParam = ( item is ShortcutItem sht ? sht . TargetPath : item ! . ItemPath ) ,
409
418
ListView = FileList
410
419
} ,
411
420
EventArgs . Empty ) ;
412
421
}
413
422
else if ( ! IsRenamingItem && ( isItemFile || isItemFolder ) )
414
423
{
415
- ClearOpenedFolderSelectionIndicator ( ) ;
416
-
417
- var itemPath = item ! . ItemPath . EndsWith ( '\\ ' )
418
- ? item . ItemPath . Substring ( 0 , item . ItemPath . Length - 1 )
419
- : item . ItemPath ;
420
-
421
- ItemTapped ? . Invoke ( new ColumnParam { NavPathParam = Path . GetDirectoryName ( itemPath ) , ListView = FileList } , EventArgs . Empty ) ;
424
+ CheckDoubleClick ( item ! ) ;
422
425
}
423
426
}
424
427
}
425
428
429
+ private void CheckDoubleClick ( ListedItem item )
430
+ {
431
+ doubleClickTimer . Debounce ( ( ) =>
432
+ {
433
+ ClearOpenedFolderSelectionIndicator ( ) ;
434
+
435
+ var itemPath = item ! . ItemPath . EndsWith ( '\\ ' )
436
+ ? item . ItemPath . Substring ( 0 , item . ItemPath . Length - 1 )
437
+ : item . ItemPath ;
438
+
439
+ ItemTapped ? . Invoke ( new ColumnParam { Source = this , NavPathParam = Path . GetDirectoryName ( itemPath ) , ListView = FileList } , EventArgs . Empty ) ;
440
+
441
+ doubleClickTimer . Stop ( ) ;
442
+ } ,
443
+ TimeSpan . FromMilliseconds ( 200 ) ) ;
444
+ }
445
+
426
446
private void Grid_Loaded ( object sender , RoutedEventArgs e )
427
447
{
428
448
var itemContainer = ( sender as Grid ) ? . FindAscendant < ListViewItem > ( ) ;
0 commit comments