Skip to content
This repository was archived by the owner on Nov 19, 2019. It is now read-only.

Commit fcc1899

Browse files
author
Dorian Johnson
committed
Merge pull request dorianj#32 from dusek/accessibility
Fix accessibility
2 parents 0862ce5 + 820e2dc commit fcc1899

File tree

2 files changed

+55
-11
lines changed

2 files changed

+55
-11
lines changed

Source/PSMTabBarCell.m

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,8 +740,17 @@ - (id)accessibilityAttributeValue:(NSString *)attribute {
740740
} else {
741741
attributeValue = [self stringValue];
742742
}
743-
} else if([attribute isEqualToString: NSAccessibilityFocusedAttribute]) {
744-
attributeValue = [NSNumber numberWithBool:([self tabState] == 2)];
743+
} else if([attribute isEqualToString: NSAccessibilityValueAttribute]) {
744+
attributeValue = [NSNumber numberWithBool:([self tabState] & PSMTab_SelectedMask)];
745+
} else if ([attribute isEqualToString:NSAccessibilityPositionAttribute] || [attribute isEqualToString:NSAccessibilitySizeAttribute]) {
746+
NSRect rect = [self frame];
747+
rect = [[self controlView] convertRect:rect toView:nil];
748+
rect = [[[self controlView] window] convertRectToScreen:rect];
749+
if ([attribute isEqualToString:NSAccessibilityPositionAttribute])
750+
attributeValue = [NSValue valueWithPoint:rect.origin];
751+
else
752+
attributeValue = [NSValue valueWithSize:rect.size];
753+
745754
} else {
746755
attributeValue = [super accessibilityAttributeValue:attribute];
747756
}

Source/PSMTabBarControl.m

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ - (void)initAddedProperties {
222222
_overflowPopUpButton = [[PSMOverflowPopUpButton alloc] initWithFrame:overflowButtonRect pullsDown:YES];
223223
[_overflowPopUpButton setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin];
224224
[_overflowPopUpButton setHidden:YES];
225+
[[_overflowPopUpButton cell] accessibilitySetOverrideValue:NSLocalizedString(@"More tabs", nil) forAttribute:NSAccessibilityDescriptionAttribute];
225226
[self addSubview:_overflowPopUpButton];
226227
[self _positionOverflowMenu];
227228

@@ -246,6 +247,7 @@ - (void)initAddedProperties {
246247
[_addTabButton setButtonType:NSMomentaryChangeButton];
247248
[_addTabButton setBordered:NO];
248249
[_addTabButton setBezelStyle:NSShadowlessSquareBezelStyle];
250+
[[_addTabButton cell] accessibilitySetOverrideValue:NSLocalizedString(@"Add Tab", nil) forAttribute:NSAccessibilityDescriptionAttribute];
249251
[self addSubview:_addTabButton];
250252

251253
if(_showAddTabButton) {
@@ -1996,6 +1998,8 @@ - (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)tabV
19961998
[self setNeedsDisplay:YES];
19971999
}
19982000
}
2001+
2002+
NSAccessibilityPostNotification(self, NSAccessibilityValueChangedNotification);
19992003

20002004
if([[self delegate] respondsToSelector:@selector(tabView:didSelectTabViewItem:)]) {
20012005
[[self delegate] performSelector:@selector(tabView:didSelectTabViewItem:) withObject:aTabView withObject:tabViewItem];
@@ -2288,16 +2292,47 @@ -(BOOL)accessibilityIsIgnored {
22882292
return NO;
22892293
}
22902294

2295+
- (NSArray*)accessibilityAttributeNames
2296+
{
2297+
static NSArray *attributes = nil;
2298+
if (!attributes) {
2299+
NSSet *set = [NSSet setWithArray:[super accessibilityAttributeNames]];
2300+
set = [set setByAddingObjectsFromArray:[NSArray arrayWithObjects:
2301+
NSAccessibilityTabsAttribute,
2302+
NSAccessibilityValueAttribute,
2303+
nil]];
2304+
attributes = [[set allObjects] retain];
2305+
}
2306+
return attributes;
2307+
}
2308+
22912309
- (id)accessibilityAttributeValue:(NSString *)attribute {
2292-
id attributeValue = nil;
2293-
if([attribute isEqualToString: NSAccessibilityRoleAttribute]) {
2294-
attributeValue = NSAccessibilityGroupRole;
2295-
} else if([attribute isEqualToString: NSAccessibilityChildrenAttribute]) {
2296-
attributeValue = NSAccessibilityUnignoredChildren(_cells);
2297-
} else {
2298-
attributeValue = [super accessibilityAttributeValue:attribute];
2299-
}
2300-
return attributeValue;
2310+
id attributeValue = nil;
2311+
if ([attribute isEqualToString: NSAccessibilityRoleAttribute]) {
2312+
attributeValue = NSAccessibilityTabGroupRole;
2313+
} else if ([attribute isEqualToString: NSAccessibilityChildrenAttribute]) {
2314+
NSMutableArray *children = [NSMutableArray arrayWithArray:[_cells objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [self numberOfVisibleTabs])]]];
2315+
if(![_overflowPopUpButton isHidden])
2316+
[children addObject:_overflowPopUpButton];
2317+
if(![_addTabButton isHidden])
2318+
[children addObject:_addTabButton];
2319+
attributeValue = NSAccessibilityUnignoredChildren(children);
2320+
} else if ([attribute isEqualToString: NSAccessibilityTabsAttribute]) {
2321+
attributeValue = NSAccessibilityUnignoredChildren(_cells);
2322+
} else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
2323+
NSTabViewItem *tabViewItem = [tabView selectedTabViewItem];
2324+
for (NSActionCell *cell in _cells) {
2325+
if ([cell representedObject] == tabViewItem)
2326+
attributeValue = cell;
2327+
}
2328+
if (!attributeValue)
2329+
{
2330+
NSLog(@"WARNING: seems no tab cell is currently selected");
2331+
}
2332+
} else {
2333+
attributeValue = [super accessibilityAttributeValue:attribute];
2334+
}
2335+
return attributeValue;
23012336
}
23022337

23032338
- (id)accessibilityHitTest:(NSPoint)point {

0 commit comments

Comments
 (0)