diff --git a/native/Avalonia.Native/src/OSX/automation.mm b/native/Avalonia.Native/src/OSX/automation.mm index 93a67a64e0..bc4e94e7e5 100644 --- a/native/Avalonia.Native/src/OSX/automation.mm +++ b/native/Avalonia.Native/src/OSX/automation.mm @@ -184,6 +184,22 @@ return [super accessibilityValue]; } +- (void)setAccessibilityValue:(id)newValue +{ + if (_peer->IsValueProvider()) + { + if (newValue == nil) + _peer->ValueProvider_SetValue(nil); + else if ([newValue isKindOfClass:[NSString class]]) + _peer->ValueProvider_SetValue([(NSString*)newValue UTF8String]); + } + else if (_peer->IsRangeValueProvider()) + { + if ([newValue isKindOfClass:[NSNumber class]]) + _peer->RangeValueProvider_SetValue([(NSNumber*)newValue doubleValue]); + } +} + - (id)accessibilityMinValue { if (_peer->IsRangeValueProvider()) diff --git a/src/Avalonia.Controls/Automation/Provider/IRangeValueProvider.cs b/src/Avalonia.Controls/Automation/Provider/IRangeValueProvider.cs index 0cdeeb3065..1c3f6d5a8b 100644 --- a/src/Avalonia.Controls/Automation/Provider/IRangeValueProvider.cs +++ b/src/Avalonia.Controls/Automation/Provider/IRangeValueProvider.cs @@ -127,7 +127,7 @@ /// /// macOS /// - /// NSAccessibilityProtocol.setAccessibilityValue (not implemented) + /// NSAccessibilityProtocol.setAccessibilityValue /// /// /// diff --git a/src/Avalonia.Controls/Automation/Provider/IValueProvider.cs b/src/Avalonia.Controls/Automation/Provider/IValueProvider.cs index 093327fa71..bd920fa4c4 100644 --- a/src/Avalonia.Controls/Automation/Provider/IValueProvider.cs +++ b/src/Avalonia.Controls/Automation/Provider/IValueProvider.cs @@ -57,7 +57,7 @@ /// /// macOS /// - /// NSAccessibilityProtocol.setAccessibilityValue (not implemented) + /// NSAccessibilityProtocol.setAccessibilityValue /// /// /// diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 5e68635511..2fde751f09 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -1304,7 +1304,7 @@ interface IAvnAutomationPeer : IUnknown bool IsValueProvider(); IAvnString* ValueProvider_GetValue(); - void ValueProvider_SetValue(char* value); + void ValueProvider_SetValue([const] char* value); IAvnString* GetHelpText(); int GetHeadingLevel();