Skip to content

Commit 63490f5

Browse files
committed
Reduce code duplication
1 parent b29f042 commit 63490f5

File tree

5 files changed

+24
-42
lines changed

5 files changed

+24
-42
lines changed

src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
using Microsoft.UI.Xaml.Controls;
1010
using Microsoft.UI.Xaml.Media.Imaging;
1111
using System.IO;
12+
using Vanara.PInvoke;
13+
using Windows.ApplicationModel.DataTransfer;
1214
using Windows.System;
1315
using Windows.UI.Core;
1416
using Windows.Win32;
1517
using Windows.Win32.UI.WindowsAndMessaging;
18+
using WinRT;
1619

1720
namespace Files.App.Helpers
1821
{
@@ -416,5 +419,20 @@ public static void AddItemsToOverflowMenu(AppBarButton? overflowItem, ContextMen
416419
}
417420
}
418421
}
422+
423+
public static void InvokeRightButtonDropMenu(string folderPath, DataPackageView dataView, DataPackageOperation acceptedOperation)
424+
{
425+
using var sf = new Vanara.Windows.Shell.ShellItem(folderPath);
426+
if (!sf.IsFolder)
427+
return;
428+
429+
PInvoke.GetCursorPos(out var dropPoint);
430+
431+
var dataObjectProvider = dataView.As<Shell32.IDataObjectProvider>();
432+
var iddo = dataObjectProvider.GetDataObject();
433+
var dropTarget = sf.GetHandler<Ole32.IDropTarget>(Shell32.BHID.BHID_SFViewObject);
434+
dropTarget.DragEnter(iddo, MouseButtonState.MK_RBUTTON, new() { X = dropPoint.X, Y = dropPoint.Y }, (Ole32.DROPEFFECT)acceptedOperation);
435+
dropTarget.Drop(iddo, MouseButtonState.MK_RBUTTON, new() { X = dropPoint.X, Y = dropPoint.Y }, (Ole32.DROPEFFECT)acceptedOperation);
436+
}
419437
}
420438
}

src/Files.App/ViewModels/Layouts/BaseLayoutViewModel.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
using System.IO;
88
using System.Runtime.InteropServices;
99
using System.Windows.Input;
10-
using Vanara.PInvoke;
1110
using Windows.ApplicationModel.DataTransfer;
1211
using Windows.ApplicationModel.DataTransfer.DragDrop;
1312
using Windows.Storage;
1413
using Windows.System;
15-
using WinRT;
1614

