|
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