Browse Source

Implement provider members as explicit interface members.

Previous change showed up a problem where incorrect interface was getting called for `IsReadOnly`.
ui-automation-test
Steven Kirk 5 years ago
parent
commit
98a070e1af
  1. 6
      src/Windows/Avalonia.Win32/Automation/AutomationNode.ExpandCollapse.cs
  2. 10
      src/Windows/Avalonia.Win32/Automation/AutomationNode.RangeValue.cs
  3. 18
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Scroll.cs
  4. 16
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Selection.cs
  5. 4
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Toggle.cs
  6. 5
      src/Windows/Avalonia.Win32/Automation/AutomationNode.Value.cs

6
src/Windows/Avalonia.Win32/Automation/AutomationNode.ExpandCollapse.cs

@ -8,12 +8,12 @@ namespace Avalonia.Win32.Automation
{ {
internal partial class AutomationNode : UIA.IExpandCollapseProvider internal partial class AutomationNode : UIA.IExpandCollapseProvider
{ {
public ExpandCollapseState ExpandCollapseState ExpandCollapseState UIA.IExpandCollapseProvider.ExpandCollapseState
{ {
get => InvokeSync<IExpandCollapseProvider, ExpandCollapseState>(x => x.ExpandCollapseState); get => InvokeSync<IExpandCollapseProvider, ExpandCollapseState>(x => x.ExpandCollapseState);
} }
public void Expand() => InvokeSync<IExpandCollapseProvider>(x => x.Expand()); void UIA.IExpandCollapseProvider.Expand() => InvokeSync<IExpandCollapseProvider>(x => x.Expand());
public void Collapse() => InvokeSync<IExpandCollapseProvider>(x => x.Collapse()); void UIA.IExpandCollapseProvider.Collapse() => InvokeSync<IExpandCollapseProvider>(x => x.Collapse());
} }
} }

10
src/Windows/Avalonia.Win32/Automation/AutomationNode.RangeValue.cs

@ -8,11 +8,11 @@ namespace Avalonia.Win32.Automation
internal partial class AutomationNode : UIA.IRangeValueProvider internal partial class AutomationNode : UIA.IRangeValueProvider
{ {
double UIA.IRangeValueProvider.Value => InvokeSync<IRangeValueProvider, double>(x => x.Value); double UIA.IRangeValueProvider.Value => InvokeSync<IRangeValueProvider, double>(x => x.Value);
public bool IsReadOnly => InvokeSync<IRangeValueProvider, bool>(x => x.IsReadOnly); bool UIA.IRangeValueProvider.IsReadOnly => InvokeSync<IRangeValueProvider, bool>(x => x.IsReadOnly);
public double Maximum => InvokeSync<IRangeValueProvider, double>(x => x.Maximum); double UIA.IRangeValueProvider.Maximum => InvokeSync<IRangeValueProvider, double>(x => x.Maximum);
public double Minimum => InvokeSync<IRangeValueProvider, double>(x => x.Minimum); double UIA.IRangeValueProvider.Minimum => InvokeSync<IRangeValueProvider, double>(x => x.Minimum);
public double LargeChange => 1; double UIA.IRangeValueProvider.LargeChange => 1;
public double SmallChange => 1; double UIA.IRangeValueProvider.SmallChange => 1;
public void SetValue(double value) => InvokeSync<IRangeValueProvider>(x => x.SetValue(value)); public void SetValue(double value) => InvokeSync<IRangeValueProvider>(x => x.SetValue(value));
} }

18
src/Windows/Avalonia.Win32/Automation/AutomationNode.Scroll.cs

