Browse Source

Report read-only value state to macOS accessibility (#21597)

AvnAccessibilityElement answers accessibilityIsAttributeSettable for the value attribute using IValueProvider.IsReadOnly, so AX clients see a read-only TextBox as not settable.
pull/21602/head
Jumar Macato 4 months ago
committed by GitHub
parent
commit
2646127851
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 14
      native/Avalonia.Native/src/OSX/automation.mm
  2. 1
      src/Avalonia.Native/AvnAutomationPeer.cs
  3. 1
      src/Avalonia.Native/avn.idl

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

@ -274,6 +274,20 @@
}
}
- (BOOL)accessibilityIsAttributeSettable:(NSAccessibilityAttributeName)attribute
{
if ([attribute isEqualToString:NSAccessibilityValueAttribute])
{
if (_peer->IsValueProvider())
return !_peer->ValueProvider_IsReadOnly();
if (_peer->IsRangeValueProvider())
return YES;
return NO;
}
return [super accessibilityIsAttributeSettable:attribute];
}
- (id)accessibilityMinValue
{
if (_peer->IsRangeValueProvider())

1
src/Avalonia.Native/AvnAutomationPeer.cs

@ -201,6 +201,7 @@ namespace Avalonia.Native
public int IsValueProvider() => IsProvider<IValueProvider>();
public IAvnString? ValueProvider_GetValue() => ValueProvider.Value.ToAvnString();
public void ValueProvider_SetValue(string value) => ValueProvider.SetValue(value);
public int ValueProvider_IsReadOnly() => ValueProvider.IsReadOnly.AsComBool();
[return: NotNullIfNotNull("peer")]
public static AvnAutomationPeer? Wrap(AutomationPeer? peer)

1
src/Avalonia.Native/avn.idl

@ -1329,6 +1329,7 @@ interface IAvnAutomationPeer : IUnknown
bool IsValueProvider();
IAvnString* ValueProvider_GetValue();
void ValueProvider_SetValue([const] char* value);
bool ValueProvider_IsReadOnly();
IAvnString* GetHelpText();
IAvnString* GetPlaceholderText();

Loading…
Cancel
Save