From 12317709da7f6e38a52d575f8bd5e020e3a378c8 Mon Sep 17 00:00:00 2001 From: Hugh Bellamy Date: Wed, 6 May 2020 21:44:52 +0100 Subject: [PATCH 1/2] Fix ILegacyIAccessibleProvider.GetSelection return type --- .../UiaCore/Interop.ILegacyIAccessibleProvider.cs | 3 ++- .../src/System/Windows/Forms/AccessibleObject.cs | 8 ++++---- .../System/Windows/Forms/InternalAccessibleObject.cs | 12 ++++-------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.ILegacyIAccessibleProvider.cs b/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.ILegacyIAccessibleProvider.cs index 510114c82b9..12c15919bbc 100644 --- a/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.ILegacyIAccessibleProvider.cs +++ b/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.ILegacyIAccessibleProvider.cs @@ -39,7 +39,8 @@ public interface ILegacyIAccessibleProvider string? KeyboardShortcut { get; } - object[]? /* IRawElementProviderSimple[] */ GetSelection(); + [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_UNKNOWN)] + IRawElementProviderSimple[] GetSelection(); string? DefaultAction { get; } } diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs index 0bc546cad42..bdf717f6cc5 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs @@ -831,14 +831,14 @@ HRESULT UiaCore.IAccessibleEx.ConvertReturnedElement(UiaCore.IRawElementProvider IAccessible? UiaCore.ILegacyIAccessibleProvider.GetIAccessible() => AsIAccessible(this); - object[]? UiaCore.ILegacyIAccessibleProvider.GetSelection() + UiaCore.IRawElementProviderSimple[] UiaCore.ILegacyIAccessibleProvider.GetSelection() { - if (GetSelected() is UiaCore.IRawElementProviderSimple selected) + if (!(GetSelected() is UiaCore.IRawElementProviderSimple selected)) { - return new UiaCore.IRawElementProviderSimple[] { selected }; + return Array.Empty(); } - return null; + return new UiaCore.IRawElementProviderSimple[] { selected }; } void UiaCore.ILegacyIAccessibleProvider.Select(int flagsSelect) => Select((AccessibleSelection)flagsSelect); diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/InternalAccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/InternalAccessibleObject.cs index 67c887c8417..416b4eb30cf 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/InternalAccessibleObject.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/InternalAccessibleObject.cs @@ -400,20 +400,16 @@ UiaRect IRawElementProviderFragment.BoundingRectangle int ILegacyIAccessibleProvider.ChildId => publicILegacyIAccessibleProvider.ChildId; - void ILegacyIAccessibleProvider.DoDefaultAction() - => publicILegacyIAccessibleProvider.DoDefaultAction(); + void ILegacyIAccessibleProvider.DoDefaultAction() => publicILegacyIAccessibleProvider.DoDefaultAction(); IAccessible? ILegacyIAccessibleProvider.GetIAccessible() => publicILegacyIAccessibleProvider.GetIAccessible(); - object[]? ILegacyIAccessibleProvider.GetSelection() - => AsArrayOfNativeAccessibles(publicILegacyIAccessibleProvider.GetSelection()); + IRawElementProviderSimple[] ILegacyIAccessibleProvider.GetSelection() => publicILegacyIAccessibleProvider.GetSelection(); - void ILegacyIAccessibleProvider.Select(int flagsSelect) - => publicILegacyIAccessibleProvider.Select(flagsSelect); + void ILegacyIAccessibleProvider.Select(int flagsSelect) => publicILegacyIAccessibleProvider.Select(flagsSelect); - void ILegacyIAccessibleProvider.SetValue(string szValue) - => publicILegacyIAccessibleProvider.SetValue(szValue); + void ILegacyIAccessibleProvider.SetValue(string szValue) => publicILegacyIAccessibleProvider.SetValue(szValue); void IInvokeProvider.Invoke() => publicIInvokeProvider.Invoke(); From a05cdd426b21e569038f4aa8eb44b602e35c7110 Mon Sep 17 00:00:00 2001 From: Hugh Bellamy Date: Wed, 6 May 2020 23:05:33 +0100 Subject: [PATCH 2/2] Fix IRawElementProviderHwndOverride interface definition --- .../UiaCore/Interop.IRawElementProviderHwndOverride.cs | 2 +- .../src/System/Windows/Forms/AccessibleObject.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.IRawElementProviderHwndOverride.cs b/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.IRawElementProviderHwndOverride.cs index 50cd2003c17..4ca25ba9d33 100644 --- a/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.IRawElementProviderHwndOverride.cs +++ b/src/System.Windows.Forms.Primitives/src/Interop/UiaCore/Interop.IRawElementProviderHwndOverride.cs @@ -16,7 +16,7 @@ internal static partial class UiaCore [ComImport] [Guid("1d5df27c-8947-4425-b8d9-79787bb460b8")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IRawElementProviderHwndOverride : IRawElementProviderSimple + public interface IRawElementProviderHwndOverride { /// /// Request a provider for the specified component. The returned provider can supply additional diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs index bdf717f6cc5..af525fb7a11 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/AccessibleObject.cs @@ -833,12 +833,12 @@ HRESULT UiaCore.IAccessibleEx.ConvertReturnedElement(UiaCore.IRawElementProvider UiaCore.IRawElementProviderSimple[] UiaCore.ILegacyIAccessibleProvider.GetSelection() { - if (!(GetSelected() is UiaCore.IRawElementProviderSimple selected)) + if (GetSelected() is UiaCore.IRawElementProviderSimple selected) { - return Array.Empty(); + return new UiaCore.IRawElementProviderSimple[] { selected }; } - return new UiaCore.IRawElementProviderSimple[] { selected }; + return Array.Empty(); } void UiaCore.ILegacyIAccessibleProvider.Select(int flagsSelect) => Select((AccessibleSelection)flagsSelect);