@ -7,24 +7,24 @@ namespace Avalonia.Win32.Automation
{ {
internal partial class AutomationNode : UIA.IScrollProvider, UIA.IScrollItemProvider internal partial class AutomationNode : UIA.IScrollProvider, UIA.IScrollItemProvider
{ {
public bool HorizontallyScrollable => InvokeSync<IScrollProvider, bool>(x => x.HorizontallyScrollable); bool UIA.IScrollProvider.HorizontallyScrollable => InvokeSync<IScrollProvider, bool>(x => x.HorizontallyScrollable);
public double HorizontalScrollPercent => InvokeSync<IScrollProvider, double>(x => x.HorizontalScrollPercent); double UIA.IScrollProvider.HorizontalScrollPercent => InvokeSync<IScrollProvider, double>(x => x.HorizontalScrollPercent);
public double HorizontalViewSize => InvokeSync<IScrollProvider, double>(x => x.HorizontalViewSize); double UIA.IScrollProvider.HorizontalViewSize => InvokeSync<IScrollProvider, double>(x => x.HorizontalViewSize);
public bool VerticallyScrollable => InvokeSync<IScrollProvider, bool>(x => x.VerticallyScrollable); bool UIA.IScrollProvider.VerticallyScrollable => InvokeSync<IScrollProvider, bool>(x => x.VerticallyScrollable);
public double VerticalScrollPercent => InvokeSync<IScrollProvider, double>(x => x.VerticalScrollPercent); double UIA.IScrollProvider.VerticalScrollPercent => InvokeSync<IScrollProvider, double>(x => x.VerticalScrollPercent);
public double VerticalViewSize => InvokeSync<IScrollProvider, double>(x => x.VerticalViewSize); double UIA.IScrollProvider.VerticalViewSize => InvokeSync<IScrollProvider, double>(x => x.VerticalViewSize);
public void Scroll(ScrollAmount horizontalAmount, ScrollAmount verticalAmount) void UIA.IScrollProvider.Scroll(ScrollAmount horizontalAmount, ScrollAmount verticalAmount)
{ {
InvokeSync<IScrollProvider>(x => x.Scroll(horizontalAmount, verticalAmount)); InvokeSync<IScrollProvider>(x => x.Scroll(horizontalAmount, verticalAmount));
} }
public void SetScrollPercent(double horizontalPercent, double verticalPercent) void UIA.IScrollProvider.SetScrollPercent(double horizontalPercent, double verticalPercent)
{ {
InvokeSync<IScrollProvider>(x => x.SetScrollPercent(horizontalPercent, verticalPercent)); InvokeSync<IScrollProvider>(x => x.SetScrollPercent(horizontalPercent, verticalPercent));
} }
public void ScrollIntoView() void UIA.IScrollItemProvider.ScrollIntoView()
{ {
InvokeSync(() => Peer.BringIntoView()); InvokeSync(() => Peer.BringIntoView());
} }

16
src/Windows/Avalonia.Win32/Automation/AutomationNode.Selection.cs

@ -11,11 +11,11 @@ namespace Avalonia.Win32.Automation
{ {
internal partial class AutomationNode : UIA.ISelectionProvider, UIA.ISelectionItemProvider internal partial class AutomationNode : UIA.ISelectionProvider, UIA.ISelectionItemProvider
{ {
public bool CanSelectMultiple => InvokeSync<ISelectionProvider, bool>(x => x.CanSelectMultiple); bool UIA.ISelectionProvider.CanSelectMultiple => InvokeSync<ISelectionProvider, bool>(x => x.CanSelectMultiple);
public bool IsSelectionRequired => InvokeSync<ISelectionProvider, bool>(x => x.IsSelectionRequired); bool UIA.ISelectionProvider.IsSelectionRequired => InvokeSync<ISelectionProvider, bool>(x => x.IsSelectionRequired);
public bool IsSelected => InvokeSync<ISelectionItemProvider, bool>(x => x.IsSelected); bool UIA.ISelectionItemProvider.IsSelected => InvokeSync<ISelectionItemProvider, bool>(x => x.IsSelected);
public UIA.IRawElementProviderSimple? SelectionContainer UIA.IRawElementProviderSimple? UIA.ISelectionItemProvider.SelectionContainer
{ {
get get
{ {
@ -24,15 +24,15 @@ namespace Avalonia.Win32.Automation
} }
} }
public UIA.IRawElementProviderSimple[] GetSelection() UIA.IRawElementProviderSimple[] UIA.ISelectionProvider.GetSelection()
{ {
var peers = InvokeSync<ISelectionProvider, IReadOnlyList<AutomationPeer>>(x => x.GetSelection()); var peers = InvokeSync<ISelectionProvider, IReadOnlyList<AutomationPeer>>(x => x.GetSelection());
return peers?.Select(x => (UIA.IRawElementProviderSimple)GetOrCreate(x)!).ToArray() ?? return peers?.Select(x => (UIA.IRawElementProviderSimple)GetOrCreate(x)!).ToArray() ??
Array.Empty<UIA.IRawElementProviderSimple>(); Array.Empty<UIA.IRawElementProviderSimple>();
} }
public void AddToSelection() => InvokeSync<ISelectionItemProvider>(x => x.AddToSelection()); void UIA.ISelectionItemProvider.AddToSelection() => InvokeSync<ISelectionItemProvider>(x => x.AddToSelection());
public void RemoveFromSelection() => InvokeSync<ISelectionItemProvider>(x => x.RemoveFromSelection()); void UIA.ISelectionItemProvider.RemoveFromSelection() => InvokeSync<ISelectionItemProvider>(x => x.RemoveFromSelection());
public void Select() => InvokeSync<ISelectionItemProvider>(x => x.Select()); void UIA.ISelectionItemProvider.Select() => InvokeSync<ISelectionItemProvider>(x => x.Select());
} }
} }

4
src/Windows/Avalonia.Win32/Automation/AutomationNode.Toggle.cs

@ -7,7 +7,7 @@ namespace Avalonia.Win32.Automation
{ {
internal partial class AutomationNode : UIA.IToggleProvider internal partial class AutomationNode : UIA.IToggleProvider
{ {
public ToggleState ToggleState => InvokeSync<IToggleProvider, ToggleState>(x => x.ToggleState); ToggleState UIA.IToggleProvider.ToggleState => InvokeSync<IToggleProvider, ToggleState>(x => x.ToggleState);
public void Toggle() => InvokeSync<IToggleProvider>(x => x.Toggle()); void UIA.IToggleProvider.Toggle() => InvokeSync<IToggleProvider>(x => x.Toggle());
} }
} }

5
src/Windows/Avalonia.Win32/Automation/AutomationNode.Value.cs

@ -8,9 +8,10 @@ namespace Avalonia.Win32.Automation
{ {
internal partial class AutomationNode : UIA.IValueProvider internal partial class AutomationNode : UIA.IValueProvider
{ {
public string? Value => InvokeSync<IValueProvider, string?>(x => x.Value); bool UIA.IValueProvider.IsReadOnly => InvokeSync<IValueProvider, bool>(x => x.IsReadOnly);
string? UIA.IValueProvider.Value => InvokeSync<IValueProvider, string?>(x => x.Value);
public void SetValue([MarshalAs(UnmanagedType.LPWStr)] string? value) void UIA.IValueProvider.SetValue([MarshalAs(UnmanagedType.LPWStr)] string? value)
{ {
InvokeSync<IValueProvider>(x => x.SetValue(value)); InvokeSync<IValueProvider>(x => x.SetValue(value));
} }

Loading…
Cancel
Save