Implement accessibilityIsAttributeSettable: for all attributes

Previously if using the Accessibility Inspector exceptions could be thrown.
This commit is contained in:
Allan Odgaard
2013-12-21 11:45:01 +07:00
parent 54de23f940
commit 5edd3479ba
7 changed files with 179 additions and 117 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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])

View File

@@ -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]])

View File

@@ -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])

View File

@@ -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])

View File

@@ -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];
}