From 2bf7b15446198e354b238d4ec455ae9214965702 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Wed, 21 Nov 2018 10:53:26 +0100 Subject: [PATCH] macOS accessibility: implement accessibilityLabel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We had an implementation of this based on the old attribute based API, which also works. This cleans it up and adds the setter. Change-Id: I886fc9c89ee08b9f4f9aabec00ac1a5b9a800c6f Reviewed-by: Tor Arne Vestbø --- .../cocoa/qcocoaaccessibilityelement.mm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index 4c72cbd501c..675736ca5d8 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -282,6 +282,22 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of return QCocoaScreen::mapToNative(iface->rect()); } +- (NSString*)accessibilityLabel { + QAccessibleInterface *iface = QAccessible::accessibleInterface(axid); + if (!iface || !iface->isValid()) { + qWarning() << "Called accessibilityLabel on invalid object: " << axid; + return nil; + } + return iface->text(QAccessible::Description).toNSString(); +} + +- (void)setAccessibilityLabel:(NSString*)label{ + QAccessibleInterface *iface = QAccessible::accessibleInterface(axid); + if (!iface || !iface->isValid()) + return; + iface->setText(QAccessible::Description, QString::fromNSString(label)); +} + - (id) minValueAttribute:(QAccessibleInterface*)iface { if (QAccessibleValueInterface *val = iface->valueInterface()) return @(val->minimumValue().toDouble()); @@ -332,7 +348,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of return nil; return iface->text(QAccessible::Name).toNSString(); } else if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute]) { - return iface->text(QAccessible::Description).toNSString(); + return [self accessibilityLabel]; } else if ([attribute isEqualToString:NSAccessibilityEnabledAttribute]) { return @(!iface->state().disabled); } else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {