From f46758f972f71531319957f075b9d5d334343bbe Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Fri, 12 Dec 2025 12:34:47 +0100 Subject: [PATCH] Implement macOS accessibility value setter (#20262) --- native/Avalonia.Native/src/OSX/automation.mm | 16 ++++++++++++++++ .../Automation/Provider/IRangeValueProvider.cs | 2 +- .../Automation/Provider/IValueProvider.cs | 2 +- src/Avalonia.Native/avn.idl | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/automation.mm b/native/Avalonia.Native/src/OSX/automation.mm index fccb53b7aa..30e1f5ea00 100644 --- a/native/Avalonia.Native/src/OSX/automation.mm +++ b/native/Avalonia.Native/src/OSX/automation.mm @@ -216,6 +216,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 b80da03bd7..2fff3f3794 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -1317,7 +1317,7 @@ interface IAvnAutomationPeer : IUnknown bool IsValueProvider(); IAvnString* ValueProvider_GetValue(); - void ValueProvider_SetValue(char* value); + void ValueProvider_SetValue([const] char* value); IAvnString* GetHelpText();