Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Unified Diff: ui/accessibility/platform/ax_platform_node_mac.mm

Issue 2957743002: MacViews: Fix VoiceOver feedback in editable fields. (Closed)
Patch Set: kSelectableTextAttributes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/views/widget/native_widget_mac_accessibility_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/accessibility/platform/ax_platform_node_mac.mm
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm
index 240240e6180bc11f40e56de4fa36fdafd9e65b81..62936942cb6eb03e7bf5a5d08d545c1d183d1ac8 100644
--- a/ui/accessibility/platform/ax_platform_node_mac.mm
+++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -412,6 +412,32 @@ void NotifyMacEvent(AXPlatformNodeCocoa* target, ui::AXEvent event_type) {
return axAttributes.autorelease();
}
+- (NSArray*)accessibilityParameterizedAttributeNames {
+ if (!node_)
+ return nil;
+
+ static NSArray* const kSelectableTextAttributes = [@[
+ NSAccessibilityLineForIndexParameterizedAttribute,
+ NSAccessibilityRangeForLineParameterizedAttribute,
+ NSAccessibilityStringForRangeParameterizedAttribute,
+ NSAccessibilityRangeForPositionParameterizedAttribute,
+ NSAccessibilityRangeForIndexParameterizedAttribute,
+ NSAccessibilityBoundsForRangeParameterizedAttribute,
+ NSAccessibilityRTFForRangeParameterizedAttribute,
+ NSAccessibilityStyleRangeForIndexParameterizedAttribute,
+ NSAccessibilityAttributedStringForRangeParameterizedAttribute,
+ ] retain];
+
+ switch (node_->GetData().role) {
+ case ui::AX_ROLE_TEXT_FIELD:
+ case ui::AX_ROLE_STATIC_TEXT:
+ return kSelectableTextAttributes;
+ default:
+ break;
+ }
+ return nil;
+}
+
- (BOOL)accessibilityIsAttributeSettable:(NSString*)attributeName {
if (node_->GetData().HasState(ui::AX_STATE_DISABLED))
return NO;
@@ -494,6 +520,14 @@ void NotifyMacEvent(AXPlatformNodeCocoa* target, ui::AXEvent event_type) {
return nil;
}
+- (id)accessibilityAttributeValue:(NSString*)attribute
+ forParameter:(id)parameter {
+ SEL selector = NSSelectorFromString([attribute stringByAppendingString:@":"]);
+ if ([self respondsToSelector:selector])
+ return [self performSelector:selector withObject:parameter];
+ return nil;
+}
+
// NSAccessibility attributes. Order them according to
// NSAccessibilityConstants.h, or see https://crbug.com/678898.
@@ -633,6 +667,69 @@ void NotifyMacEvent(AXPlatformNodeCocoa* target, ui::AXEvent event_type) {
return @0;
}
+// Parameterized text-specific attributes.
+
+- (id)AXLineForIndex:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSNumber class]]);
+ // Multiline is not supported on views.
+ return @0;
+}
+
+- (id)AXRangeForLine:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSNumber class]]);
+ DCHECK_EQ(0, [parameter intValue]);
+ return [NSValue valueWithRange:{0, [[self getAXValueAsString] length]}];
+}
+
+- (id)AXStringForRange:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSValue class]]);
+ return [[self getAXValueAsString] substringWithRange:[parameter rangeValue]];
+}
+
+- (id)AXRangeForPosition:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSValue class]]);
+ // TODO(tapted): Hit-test [parameter pointValue] and return an NSRange.
+ NOTIMPLEMENTED();
+ return nil;
+}
+
+- (id)AXRangeForIndex:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSNumber class]]);
+ NOTIMPLEMENTED();
+ return nil;
+}
+
+- (id)AXBoundsForRange:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSValue class]]);
+ // TODO(tapted): Provide an accessor on AXPlatformNodeDelegate to obtain this
+ // from ui::TextInputClient::GetCompositionCharacterBounds().
+ NOTIMPLEMENTED();
+ return nil;
+}
+
+- (id)AXRTFForRange:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSValue class]]);
+ NOTIMPLEMENTED();
+ return nil;
+}
+
+- (id)AXStyleRangeForIndex:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSNumber class]]);
+ NOTIMPLEMENTED();
+ return nil;
+}
+
+- (id)AXAttributedStringForRange:(id)parameter {
+ DCHECK([parameter isKindOfClass:[NSValue class]]);
+ base::scoped_nsobject<NSAttributedString> attributedString(
+ [[NSAttributedString alloc]
+ initWithString:[self AXStringForRange:parameter]]);
+ // TODO(tapted): views::WordLookupClient has a way to obtain the actual
+ // decorations, and BridgedContentView has a conversion function that creates
+ // an NSAttributedString. Refactor things so they can be used here.
+ return attributedString.autorelease();
+}
+
@end
namespace ui {
« no previous file with comments | « no previous file | ui/views/widget/native_widget_mac_accessibility_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698