summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--views/accessibility/accessibility_types.h1
-rw-r--r--views/accessibility/view_accessibility.cc5
-rw-r--r--views/controls/button/radio_button.cc7
-rw-r--r--views/controls/button/radio_button.h3
-rw-r--r--views/controls/native_control_win.cc6
5 files changed, 19 insertions, 3 deletions
diff --git a/views/accessibility/accessibility_types.h b/views/accessibility/accessibility_types.h
index 7dd991c..79108b1 100644
--- a/views/accessibility/accessibility_types.h
+++ b/views/accessibility/accessibility_types.h
@@ -55,6 +55,7 @@ class AccessibilityTypes {
ROLE_PANE,
ROLE_PROGRESSBAR,
ROLE_PUSHBUTTON,
+ ROLE_RADIOBUTTON,
ROLE_SCROLLBAR,
ROLE_SEPARATOR,
ROLE_STATICTEXT,
diff --git a/views/accessibility/view_accessibility.cc b/views/accessibility/view_accessibility.cc
index 3613d99..179c9f6 100644
--- a/views/accessibility/view_accessibility.cc
+++ b/views/accessibility/view_accessibility.cc
@@ -292,7 +292,8 @@ STDMETHODIMP ViewAccessibility::get_accChild(VARIANT var_child,
child_view = view_->GetChildViewAt(var_child.lVal - 1);
// Parents handle leaf IAccessible's.
- if (child_view && child_view->GetChildViewCount() == 0)
+ if (child_view && child_view->GetChildViewCount() == 0 &&
+ !child_view->child_widget())
return S_FALSE;
} else {
// Child is located elsewhere in this view's subtree.
@@ -826,6 +827,8 @@ int32 ViewAccessibility::MSAARole(AccessibilityTypes::Role role) {
return ROLE_SYSTEM_PROGRESSBAR;
case AccessibilityTypes::ROLE_PUSHBUTTON:
return ROLE_SYSTEM_PUSHBUTTON;
+ case AccessibilityTypes::ROLE_RADIOBUTTON:
+ return ROLE_SYSTEM_RADIOBUTTON;
case AccessibilityTypes::ROLE_SCROLLBAR:
return ROLE_SYSTEM_SCROLLBAR;
case AccessibilityTypes::ROLE_SEPARATOR:
diff --git a/views/controls/button/radio_button.cc b/views/controls/button/radio_button.cc
index 45e3da7..d7953e1 100644
--- a/views/controls/button/radio_button.cc
+++ b/views/controls/button/radio_button.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
@@ -60,6 +60,11 @@ void RadioButton::SetChecked(bool checked) {
////////////////////////////////////////////////////////////////////////////////
// RadioButton, View overrides:
+bool RadioButton::GetAccessibleRole(AccessibilityTypes::Role* role) {
+ *role = AccessibilityTypes::ROLE_RADIOBUTTON;
+ return true;
+}
+
View* RadioButton::GetSelectedViewForGroup(int group_id) {
std::vector<View*> views;
GetRootView()->GetViewsWithGroup(group_id, &views);
diff --git a/views/controls/button/radio_button.h b/views/controls/button/radio_button.h
index 3882ec2..980395f 100644
--- a/views/controls/button/radio_button.h
+++ b/views/controls/button/radio_button.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
@@ -24,6 +24,7 @@ class RadioButton : public Checkbox {
virtual void SetChecked(bool checked);
// Overridden from View:
+ virtual bool GetAccessibleRole(AccessibilityTypes::Role* role);
virtual View* GetSelectedViewForGroup(int group_id);
virtual bool IsGroupFocusTraversable() const;
virtual void OnMouseReleased(const MouseEvent& event, bool canceled);
diff --git a/views/controls/native_control_win.cc b/views/controls/native_control_win.cc
index c73d17c..217fee1 100644
--- a/views/controls/native_control_win.cc
+++ b/views/controls/native_control_win.cc
@@ -92,6 +92,12 @@ void NativeControlWin::VisibilityChanged(View* starting_from, bool is_visible) {
void NativeControlWin::Focus() {
DCHECK(native_view());
SetFocus(native_view());
+
+ // Since we are being wrapped by a view, accessibility should receive
+ // the super class as the focused view.
+ View* parent_view = GetParent();
+ if (parent_view->HasFocus())
+ parent_view->NotifyAccessibilityEvent(AccessibilityTypes::EVENT_FOCUS);
}
////////////////////////////////////////////////////////////////////////////////