From 7b548189180c7f0d8b05dfdd6b77ad29f9888027 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Thu, 5 Feb 2026 12:00:25 +0000 Subject: [PATCH] Remove IDataObject to IDataTransfer wrappers and related methods (#20521) * Remove IDataObject to IDataTransfer wrappers and related methods * Remove IDataObject --- api/Avalonia.Headless.nupkg.xml | 16 + api/Avalonia.nupkg.xml | 276 ++++++++++++++++++ src/Avalonia.Base/Input/DataFormats.cs | 61 +--- src/Avalonia.Base/Input/DataObject.cs | 45 +-- .../Input/DataObjectExtensions.cs | 54 ---- .../Input/DataTransferExtensions.cs | 9 +- src/Avalonia.Base/Input/DragDrop.cs | 10 - src/Avalonia.Base/Input/DragEventArgs.cs | 17 -- src/Avalonia.Base/Input/IDataObject.cs | 32 -- src/Avalonia.Base/Input/Platform/Clipboard.cs | 55 +--- .../DataObjectToDataTransferItemWrapper.cs | 76 ----- .../DataObjectToDataTransferWrapper.cs | 95 ------ .../DataTransferToDataObjectWrapper.cs | 42 --- .../Input/Platform/IClipboard.cs | 55 ---- .../Input/Platform/IPlatformDragSource.cs | 9 +- src/Avalonia.Base/Input/Raw/RawDragEvent.cs | 22 +- .../Platform/InProcessDragSource.cs | 10 +- src/Avalonia.DesignerSupport/Remote/Stubs.cs | 14 - .../AvaloniaNativeDragSource.cs | 7 - .../HeadlessWindowExtensions.cs | 8 - .../Avalonia.Headless/HeadlessWindowImpl.cs | 7 - .../Avalonia.Headless/IHeadlessWindow.cs | 2 - src/Windows/Avalonia.Win32/DragSource.cs | 10 +- 23 files changed, 314 insertions(+), 618 deletions(-) create mode 100644 api/Avalonia.Headless.nupkg.xml delete mode 100644 src/Avalonia.Base/Input/DataObjectExtensions.cs delete mode 100644 src/Avalonia.Base/Input/IDataObject.cs delete mode 100644 src/Avalonia.Base/Input/Platform/DataObjectToDataTransferItemWrapper.cs delete mode 100644 src/Avalonia.Base/Input/Platform/DataObjectToDataTransferWrapper.cs delete mode 100644 src/Avalonia.Base/Input/Platform/DataTransferToDataObjectWrapper.cs diff --git a/api/Avalonia.Headless.nupkg.xml b/api/Avalonia.Headless.nupkg.xml new file mode 100644 index 0000000000..df64d3d757 --- /dev/null +++ b/api/Avalonia.Headless.nupkg.xml @@ -0,0 +1,16 @@ + + + + + CP0002 + M:Avalonia.Headless.HeadlessWindowExtensions.DragDrop(Avalonia.Controls.TopLevel,Avalonia.Point,Avalonia.Input.Raw.RawDragEventType,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects,Avalonia.Input.RawInputModifiers) + baseline/Avalonia.Headless/lib/net10.0/Avalonia.Headless.dll + current/Avalonia.Headless/lib/net10.0/Avalonia.Headless.dll + + + CP0002 + M:Avalonia.Headless.HeadlessWindowExtensions.DragDrop(Avalonia.Controls.TopLevel,Avalonia.Point,Avalonia.Input.Raw.RawDragEventType,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects,Avalonia.Input.RawInputModifiers) + baseline/Avalonia.Headless/lib/net8.0/Avalonia.Headless.dll + current/Avalonia.Headless/lib/net8.0/Avalonia.Headless.dll + + diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml index 4cf1912a2e..75154ef969 100644 --- a/api/Avalonia.nupkg.xml +++ b/api/Avalonia.nupkg.xml @@ -43,6 +43,18 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0001 + T:Avalonia.Input.DataObjectExtensions + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0001 + T:Avalonia.Input.IDataObject + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0001 T:Avalonia.Media.Fonts.FontFamilyLoader @@ -157,6 +169,18 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0001 + T:Avalonia.Input.DataObjectExtensions + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0001 + T:Avalonia.Input.IDataObject + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0001 T:Avalonia.Media.Fonts.FontFamilyLoader @@ -241,6 +265,24 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0002 + F:Avalonia.Input.DataFormats.FileNames + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + F:Avalonia.Input.DataFormats.Files + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + F:Avalonia.Input.DataFormats.Text + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0002 F:Avalonia.Media.DrawingImage.ViewboxProperty @@ -289,6 +331,48 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.DataObject.Contains(System.String) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.Get(System.String) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.GetDataFormats + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.Set(System.String,System.Object) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragDrop.DoDragDrop(Avalonia.Input.PointerEventArgs,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragEventArgs.#ctor(Avalonia.Interactivity.RoutedEvent{Avalonia.Input.DragEventArgs},Avalonia.Input.IDataObject,Avalonia.Interactivity.Interactive,Avalonia.Point,Avalonia.Input.KeyModifiers) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragEventArgs.get_Data + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers) @@ -301,6 +385,60 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetDataAsync(System.String) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetFormatsAsync + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetTextAsync + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.SetDataObjectAsync(Avalonia.Input.IDataObject) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.SetTextAsync(System.String) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.TryGetInProcessDataObjectAsync + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IPlatformDragSource.DoDragDrop(Avalonia.Input.PointerEventArgs,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Raw.RawDragEvent.#ctor(Avalonia.Input.Raw.IDragDropDevice,Avalonia.Input.Raw.RawDragEventType,Avalonia.Input.IInputRoot,Avalonia.Point,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects,Avalonia.Input.RawInputModifiers) + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Raw.RawDragEvent.get_Data + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.TextInput.TextInputMethodClient.ShowInputPanel @@ -769,6 +907,24 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0002 + F:Avalonia.Input.DataFormats.FileNames + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + F:Avalonia.Input.DataFormats.Files + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + F:Avalonia.Input.DataFormats.Text + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0002 F:Avalonia.Media.DrawingImage.ViewboxProperty @@ -817,6 +973,48 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.DataObject.Contains(System.String) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.Get(System.String) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.GetDataFormats + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DataObject.Set(System.String,System.Object) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragDrop.DoDragDrop(Avalonia.Input.PointerEventArgs,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragEventArgs.#ctor(Avalonia.Interactivity.RoutedEvent{Avalonia.Input.DragEventArgs},Avalonia.Input.IDataObject,Avalonia.Interactivity.Interactive,Avalonia.Point,Avalonia.Input.KeyModifiers) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.DragEventArgs.get_Data + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers) @@ -829,6 +1027,60 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetDataAsync(System.String) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetFormatsAsync + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.GetTextAsync + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.SetDataObjectAsync(Avalonia.Input.IDataObject) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.SetTextAsync(System.String) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IClipboard.TryGetInProcessDataObjectAsync + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Platform.IPlatformDragSource.DoDragDrop(Avalonia.Input.PointerEventArgs,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Raw.RawDragEvent.#ctor(Avalonia.Input.Raw.IDragDropDevice,Avalonia.Input.Raw.RawDragEventType,Avalonia.Input.IInputRoot,Avalonia.Point,Avalonia.Input.IDataObject,Avalonia.Input.DragDropEffects,Avalonia.Input.RawInputModifiers) + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + + + CP0002 + M:Avalonia.Input.Raw.RawDragEvent.get_Data + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0002 M:Avalonia.Input.TextInput.TextInputMethodClient.ShowInputPanel @@ -1621,6 +1873,12 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0008 + T:Avalonia.Input.DataObject + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0008 T:Avalonia.Media.ImmediateDrawingContext @@ -1729,6 +1987,12 @@ baseline/Avalonia/lib/net10.0/Avalonia.Vulkan.dll current/Avalonia/lib/net10.0/Avalonia.Vulkan.dll + + CP0008 + T:Avalonia.Input.DataObject + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0008 T:Avalonia.Media.ImmediateDrawingContext @@ -1843,6 +2107,12 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0009 + T:Avalonia.Input.DataObject + baseline/Avalonia/lib/net10.0/Avalonia.Base.dll + current/Avalonia/lib/net10.0/Avalonia.Base.dll + CP0009 T:Avalonia.Platform.Screen @@ -1855,6 +2125,12 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0009 + T:Avalonia.Input.DataObject + baseline/Avalonia/lib/net8.0/Avalonia.Base.dll + current/Avalonia/lib/net8.0/Avalonia.Base.dll + CP0009 T:Avalonia.Platform.Screen diff --git a/src/Avalonia.Base/Input/DataFormats.cs b/src/Avalonia.Base/Input/DataFormats.cs index 2fe818f20d..935f03de25 100644 --- a/src/Avalonia.Base/Input/DataFormats.cs +++ b/src/Avalonia.Base/Input/DataFormats.cs @@ -1,56 +1,11 @@ using System; -using System.ComponentModel; -using Avalonia.Input.Platform; -namespace Avalonia.Input -{ - public static class DataFormats - { - /// - /// Dataformat for plaintext - /// - [Obsolete($"Use {nameof(DataFormat)}.{nameof(DataFormat.Text)} instead.")] - public static readonly string Text = nameof(Text); +namespace Avalonia.Input; - /// - /// Dataformat for one or more files. - /// - [Obsolete($"Use {nameof(DataFormat)}.{nameof(DataFormat.File)} instead.")] - public static readonly string Files = nameof(Files); - - /// - /// Dataformat for one or more filenames - /// - /// - /// This data format is supported only on desktop platforms. - /// - [Obsolete($"Use {nameof(DataFormat)}.{nameof(DataFormat.File)} instead."), EditorBrowsable(EditorBrowsableState.Never)] - public static readonly string FileNames = nameof(FileNames); - -#pragma warning disable CS0618 // Type or member is obsolete - - internal static DataFormat ToDataFormat(string format) - { - if (format == Text) - return DataFormat.Text; - - if (format == Files || format == FileNames) - return DataFormat.File; - - return DataFormat.CreateBytesPlatformFormat(format); - } - - internal static string ToString(DataFormat format) - { - if (DataFormat.Text.Equals(format)) - return Text; - - if (DataFormat.File.Equals(format)) - return Files; - - return format.Identifier; - } - -#pragma warning restore CS0618 // Type or member is obsolete - } -} +// TODO13: remove +/// +/// This class does not do anything anymore. +/// Use instead. +/// +[Obsolete($"Use {nameof(DataFormat)} instead", true)] +public static class DataFormats; diff --git a/src/Avalonia.Base/Input/DataObject.cs b/src/Avalonia.Base/Input/DataObject.cs index dc9e2a29af..708ac61e16 100644 --- a/src/Avalonia.Base/Input/DataObject.cs +++ b/src/Avalonia.Base/Input/DataObject.cs @@ -1,40 +1,11 @@ using System; -using System.Collections.Generic; -namespace Avalonia.Input -{ - /// - /// Specific and mutable implementation of the IDataObject interface. - /// - [Obsolete($"Use {nameof(DataTransfer)} instead")] - public class DataObject : IDataObject - { - private readonly Dictionary _items = new(); +namespace Avalonia.Input; - /// - public bool Contains(string dataFormat) - { - return _items.ContainsKey(dataFormat); - } - - /// - public object? Get(string dataFormat) - { - return _items.TryGetValue(dataFormat, out var item) ? item : null; - } - - /// - public IEnumerable GetDataFormats() - { - return _items.Keys; - } - - /// - /// Sets a value to the internal store of the data object with as a key. - /// - public void Set(string dataFormat, object value) - { - _items[dataFormat] = value; - } - } -} +// TODO13: remove +/// +/// This class does not do anything anymore. +/// Use instead. +/// +[Obsolete($"Use {nameof(DataTransfer)} instead", true)] +public sealed class DataObject; diff --git a/src/Avalonia.Base/Input/DataObjectExtensions.cs b/src/Avalonia.Base/Input/DataObjectExtensions.cs deleted file mode 100644 index f361485404..0000000000 --- a/src/Avalonia.Base/Input/DataObjectExtensions.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Avalonia.Platform.Storage; - -#pragma warning disable CS0618 // Type or member is obsolete - -namespace Avalonia.Input -{ - // TODO12: remove - public static class DataObjectExtensions - { - /// - /// Returns a list of files if the DataObject contains files or filenames. - /// . - /// - /// - /// Collection of storage items - files or folders. If format isn't available, returns null. - /// - public static IEnumerable? GetFiles(this IDataObject dataObject) - { - return dataObject.Get(DataFormats.Files) as IEnumerable; - } - - /// - /// Returns a list of filenames if the DataObject contains filenames. - /// - /// - /// - /// Collection of file names. If format isn't available, returns null. - /// - [System.Obsolete("Use GetFiles, this method is supported only on desktop platforms."), EditorBrowsable(EditorBrowsableState.Never)] - public static IEnumerable? GetFileNames(this IDataObject dataObject) - { - return (dataObject.Get(DataFormats.FileNames) as IEnumerable) - ?? dataObject.GetFiles()? - .Select(f => f.TryGetLocalPath()) - .Where(p => !string.IsNullOrEmpty(p)) - .OfType(); - } - - /// - /// Returns the dragged text if the DataObject contains any text. - /// - /// - /// - /// A text string. If format isn't available, returns null. - /// - public static string? GetText(this IDataObject dataObject) - { - return dataObject.Get(DataFormats.Text) as string; - } - } -} diff --git a/src/Avalonia.Base/Input/DataTransferExtensions.cs b/src/Avalonia.Base/Input/DataTransferExtensions.cs index 517ca51719..a4f74bef3e 100644 --- a/src/Avalonia.Base/Input/DataTransferExtensions.cs +++ b/src/Avalonia.Base/Input/DataTransferExtensions.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using Avalonia.Input.Platform; using Avalonia.Media.Imaging; using Avalonia.Platform.Storage; @@ -14,11 +12,6 @@ namespace Avalonia.Input; /// public static class DataTransferExtensions { - [Obsolete] - internal static IDataObject ToLegacyDataObject(this IDataTransfer dataTransfer) - => (dataTransfer as DataObjectToDataTransferWrapper)?.DataObject - ?? new DataTransferToDataObjectWrapper(dataTransfer); - /// /// Gets whether a supports a specific format. /// diff --git a/src/Avalonia.Base/Input/DragDrop.cs b/src/Avalonia.Base/Input/DragDrop.cs index 551f436854..33f538c443 100644 --- a/src/Avalonia.Base/Input/DragDrop.cs +++ b/src/Avalonia.Base/Input/DragDrop.cs @@ -122,16 +122,6 @@ namespace Avalonia.Input element.RemoveHandler(DropEvent, handler); } - /// - /// Starts a dragging operation with the given and returns the applied drop effect from the target. - /// - /// - [Obsolete($"Use {nameof(DoDragDropAsync)} instead.")] - public static Task DoDragDrop(PointerEventArgs triggerEvent, IDataObject data, DragDropEffects allowedEffects) - { - return DoDragDropAsync(triggerEvent, new DataObjectToDataTransferWrapper(data), allowedEffects); - } - /// /// Starts a dragging operation with the given and returns the applied drop effect from the target. /// diff --git a/src/Avalonia.Base/Input/DragEventArgs.cs b/src/Avalonia.Base/Input/DragEventArgs.cs index d4a058e5b6..e68a6138e0 100644 --- a/src/Avalonia.Base/Input/DragEventArgs.cs +++ b/src/Avalonia.Base/Input/DragEventArgs.cs @@ -1,5 +1,4 @@ using System; -using Avalonia.Input.Platform; using Avalonia.Interactivity; using Avalonia.Metadata; @@ -9,16 +8,11 @@ namespace Avalonia.Input { private readonly Interactive _target; private readonly Point _targetLocation; - [Obsolete] private IDataObject? _legacyDataObject; public DragDropEffects DragEffects { get; set; } public IDataTransfer DataTransfer { get; } - [Obsolete($"Use {nameof(DataTransfer)} instead.")] - public IDataObject Data - => _legacyDataObject ??= DataTransfer.ToLegacyDataObject(); - public KeyModifiers KeyModifiers { get; } public Point GetPosition(Visual relativeTo) @@ -31,17 +25,6 @@ namespace Avalonia.Input return _target.TranslatePoint(_targetLocation, relativeTo) ?? new Point(0, 0); } - [Obsolete($"Use the constructor accepting a {nameof(IDataTransfer)} instance instead.")] - public DragEventArgs( - RoutedEvent routedEvent, - IDataObject data, - Interactive target, - Point targetLocation, - KeyModifiers keyModifiers) - : this(routedEvent, new DataObjectToDataTransferWrapper(data), target, targetLocation, keyModifiers) - { - } - [Unstable("This constructor might be removed in 12.0. For unit testing, consider using DragDrop.DoDragDrop or IHeadlessWindow.DragDrop.")] public DragEventArgs( RoutedEvent routedEvent, diff --git a/src/Avalonia.Base/Input/IDataObject.cs b/src/Avalonia.Base/Input/IDataObject.cs deleted file mode 100644 index 560ffc0c02..0000000000 --- a/src/Avalonia.Base/Input/IDataObject.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Avalonia.Input -{ - /// - /// Interface to access information about the data of a drag-and-drop operation. - /// - [Obsolete($"Use {nameof(IDataTransfer)} or {nameof(IAsyncDataTransfer)} instead")] - public interface IDataObject - { - /// - /// Lists all formats which are present in the DataObject. - /// - /// - IEnumerable GetDataFormats(); - - /// - /// Checks whether a given DataFormat is present in this object - /// - /// - bool Contains(string dataFormat); - - /// - /// Tries to get the data of the given DataFormat. - /// - /// - /// Object data. If format isn't available, returns null. - /// - object? Get(string dataFormat); - } -} diff --git a/src/Avalonia.Base/Input/Platform/Clipboard.cs b/src/Avalonia.Base/Input/Platform/Clipboard.cs index 0d961cde3e..c1ebf09196 100644 --- a/src/Avalonia.Base/Input/Platform/Clipboard.cs +++ b/src/Avalonia.Base/Input/Platform/Clipboard.cs @@ -1,9 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Avalonia.Compatibility; -using Avalonia.Platform.Storage; +using System.Threading.Tasks; namespace Avalonia.Input.Platform; @@ -15,12 +10,6 @@ internal sealed class Clipboard(IClipboardImpl clipboardImpl) : IClipboard private readonly IClipboardImpl _clipboardImpl = clipboardImpl; private IAsyncDataTransfer? _lastDataTransfer; - Task IClipboard.GetTextAsync() - => this.TryGetTextAsync(); - - Task IClipboard.SetTextAsync(string? text) - => this.SetValueAsync(DataFormat.Text, text); - public Task ClearAsync() { _lastDataTransfer?.Dispose(); @@ -29,10 +18,6 @@ internal sealed class Clipboard(IClipboardImpl clipboardImpl) : IClipboard return _clipboardImpl.ClearAsync(); } - [Obsolete($"Use {nameof(SetDataAsync)} instead.")] - Task IClipboard.SetDataObjectAsync(IDataObject data) - => SetDataAsync(new DataObjectToDataTransferWrapper(data)); - public Task SetDataAsync(IAsyncDataTransfer? dataTransfer) { if (dataTransfer is null) @@ -47,47 +32,9 @@ internal sealed class Clipboard(IClipboardImpl clipboardImpl) : IClipboard public Task FlushAsync() => _clipboardImpl is IFlushableClipboardImpl flushable ? flushable.FlushAsync() : Task.CompletedTask; - async Task IClipboard.GetFormatsAsync() - { - var dataTransfer = await TryGetDataAsync(); - return dataTransfer is null ? [] : dataTransfer.Formats.Select(DataFormats.ToString).ToArray(); - } - - [Obsolete($"Use {nameof(TryGetDataAsync)} instead.")] - async Task IClipboard.GetDataAsync(string format) - { - // No ConfigureAwait(false) here: we want TryGetXxxAsync() below to be called on the initial thread. - using var dataTransfer = await TryGetDataAsync(); - if (dataTransfer is null) - return null; - - if (format == DataFormats.Text) - return await dataTransfer.TryGetTextAsync().ConfigureAwait(false); - - if (format == DataFormats.Files) - return await dataTransfer.TryGetFilesAsync().ConfigureAwait(false); - - if (format == DataFormats.FileNames) - { - return (await dataTransfer.TryGetFilesAsync().ConfigureAwait(false)) - ?.Select(file => file.TryGetLocalPath()) - .Where(path => path is not null) - .ToArray(); - } - - return null; - } - public Task TryGetDataAsync() => _clipboardImpl.TryGetDataAsync(); - [Obsolete($"Use {nameof(TryGetInProcessDataAsync)} instead.")] - async Task IClipboard.TryGetInProcessDataObjectAsync() - { - var dataTransfer = await TryGetInProcessDataAsync().ConfigureAwait(false); - return (dataTransfer as DataObjectToDataTransferWrapper)?.DataObject; - } - public async Task TryGetInProcessDataAsync() { if (_lastDataTransfer is null || _clipboardImpl is not IOwnedClipboardImpl ownedClipboardImpl) diff --git a/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferItemWrapper.cs b/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferItemWrapper.cs deleted file mode 100644 index fad3716bc7..0000000000 --- a/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferItemWrapper.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Text; -using Avalonia.Compatibility; - -namespace Avalonia.Input.Platform; - -/// -/// Wraps a legacy into a . -/// -[Obsolete] -internal sealed class DataObjectToDataTransferItemWrapper( - IDataObject dataObject, - DataFormat[] formats, - string[] formatStrings) - : PlatformDataTransferItem -{ - private readonly IDataObject _dataObject = dataObject; - private readonly DataFormat[] _formats = formats; - private readonly string[] _formatStrings = formatStrings; - - protected override DataFormat[] ProvideFormats() - => _formats; - - protected override object? TryGetRawCore(DataFormat format) - { - var index = Array.IndexOf(Formats, format); - if (index < 0) - return null; - - // We should never have DataFormat.File here, it's been handled by DataObjectToDataTransferWrapper. - Debug.Assert(!DataFormat.File.Equals(format)); - - var formatString = _formatStrings[index]; - var data = _dataObject.Get(formatString); - - if (DataFormat.Text.Equals(format)) - return Convert.ToString(data) ?? string.Empty; - - if (format is DataFormat) - return Convert.ToString(data); - - if (format is DataFormat) - return ConvertLegacyDataToBytes(format, data); - - return null; - } - - private static byte[]? ConvertLegacyDataToBytes(DataFormat format, object? data) - { - switch (data) - { - case null: - return null; - - case byte[] bytes: - return bytes; - - case string str: - return OperatingSystemEx.IsWindows() || OperatingSystemEx.IsMacOS() || OperatingSystemEx.IsIOS() ? - Encoding.Unicode.GetBytes(str) : - Encoding.UTF8.GetBytes(str); - - case Stream stream: - var length = (int)(stream.Length - stream.Position); - var buffer = new byte[length]; - - stream.ReadExactly(buffer, 0, length); - return buffer; - - default: - return null; - } - } -} diff --git a/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferWrapper.cs b/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferWrapper.cs deleted file mode 100644 index 6fe64134d8..0000000000 --- a/src/Avalonia.Base/Input/Platform/DataObjectToDataTransferWrapper.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using Avalonia.Platform.Storage; -using Avalonia.Platform.Storage.FileIO; - -namespace Avalonia.Input.Platform; - -#pragma warning disable CS0618 // Type or member is obsolete: usages of IDataObject and DataFormats - -// TODO12: remove -/// -/// Wraps a legacy into a . -/// -[Obsolete] -internal sealed class DataObjectToDataTransferWrapper(IDataObject dataObject) - : PlatformDataTransfer -{ - public IDataObject DataObject { get; } = dataObject; - - protected override DataFormat[] ProvideFormats() - => DataObject.GetDataFormats().Select(DataFormats.ToDataFormat).Distinct().ToArray(); - - protected override PlatformDataTransferItem[] ProvideItems() - { - var items = new List(); - var nonFileFormats = new List(); - var nonFileFormatStrings = new List(); - var hasFiles = false; - - foreach (var formatString in DataObject.GetDataFormats()) - { - var format = DataFormats.ToDataFormat(formatString); - - if (formatString == DataFormats.Files) - { - if (hasFiles) - continue; - - // This is not ideal as we're reading the filenames ahead of time to generate the appropriate items. - // We don't really care about that for this legacy wrapper. - if (DataObject.Get(formatString) is IEnumerable storageItems) - { - hasFiles = true; - - foreach (var storageItem in storageItems) - items.Add(PlatformDataTransferItem.Create(DataFormat.File, storageItem)); - } - } - else if (formatString == DataFormats.FileNames) - { - if (hasFiles) - continue; - - if (DataObject.Get(formatString) is IEnumerable fileNames) - { - hasFiles = true; - - foreach (var fileName in fileNames) - { - if (StorageProviderHelpers.TryCreateBclStorageItem(fileName) is { } storageItem) - items.Add(PlatformDataTransferItem.Create(DataFormat.File, storageItem)); - } - } - } - else - { - nonFileFormats.Add(format); - nonFileFormatStrings.Add(formatString); - } - } - - if (nonFileFormats.Count > 0) - { - Debug.Assert(nonFileFormats.Count == nonFileFormatStrings.Count); - - // Single item containing all formats except for DataFormat.File. - items.Add(new DataObjectToDataTransferItemWrapper( - DataObject, - nonFileFormats.ToArray(), - nonFileFormatStrings.ToArray())); - } - - return items.ToArray(); - } - - [SuppressMessage( - "ReSharper", - "SuspiciousTypeConversion.Global", - Justification = "IDisposable may be implemented externally by the IDataObject instance.")] - public override void Dispose() - => (DataObject as IDisposable)?.Dispose(); -} diff --git a/src/Avalonia.Base/Input/Platform/DataTransferToDataObjectWrapper.cs b/src/Avalonia.Base/Input/Platform/DataTransferToDataObjectWrapper.cs deleted file mode 100644 index 814adfc4ff..0000000000 --- a/src/Avalonia.Base/Input/Platform/DataTransferToDataObjectWrapper.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Avalonia.Platform.Storage; - -namespace Avalonia.Input.Platform; - -/// -/// Wraps a into a legacy . -/// -[Obsolete] -internal sealed class DataTransferToDataObjectWrapper(IDataTransfer dataTransfer) : IDataObject -{ - public IDataTransfer DataTransfer { get; } = dataTransfer; - - public IEnumerable GetDataFormats() - => DataTransfer.Formats.Select(DataFormats.ToString); - - public bool Contains(string dataFormat) - => DataTransfer.Contains(DataFormats.ToDataFormat(dataFormat)); - - public object? Get(string dataFormat) - { - if (dataFormat == DataFormats.Text) - return DataTransfer.TryGetText(); - - if (dataFormat == DataFormats.Files) - return DataTransfer.TryGetFiles(); - - if (dataFormat == DataFormats.FileNames) - { - return DataTransfer - .TryGetFiles() - ?.Select(file => file.TryGetLocalPath()) - .Where(path => path is not null) - .ToArray(); - } - - return null; - } - -} diff --git a/src/Avalonia.Base/Input/Platform/IClipboard.cs b/src/Avalonia.Base/Input/Platform/IClipboard.cs index b75e1b5a40..bc061be268 100644 --- a/src/Avalonia.Base/Input/Platform/IClipboard.cs +++ b/src/Avalonia.Base/Input/Platform/IClipboard.cs @@ -1,4 +1,3 @@ -using System; using System.Threading.Tasks; using Avalonia.Metadata; @@ -10,41 +9,11 @@ namespace Avalonia.Input.Platform [NotClientImplementable] public interface IClipboard { - // TODO12: remove, ClipboardExtensions.TryGetTextAsync exists - /// - /// Returns a string containing the text data on the clipboard. - /// - /// A string containing text data, or null if no corresponding text data is available. - [Obsolete($"Use {nameof(ClipboardExtensions)}.{nameof(ClipboardExtensions.TryGetTextAsync)} instead")] - Task GetTextAsync(); - - // TODO12: remove, ClipboardExtensions.SetTextAsync exists - /// - /// Places a text on the clipboard. - /// - /// The text value to set. - /// - /// By calling this method, the clipboard will get cleared of any possible previous data. - /// - /// If is null or empty, nothing will get placed on the clipboard and this method - /// will be equivalent to . - /// - /// - Task SetTextAsync(string? text); - /// /// Clears any data from the system clipboard. /// Task ClearAsync(); - /// - /// Places a specified non-persistent data object on the system Clipboard. - /// - /// A data object (an object that implements ) to place on the system Clipboard. - /// is null. - [Obsolete($"Use {nameof(SetDataAsync)} instead.")] - Task SetDataObjectAsync(IDataObject data); - /// /// Places a data object on the clipboard. /// The data object is responsible for providing supported formats and data upon request. @@ -69,20 +38,6 @@ namespace Avalonia.Input.Platform /// This method is only supported on the Windows platform. This method will do nothing on other platforms. Task FlushAsync(); - /// - /// Get list of available Clipboard format. - /// - [Obsolete($"Use {nameof(ClipboardExtensions.GetDataFormatsAsync)} instead.")] - Task GetFormatsAsync(); - - /// - /// Retrieves data in a specified format from the Clipboard. - /// - /// A string that specifies the format of the data to retrieve. For a set of predefined data formats, see the class. - /// - [Obsolete($"Use {nameof(TryGetDataAsync)} instead.")] - Task GetDataAsync(string format); - /// /// Retrieves data from the clipboard. /// @@ -95,16 +50,6 @@ namespace Avalonia.Input.Platform /// Task TryGetDataAsync(); - /// - /// If clipboard contains the IDataObject that was set by a previous call to , - /// return said IDataObject instance. Otherwise, return null. - /// Note that not every platform supports that method, on unsupported platforms this method will always return - /// null - /// - /// - [Obsolete($"Use {nameof(TryGetInProcessDataAsync)} instead.")] - Task TryGetInProcessDataObjectAsync(); - /// /// Retrieves the exact instance of a previously placed on the clipboard /// by , if any. diff --git a/src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs b/src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs index 44881bcee1..4ad36576ca 100644 --- a/src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs +++ b/src/Avalonia.Base/Input/Platform/IPlatformDragSource.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Avalonia.Metadata; namespace Avalonia.Input.Platform @@ -7,12 +6,6 @@ namespace Avalonia.Input.Platform [NotClientImplementable] public interface IPlatformDragSource { - [Obsolete($"Use {nameof(DoDragDropAsync)} instead.")] - Task DoDragDrop( - PointerEventArgs triggerEvent, - IDataObject data, - DragDropEffects allowedEffects); - Task DoDragDropAsync( PointerEventArgs triggerEvent, IDataTransfer dataTransfer, diff --git a/src/Avalonia.Base/Input/Raw/RawDragEvent.cs b/src/Avalonia.Base/Input/Raw/RawDragEvent.cs index 5f7c5e3e04..9ba6f56cbb 100644 --- a/src/Avalonia.Base/Input/Raw/RawDragEvent.cs +++ b/src/Avalonia.Base/Input/Raw/RawDragEvent.cs @@ -1,40 +1,20 @@ -using System; -using Avalonia.Input.Platform; -using Avalonia.Metadata; +using Avalonia.Metadata; namespace Avalonia.Input.Raw { [PrivateApi] public class RawDragEvent : RawInputEventArgs { - [Obsolete] private IDataObject? _legacyDataObject; - public Point Location { get; set; } public IDataTransfer DataTransfer { get; } - [Obsolete($"Use {nameof(DataTransfer)} instead.")] - public IDataObject Data - => _legacyDataObject ??= DataTransfer.ToLegacyDataObject(); - public DragDropEffects Effects { get; set; } public RawDragEventType Type { get; } public KeyModifiers KeyModifiers { get; } - [Obsolete($"Use the constructor accepting a {nameof(IDataTransfer)} instance instead.")] - public RawDragEvent(IDragDropDevice inputDevice, - RawDragEventType type, - IInputRoot root, - Point location, - IDataObject data, - DragDropEffects effects, - RawInputModifiers modifiers) - : this(inputDevice, type, root, location, new DataObjectToDataTransferWrapper(data), effects, modifiers) - { - } - public RawDragEvent( IDragDropDevice inputDevice, RawDragEventType type, diff --git a/src/Avalonia.Controls/Platform/InProcessDragSource.cs b/src/Avalonia.Controls/Platform/InProcessDragSource.cs index aa8694b6ac..615decc753 100644 --- a/src/Avalonia.Controls/Platform/InProcessDragSource.cs +++ b/src/Avalonia.Controls/Platform/InProcessDragSource.cs @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; using Avalonia.Reactive; using System.Threading.Tasks; using Avalonia.Controls; @@ -31,13 +30,6 @@ namespace Avalonia.Platform _dragDrop = AvaloniaLocator.Current.GetRequiredService(); } - [Obsolete($"Use {nameof(DoDragDropAsync)} instead.")] - Task IPlatformDragSource.DoDragDrop( - PointerEventArgs triggerEvent, - IDataObject data, - DragDropEffects allowedEffects) - => DoDragDropAsync(triggerEvent, new DataObjectToDataTransferWrapper(data), allowedEffects); - public async Task DoDragDropAsync( PointerEventArgs triggerEvent, IDataTransfer dataTransfer, diff --git a/src/Avalonia.DesignerSupport/Remote/Stubs.cs b/src/Avalonia.DesignerSupport/Remote/Stubs.cs index a352b414fe..caa8bff00f 100644 --- a/src/Avalonia.DesignerSupport/Remote/Stubs.cs +++ b/src/Avalonia.DesignerSupport/Remote/Stubs.cs @@ -223,26 +223,12 @@ namespace Avalonia.DesignerSupport.Remote class ClipboardStub : IClipboard { - public Task GetTextAsync() => Task.FromResult(null); - - public Task SetTextAsync(string? text) => Task.CompletedTask; - public Task ClearAsync() => Task.CompletedTask; - [Obsolete($"Use {nameof(SetDataAsync)} instead.")] - public Task SetDataObjectAsync(IDataObject data) => Task.CompletedTask; - public Task SetDataAsync(IAsyncDataTransfer? dataTransfer) => Task.CompletedTask; - public Task GetFormatsAsync() => Task.FromResult([]); - - public Task GetDataAsync(string format) => Task.FromResult(null); - public Task TryGetDataAsync() => Task.FromResult(null); - [Obsolete($"Use {nameof(TryGetInProcessDataAsync)} instead.")] - public Task TryGetInProcessDataObjectAsync() => Task.FromResult(null); - public Task FlushAsync() => Task.CompletedTask; public Task TryGetInProcessDataAsync() => Task.FromResult(null); diff --git a/src/Avalonia.Native/AvaloniaNativeDragSource.cs b/src/Avalonia.Native/AvaloniaNativeDragSource.cs index 3c9397f8cc..662d79d1b8 100644 --- a/src/Avalonia.Native/AvaloniaNativeDragSource.cs +++ b/src/Avalonia.Native/AvaloniaNativeDragSource.cs @@ -32,13 +32,6 @@ namespace Avalonia.Native } } - [Obsolete($"Use {nameof(DoDragDropAsync)} instead.")] - Task IPlatformDragSource.DoDragDrop( - PointerEventArgs triggerEvent, - IDataObject data, - DragDropEffects allowedEffects) - => DoDragDropAsync(triggerEvent, new DataObjectToDataTransferWrapper(data), allowedEffects); - public Task DoDragDropAsync( PointerEventArgs triggerEvent, IDataTransfer dataTransfer, diff --git a/src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs b/src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs index b17a1150fc..7de2243f80 100644 --- a/src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs +++ b/src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs @@ -121,14 +121,6 @@ public static class HeadlessWindowExtensions RawInputModifiers modifiers = RawInputModifiers.None) => RunJobsOnImpl(topLevel, w => w.MouseWheel(point, delta, modifiers)); - /// - /// Simulates a drag and drop target event on the headless window/toplevel. This event simulates a user moving files from another app to the current app. - /// - [Obsolete($"Use the overload accepting a {nameof(IDataTransfer)} instance instead.")] - public static void DragDrop(this TopLevel topLevel, Point point, RawDragEventType type, IDataObject data, - DragDropEffects effects, RawInputModifiers modifiers = RawInputModifiers.None) => - RunJobsOnImpl(topLevel, w => w.DragDrop(point, type, data, effects, modifiers)); - /// /// Simulates a drag and drop target event on the headless window/toplevel. This event simulates a user moving files from another app to the current app. /// diff --git a/src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs b/src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs index 8f80e22138..e3fc75eac4 100644 --- a/src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs +++ b/src/Headless/Avalonia.Headless/HeadlessWindowImpl.cs @@ -349,13 +349,6 @@ namespace Avalonia.Headless point, delta, modifiers)); } - [Obsolete($"Use the overload accepting a {nameof(IDataTransfer)} instance instead.")] - void IHeadlessWindow.DragDrop(Point point, RawDragEventType type, IDataObject data, DragDropEffects effects, RawInputModifiers modifiers) - { - var device = AvaloniaLocator.Current.GetRequiredService(); - Input?.Invoke(new RawDragEvent(device, type, InputRoot!, point, new DataObjectToDataTransferWrapper(data), effects, modifiers)); - } - void IHeadlessWindow.DragDrop(Point point, RawDragEventType type, IDataTransfer data, DragDropEffects effects, RawInputModifiers modifiers) { var device = AvaloniaLocator.Current.GetRequiredService(); diff --git a/src/Headless/Avalonia.Headless/IHeadlessWindow.cs b/src/Headless/Avalonia.Headless/IHeadlessWindow.cs index 2fe11df2ca..30c2390f64 100644 --- a/src/Headless/Avalonia.Headless/IHeadlessWindow.cs +++ b/src/Headless/Avalonia.Headless/IHeadlessWindow.cs @@ -15,8 +15,6 @@ namespace Avalonia.Headless void MouseMove(Point point, RawInputModifiers modifiers = RawInputModifiers.None); void MouseUp(Point point, MouseButton button, RawInputModifiers modifiers = RawInputModifiers.None); void MouseWheel(Point point, Vector delta, RawInputModifiers modifiers = RawInputModifiers.None); - [Obsolete($"Use the overload accepting a {nameof(IDataTransfer)} instance instead.")] - void DragDrop(Point point, RawDragEventType type, IDataObject data, DragDropEffects effects, RawInputModifiers modifiers = RawInputModifiers.None); void DragDrop(Point point, RawDragEventType type, IDataTransfer data, DragDropEffects effects, RawInputModifiers modifiers = RawInputModifiers.None); } } diff --git a/src/Windows/Avalonia.Win32/DragSource.cs b/src/Windows/Avalonia.Win32/DragSource.cs index 36d04a644e..f1cdfa440a 100644 --- a/src/Windows/Avalonia.Win32/DragSource.cs +++ b/src/Windows/Avalonia.Win32/DragSource.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Threading; @@ -10,13 +9,6 @@ namespace Avalonia.Win32 { internal sealed class DragSource : IPlatformDragSource { - [Obsolete($"Use {nameof(DoDragDropAsync)} instead.")] - Task IPlatformDragSource.DoDragDrop( - PointerEventArgs triggerEvent, - IDataObject data, - DragDropEffects allowedEffects) - => DoDragDropAsync(triggerEvent, new DataObjectToDataTransferWrapper(data), allowedEffects); - public Task DoDragDropAsync( PointerEventArgs triggerEvent, IDataTransfer dataTransfer,