Browse Source

Use correct role for combobox items on OSX.

ui-automation-test
Steven Kirk 5 years ago
parent
commit
6096cab3b9
  1. 1
      native/Avalonia.Native/src/OSX/automation.mm
  2. 1
      src/Avalonia.Controls/Automation/Peers/AutomationPeer.cs
  3. 24
      src/Avalonia.Controls/Automation/Peers/ComboBoxItemAutomationPeer.cs
  4. 7
      src/Avalonia.Controls/ComboBoxItem.cs
  5. 1
      src/Avalonia.Native/avn.idl
  6. 1
      src/Windows/Avalonia.Win32/Automation/AutomationNode.cs

1
native/Avalonia.Native/src/OSX/automation.mm

@ -75,6 +75,7 @@ public:
case AutomationCalendar: return NSAccessibilityGridRole;
case AutomationCheckBox: return NSAccessibilityCheckBoxRole;
case AutomationComboBox: return NSAccessibilityPopUpButtonRole;
case AutomationComboBoxItem: return NSAccessibilityMenuItemRole;
case AutomationEdit: return NSAccessibilityTextFieldRole;
case AutomationHyperlink: return NSAccessibilityLinkRole;
case AutomationImage: return NSAccessibilityImageRole;

1
src/Avalonia.Controls/Automation/Peers/AutomationPeer.cs

@ -13,6 +13,7 @@ namespace Avalonia.Automation.Peers
Calendar,
CheckBox,
ComboBox,
ComboBoxItem,
Edit,
Hyperlink,
Image,

24
src/Avalonia.Controls/Automation/Peers/ComboBoxItemAutomationPeer.cs

@ -0,0 +1,24 @@
using System;
using Avalonia.Automation.Platform;
using Avalonia.Automation.Provider;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Selection;
#nullable enable
namespace Avalonia.Automation.Peers
{
public class ComboBoxItemAutomationPeer : ListItemAutomationPeer
{
public ComboBoxItemAutomationPeer(IAutomationNodeFactory factory, ComboBoxItem owner)
: base(factory, owner)
{
}
protected override AutomationControlType GetAutomationControlTypeCore()
{
return AutomationControlType.ComboBoxItem;
}
}
}

7
src/Avalonia.Controls/ComboBoxItem.cs

@ -1,5 +1,7 @@
using System;
using System.Reactive.Linq;
using Avalonia.Automation.Peers;
using Avalonia.Automation.Platform;
namespace Avalonia.Controls
{
@ -13,5 +15,10 @@ namespace Avalonia.Controls
this.GetObservable(ComboBoxItem.IsFocusedProperty).Where(focused => focused)
.Subscribe(_ => (Parent as ComboBox)?.ItemFocused(this));
}
protected override AutomationPeer OnCreateAutomationPeer(IAutomationNodeFactory factory)
{
return new ComboBoxItemAutomationPeer(factory, this);
}
}
}

1
src/Avalonia.Native/avn.idl

@ -414,6 +414,7 @@ enum AvnAutomationControlType
AutomationCalendar,
AutomationCheckBox,
AutomationComboBox,
AutomationComboBoxItem,
AutomationEdit,
AutomationHyperlink,
AutomationImage,

1
src/Windows/Avalonia.Win32/Automation/AutomationNode.cs

@ -299,6 +299,7 @@ namespace Avalonia.Win32.Automation
AutomationControlType.Calendar => UiaControlTypeId.Calendar,
AutomationControlType.CheckBox => UiaControlTypeId.CheckBox,
AutomationControlType.ComboBox => UiaControlTypeId.ComboBox,
AutomationControlType.ComboBoxItem => UiaControlTypeId.ListItem,
AutomationControlType.Edit => UiaControlTypeId.Edit,
AutomationControlType.Hyperlink => UiaControlTypeId.Hyperlink,
AutomationControlType.Image => UiaControlTypeId.Image,

Loading…
Cancel
Save