From 7d47dd279f736796742dd4d5d3adfa320a512321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Boris=20Dus=CC=8Cek?= Date: Sat, 8 Dec 2012 18:10:04 +0100 Subject: [PATCH] Make OakPasteboardSelector accessible Issues remaining: * VoiceOver for some reason cannot track keyboard focus (i.e. moving down the list with just down arrow does not move VoiceOver cursor). User has to move the VO cursor instead using VO-down (and keyboard cursor follows in this case) * the pasteboard window isn't focused automatically for VoiceOver, user has to switch manually to it using VO-F2-F2 --- .../OakAppKit/src/OakPasteboardSelector.mm | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Frameworks/OakAppKit/src/OakPasteboardSelector.mm b/Frameworks/OakAppKit/src/OakPasteboardSelector.mm index 853572e4..587ff826 100644 --- a/Frameworks/OakAppKit/src/OakPasteboardSelector.mm +++ b/Frameworks/OakAppKit/src/OakPasteboardSelector.mm @@ -54,6 +54,33 @@ static size_t line_count (std::string text) } } +- (NSArray*)accessibilityAttributeNames +{ + static NSArray* attributes = nil; + if(!attributes) + { + NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; + set = [set setByAddingObjectsFromArray:@[ + NSAccessibilityRoleAttribute, + NSAccessibilityValueAttribute, + ]]; + attributes = [[set allObjects] retain]; + } + return attributes; +} + +- (id)accessibilityAttributeValue:(NSString*)attribute +{ + id value = nil; + if([attribute isEqualToString:NSAccessibilityRoleAttribute]) + value = NSAccessibilityStaticTextRole; + else if([attribute isEqualToString:NSAccessibilityValueAttribute]) + value = [self objectValue]; + else + value = [super accessibilityAttributeValue:attribute]; + return value; +} + - (size_t)lineCountForText:(NSString*)text { return oak::cap((size_t)1, line_count([text UTF8String]), maxLines);