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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
16 additions and
0 deletions
native/Avalonia.Native/src/OSX/automation.mm
src/Avalonia.Native/AvnAutomationPeer.cs
src/Avalonia.Native/avn.idl
@ -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
- (id)accessibilityMinValue
{
{
if (_peer->IsRangeValueProvider())
if (_peer->IsRangeValueProvider())
@ -201,6 +201,7 @@ namespace Avalonia.Native
public int IsValueProvider ( ) = > IsProvider < IValueProvider > ( ) ;
public int IsValueProvider ( ) = > IsProvider < IValueProvider > ( ) ;
public IAvnString ? ValueProvider_GetValue ( ) = > ValueProvider . Value . ToAvnString ( ) ;
public IAvnString ? ValueProvider_GetValue ( ) = > ValueProvider . Value . ToAvnString ( ) ;
public void ValueProvider_SetValue ( string value ) = > ValueProvider . SetValue ( value ) ;
public void ValueProvider_SetValue ( string value ) = > ValueProvider . SetValue ( value ) ;
public int ValueProvider_IsReadOnly ( ) = > ValueProvider . IsReadOnly . AsComBool ( ) ;
[return: NotNullIfNotNull("peer")]
[return: NotNullIfNotNull("peer")]
public static AvnAutomationPeer ? Wrap ( AutomationPeer ? peer )
public static AvnAutomationPeer ? Wrap ( AutomationPeer ? peer )
@ -1329,6 +1329,7 @@ interface IAvnAutomationPeer : IUnknown
bool IsValueProvider();
bool IsValueProvider();
IAvnString* ValueProvider_GetValue();
IAvnString* ValueProvider_GetValue();
void ValueProvider_SetValue([const] char* value);
void ValueProvider_SetValue([const] char* value);
bool ValueProvider_IsReadOnly();
IAvnString* GetHelpText();
IAvnString* GetHelpText();
IAvnString* GetPlaceholderText();
IAvnString* GetPlaceholderText();