1715
namespace Files.App.ViewModels.Layouts
1816
{
@@ -191,13 +189,7 @@ public async Task DropAsync(DragEventArgs e)
191189
{
192190
if ((bool)e.DataView.Properties.GetValueOrDefault("dragRightButton", false))
193191
{
194-
Windows.Win32.PInvoke.GetCursorPos(out var dropPoint);
195-
using var sf = new Vanara.Windows.Shell.ShellFolder(_associatedInstance.ShellViewModel.WorkingDirectory);
196-
var dataObjectProvider = e.DataView.As<Shell32.IDataObjectProvider>();
197-
var iddo = dataObjectProvider.GetDataObject();
198-
var dropTarget = sf.GetViewObject<Ole32.IDropTarget>(HWND.NULL);
199-
dropTarget.DragEnter(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
200-
dropTarget.Drop(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
192+
SafetyExtensions.IgnoreExceptions(() => ShellContextFlyoutFactory.InvokeRightButtonDropMenu(_associatedInstance.ShellViewModel.WorkingDirectory, e.DataView, e.AcceptedOperation));
201193
}
202194
else
203195
{

src/Files.App/ViewModels/UserControls/SidebarViewModel.cs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,11 @@
1111
using System.Collections.Specialized;
1212
using System.IO;
1313
using System.Windows.Input;
14-
using Vanara.PInvoke;
1514
using Windows.ApplicationModel.DataTransfer;
1615
using Windows.ApplicationModel.DataTransfer.DragDrop;
1716
using Windows.Storage;
1817
using Windows.System;
1918
using Windows.UI.Core;
20-
using WinRT;
2119

2220
namespace Files.App.ViewModels.UserControls
2321
{
@@ -1255,13 +1253,7 @@ private async Task HandleLocationItemDroppedAsync(LocationItem locationItem, Ite
12551253
}
12561254
else if ((bool)args.DroppedItem.Properties.GetValueOrDefault("dragRightButton", false))
12571255
{
1258-
Windows.Win32.PInvoke.GetCursorPos(out var dropPoint);
1259-
using var sf = new Vanara.Windows.Shell.ShellFolder(locationItem.Path);
1260-
var dataObjectProvider = args.DroppedItem.As<Shell32.IDataObjectProvider>();
1261-
var iddo = dataObjectProvider.GetDataObject();
1262-
var dropTarget = sf.GetViewObject<Ole32.IDropTarget>(HWND.NULL);
1263-
dropTarget.DragEnter(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)args.RawEvent.AcceptedOperation);
1264-
dropTarget.Drop(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)args.RawEvent.AcceptedOperation);
1256+
SafetyExtensions.IgnoreExceptions(() => ShellContextFlyoutFactory.InvokeRightButtonDropMenu(locationItem.Path, args.DroppedItem, args.RawEvent.AcceptedOperation));
12651257
}
12661258
else
12671259
{
@@ -1274,13 +1266,7 @@ private Task<ReturnResult> HandleDriveItemDroppedAsync(DriveItem driveItem, Item
12741266
{
12751267
if ((bool)args.DroppedItem.Properties.GetValueOrDefault("dragRightButton", false))
12761268
{
1277-
Windows.Win32.PInvoke.GetCursorPos(out var dropPoint);
1278-
using var sf = new Vanara.Windows.Shell.ShellFolder(driveItem.Path);
1279-
var dataObjectProvider = args.DroppedItem.As<Shell32.IDataObjectProvider>();
1280-
var iddo = dataObjectProvider.GetDataObject();
1281-
var dropTarget = sf.GetViewObject<Ole32.IDropTarget>(HWND.NULL);
1282-
dropTarget.DragEnter(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)args.RawEvent.AcceptedOperation);
1283-
dropTarget.Drop(iddo, Vanara.PInvoke.MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)args.RawEvent.AcceptedOperation);
1269+
SafetyExtensions.IgnoreExceptions(() => ShellContextFlyoutFactory.InvokeRightButtonDropMenu(driveItem.Path, args.DroppedItem, args.RawEvent.AcceptedOperation));
12841270
return Task.FromResult(ReturnResult.Success);
12851271
}
12861272
else

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,15 +1164,9 @@ protected virtual async void Item_Drop(object sender, DragEventArgs e)
11641164
var item = GetItemFromElement(sender);
11651165
if (item is not null)
11661166
{
1167-
if ((bool)e.DataView.Properties.GetValueOrDefault("dragRightButton", false) && item.IsFolder)
1167+
if ((bool)e.DataView.Properties.GetValueOrDefault("dragRightButton", false))
11681168
{
1169-
Windows.Win32.PInvoke.GetCursorPos(out var dropPoint);
1170-
using var sf = new Vanara.Windows.Shell.ShellFolder(item.ItemPath);
1171-
var dataObjectProvider = e.DataView.As<Shell32.IDataObjectProvider>();
1172-
var iddo = dataObjectProvider.GetDataObject();
1173-
var dropTarget = sf.GetViewObject<Ole32.IDropTarget>(HWND.NULL);
1174-
dropTarget.DragEnter(iddo, MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
1175-
dropTarget.Drop(iddo, MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
1169+
SafetyExtensions.IgnoreExceptions(() => ShellContextFlyoutFactory.InvokeRightButtonDropMenu(item.ItemPath, e.DataView, e.AcceptedOperation));
11761170
}
11771171
else
11781172
{

src/Files.App/Views/Shells/BaseShellPage.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
using Microsoft.UI.Xaml.Navigation;
1010
using System.Runtime.CompilerServices;
1111
using System.Runtime.InteropServices;
12-
using Vanara.PInvoke;
1312
using Windows.Foundation.Metadata;
1413
using Windows.System;
1514
using Windows.UI.Core;
16-
using WinRT;
1715
using DispatcherQueueTimer = Microsoft.UI.Dispatching.DispatcherQueueTimer;
1816

1917
namespace Files.App.Views.Shells
@@ -421,13 +419,7 @@ protected async void ShellPage_PathBoxItemDropped(object sender, PathBoxItemDrop
421419
{
422420
if ((bool)e.Package.Properties.GetValueOrDefault("dragRightButton", false))
423421
{
424-
Windows.Win32.PInvoke.GetCursorPos(out var dropPoint);
425-
using var sf = new Vanara.Windows.Shell.ShellFolder(e.Path);
426-
var dataObjectProvider = e.Package.As<Shell32.IDataObjectProvider>();
427-
var iddo = dataObjectProvider.GetDataObject();
428-
var dropTarget = sf.GetViewObject<Ole32.IDropTarget>(HWND.NULL);
429-
dropTarget.DragEnter(iddo, MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
430-
dropTarget.Drop(iddo, MouseButtonState.MK_RBUTTON, new() { X=dropPoint.X, Y=dropPoint.Y }, (Ole32.DROPEFFECT)e.AcceptedOperation);
422+
SafetyExtensions.IgnoreExceptions(() => ShellContextFlyoutFactory.InvokeRightButtonDropMenu(e.Path, e.Package, e.AcceptedOperation));
431423
}
432424
else
433425
{

0 commit comments

Comments
 (0)