|
26 | 26 | using System.Collections.Generic;
|
27 | 27 | using System.ComponentModel;
|
28 | 28 | using System.Diagnostics;
|
| 29 | +using System.IO; |
29 | 30 | using System.Linq;
|
30 | 31 | using System.Runtime.CompilerServices;
|
| 32 | +using System.Runtime.InteropServices.ComTypes; |
31 | 33 | using System.Threading;
|
32 | 34 | using System.Threading.Tasks;
|
| 35 | +using Vanara.PInvoke; |
33 | 36 | using Windows.ApplicationModel.DataTransfer;
|
34 | 37 | using Windows.ApplicationModel.DataTransfer.DragDrop;
|
35 | 38 | using Windows.Foundation;
|
36 | 39 | using Windows.Foundation.Collections;
|
37 | 40 | using Windows.Storage;
|
38 | 41 | using Windows.System;
|
39 | 42 | using static Files.App.Helpers.PathNormalization;
|
| 43 | +using VA = Vanara.Windows.Shell; |
40 | 44 | using DispatcherQueueTimer = Microsoft.UI.Dispatching.DispatcherQueueTimer;
|
41 | 45 |
|
42 | 46 | namespace Files.App
|
@@ -751,11 +755,23 @@ protected virtual void Page_CharacterReceived(UIElement sender, CharacterReceive
|
751 | 755 | protected void FileList_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
|
752 | 756 | {
|
753 | 757 | SelectedItems!.AddRange(e.Items.OfType<ListedItem>());
|
| 758 | + |
754 | 759 | try
|
755 | 760 | {
|
756 |
| - // Only support IStorageItem capable paths |
757 |
| - var itemList = e.Items.OfType<ListedItem>().Where(x => !(x.IsHiddenItem && x.IsLinkItem && x.IsRecycleBinItem && x.IsShortcut)).Select(x => VirtualStorageItem.FromListedItem(x)); |
758 |
| - e.Data.SetStorageItems(itemList, false); |
| 761 | + var itemList = e.Items.OfType<ListedItem>().Select(x => new VA.ShellItem(x.ItemPath)).ToArray(); |
| 762 | + var iddo = itemList[0].Parent.GetChildrenUIObjects<IDataObject>(HWND.NULL, itemList); |
| 763 | + itemList.ForEach(x => x.Dispose()); |
| 764 | + var wfdo = new System.Windows.Forms.DataObject(iddo); |
| 765 | + var formats = wfdo.GetFormats(false); |
| 766 | + foreach (var format in formats) |
| 767 | + { |
| 768 | + var clipFrmtId = (uint)System.Windows.Forms.DataFormats.GetFormat(format).Id; |
| 769 | + if (iddo.TryGetData<byte[]>(clipFrmtId, out var data)) |
| 770 | + { |
| 771 | + var mem = new MemoryStream(data).AsRandomAccessStream(); |
| 772 | + e.Data.SetData(format, mem); |
| 773 | + } |
| 774 | + } |
759 | 775 | }
|
760 | 776 | catch (Exception)
|
761 | 777 | {
|
|
0 commit comments