diff --git a/Frameworks/OakAppKit/src/OakPasteboardSelector.mm b/Frameworks/OakAppKit/src/OakPasteboardSelector.mm index 7e8bee73..62090060 100644 --- a/Frameworks/OakAppKit/src/OakPasteboardSelector.mm +++ b/Frameworks/OakAppKit/src/OakPasteboardSelector.mm @@ -55,21 +55,28 @@ static size_t line_count (std::string const& text) } } +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityRoleAttribute, + NSAccessibilityValueAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:@[ - NSAccessibilityRoleAttribute, - NSAccessibilityValueAttribute, - ]]; - attributes = [set allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString*)attribute { id value = nil; diff --git a/Frameworks/OakAppKit/src/OakTabBarView.mm b/Frameworks/OakAppKit/src/OakTabBarView.mm index 1b7a9557..dcce9cae 100644 --- a/Frameworks/OakAppKit/src/OakTabBarView.mm +++ b/Frameworks/OakAppKit/src/OakTabBarView.mm @@ -373,26 +373,22 @@ layout_metrics_t::raw_layer_t layout_metrics_t::parse_layer (NSDictionary* item) - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - attributes = @[ - // generic - NSAccessibilityParentAttribute, - NSAccessibilityPositionAttribute, - NSAccessibilityRoleAttribute, - NSAccessibilityRoleDescriptionAttribute, - NSAccessibilitySizeAttribute, - NSAccessibilityTopLevelUIElementAttribute, - NSAccessibilityWindowAttribute, - // radio button - NSAccessibilityEnabledAttribute, - NSAccessibilityFocusedAttribute, - NSAccessibilityTitleAttribute, - NSAccessibilityValueAttribute, - NSAccessibilityHelpAttribute, - ]; - } + static NSArray* attributes = @[ + // generic + NSAccessibilityParentAttribute, + NSAccessibilityPositionAttribute, + NSAccessibilityRoleAttribute, + NSAccessibilityRoleDescriptionAttribute, + NSAccessibilitySizeAttribute, + NSAccessibilityTopLevelUIElementAttribute, + NSAccessibilityWindowAttribute, + // radio button + NSAccessibilityEnabledAttribute, + NSAccessibilityFocusedAttribute, + NSAccessibilityTitleAttribute, + NSAccessibilityValueAttribute, + NSAccessibilityHelpAttribute, + ]; return attributes; } @@ -970,27 +966,34 @@ layout_metrics_t::raw_layer_t layout_metrics_t::parse_layer (NSDictionary* item) return NO; } +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + // generic + NSAccessibilityRoleAttribute, + // tab group + NSAccessibilityChildrenAttribute, + NSAccessibilityContentsAttribute, + NSAccessibilityFocusedAttribute, + NSAccessibilityTabsAttribute, + NSAccessibilityValueAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:@[ - // generic - NSAccessibilityRoleAttribute, - // tab group - NSAccessibilityChildrenAttribute, - NSAccessibilityContentsAttribute, - NSAccessibilityFocusedAttribute, - NSAccessibilityTabsAttribute, - NSAccessibilityValueAttribute, - ]]; - attributes = [set allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString*)attribute { // generic attributes diff --git a/Frameworks/OakFileBrowser/src/OakFileBrowser.mm b/Frameworks/OakFileBrowser/src/OakFileBrowser.mm index 289b743e..ea5b6da3 100644 --- a/Frameworks/OakFileBrowser/src/OakFileBrowser.mm +++ b/Frameworks/OakFileBrowser/src/OakFileBrowser.mm @@ -71,21 +71,28 @@ static NSImage* IconImage (NSURL* url, NSSize size = NSMakeSize(16, 16)) return NO; } +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityRoleAttribute, + NSAccessibilityDescriptionAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:@[ - NSAccessibilityRoleAttribute, - NSAccessibilityDescriptionAttribute, - ]]; - attributes = [set allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString*)attribute { if([attribute isEqualToString:NSAccessibilityRoleAttribute]) diff --git a/Frameworks/OakFileBrowser/src/ui/OFBPathInfoCell.mm b/Frameworks/OakFileBrowser/src/ui/OFBPathInfoCell.mm index ff043fb9..0f7415fb 100644 --- a/Frameworks/OakFileBrowser/src/ui/OFBPathInfoCell.mm +++ b/Frameworks/OakFileBrowser/src/ui/OFBPathInfoCell.mm @@ -212,27 +212,34 @@ static void DrawSpinner (NSRect cellFrame, BOOL isFlipped, NSColor* color, doubl // = Accessibility = // ================= +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityDescriptionAttribute, + NSAccessibilityHelpAttribute, + NSAccessibilityURLAttribute, + NSAccessibilityFilenameAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { if(self.representedObject && [self.representedObject isKindOfClass:[FSItem class]]) { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:@[ - NSAccessibilityDescriptionAttribute, - NSAccessibilityHelpAttribute, - NSAccessibilityURLAttribute, - NSAccessibilityFilenameAttribute, - ]]; - attributes = [set allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } return [super accessibilityAttributeNames]; } +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString*)attribute { if(self.representedObject && [self.representedObject isKindOfClass:[FSItem class]]) diff --git a/Frameworks/OakFilterList/src/FileChooser.mm b/Frameworks/OakFilterList/src/FileChooser.mm index 992c2040..44d5102f 100644 --- a/Frameworks/OakFilterList/src/FileChooser.mm +++ b/Frameworks/OakFilterList/src/FileChooser.mm @@ -37,7 +37,32 @@ static NSButton* OakCreateScopeButton (NSString* label, SEL action, NSUInteger t @end @implementation OakScopeBarView -- (BOOL)accessibilityIsIgnored { return NO; } +- (BOOL)accessibilityIsIgnored +{ + return NO; +} + +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityRoleAttribute, + ]]; + return set; +} + +- (NSArray*)accessibilityAttributeNames +{ + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; + return attributes; +} + +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString *)attribute { if([attribute isEqualToString:NSAccessibilityRoleAttribute]) diff --git a/Frameworks/OakTextView/src/OakDocumentView.mm b/Frameworks/OakTextView/src/OakDocumentView.mm index 1ab655e8..829d08fe 100644 --- a/Frameworks/OakTextView/src/OakDocumentView.mm +++ b/Frameworks/OakTextView/src/OakDocumentView.mm @@ -840,21 +840,28 @@ static std::string const kSearchmarkType = "search"; return NO; } +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityRoleAttribute, + NSAccessibilityDescriptionAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:[super accessibilityAttributeNames]]; - set = [set setByAddingObjectsFromArray:@[ - NSAccessibilityRoleAttribute, - NSAccessibilityDescriptionAttribute, - ]]; - attributes = [set allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } +- (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute +{ + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; +} + - (id)accessibilityAttributeValue:(NSString*)attribute { if([attribute isEqualToString:NSAccessibilityRoleAttribute]) diff --git a/Frameworks/OakTextView/src/OakTextView.mm b/Frameworks/OakTextView/src/OakTextView.mm index 84931322..34fd4b68 100644 --- a/Frameworks/OakTextView/src/OakTextView.mm +++ b/Frameworks/OakTextView/src/OakTextView.mm @@ -104,24 +104,26 @@ struct buffer_refresh_callback_t; return NO; } +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + NSAccessibilityRoleAttribute, + NSAccessibilityRoleDescriptionAttribute, + NSAccessibilitySubroleAttribute, + NSAccessibilityParentAttribute, + NSAccessibilityWindowAttribute, + NSAccessibilityTopLevelUIElementAttribute, + NSAccessibilityPositionAttribute, + NSAccessibilitySizeAttribute, + NSAccessibilityTitleAttribute, + NSAccessibilityURLAttribute, + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - attributes = @[ - NSAccessibilityRoleAttribute, - NSAccessibilityRoleDescriptionAttribute, - NSAccessibilitySubroleAttribute, - NSAccessibilityParentAttribute, - NSAccessibilityWindowAttribute, - NSAccessibilityTopLevelUIElementAttribute, - NSAccessibilityPositionAttribute, - NSAccessibilitySizeAttribute, - NSAccessibilityTitleAttribute, - NSAccessibilityURLAttribute, - ]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } @@ -160,12 +162,16 @@ struct buffer_refresh_callback_t; - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { - return NO; + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return NO; + return [super accessibilityIsAttributeSettable:attribute]; } - (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute { - @throw [NSException exceptionWithName:NSAccessibilityException reason:[NSString stringWithFormat:@"Setting accessibility attribute not supported: %@", attribute] userInfo:nil]; + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + @throw [NSException exceptionWithName:NSAccessibilityException reason:[NSString stringWithFormat:@"Setting accessibility attribute not supported: %@", attribute] userInfo:nil]; + [super accessibilitySetValue:value forAttribute:attribute]; } - (NSArray*)accessibilityParameterizedAttributeNames @@ -1168,25 +1174,25 @@ doScroll: #define HANDLE_ATTR(attr) else if(ATTREQ_(ATTR(attr))) #define HANDLE_PATTR(attr) else if(ATTREQ_(PATTR(attr))) +- (NSSet*)myAccessibilityAttributeNames +{ + static NSSet* set = [NSSet setWithArray:@[ + ATTR(Role), + ATTR(Value), + ATTR(InsertionPointLineNumber), + ATTR(NumberOfCharacters), + ATTR(SelectedText), + ATTR(SelectedTextRange), + ATTR(SelectedTextRanges), + ATTR(VisibleCharacterRange), + ATTR(Children), + ]]; + return set; +} + - (NSArray*)accessibilityAttributeNames { - static NSArray* attributes = nil; - if(!attributes) - { - NSSet* set = [NSSet setWithArray:@[ - ATTR(Role), - ATTR(Value), - ATTR(InsertionPointLineNumber), - ATTR(NumberOfCharacters), - ATTR(SelectedText), - ATTR(SelectedTextRange), - ATTR(SelectedTextRanges), - ATTR(VisibleCharacterRange), - ATTR(Children), - ]]; - - attributes = [[set setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; - } + static NSArray* attributes = [[[self myAccessibilityAttributeNames] setByAddingObjectsFromArray:[super accessibilityAttributeNames]] allObjects]; return attributes; } @@ -1239,9 +1245,9 @@ doScroll: - (BOOL)accessibilityIsAttributeSettable:(NSString*)attribute { - NSArray* settable = @[ ATTR(Value), ATTR(SelectedText), ATTR(SelectedTextRange), ATTR(SelectedTextRanges) ]; - if([settable containsObject:attribute]) - return YES; + static NSArray* settable = @[ ATTR(Value), ATTR(SelectedText), ATTR(SelectedTextRange), ATTR(SelectedTextRanges) ]; + if([[self myAccessibilityAttributeNames] containsObject:attribute]) + return [settable containsObject:attribute]; return [super accessibilityIsAttributeSettable:attribute]; }