Chromium Code Reviews| Index: chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc |
| diff --git a/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc b/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc |
| index 233de2937e04f2d2063586e7147d061cccc62f33..1c8ca871216dba90980f3e77a2b401b255c80827 100644 |
| --- a/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc |
| +++ b/chrome/browser/ui/views/accessibility/accessibility_event_router_views.cc |
| @@ -18,6 +18,7 @@ |
| #include "ui/base/accessibility/accessible_view_state.h" |
| #include "ui/views/controls/menu/menu_item_view.h" |
| #include "ui/views/controls/menu/submenu_view.h" |
| +#include "ui/views/controls/tree/tree_view.h" |
| #include "ui/views/focus/view_storage.h" |
| #include "ui/views/view.h" |
| #include "ui/views/widget/widget.h" |
| @@ -208,6 +209,12 @@ void AccessibilityEventRouterViews::DispatchAccessibilityEvent( |
| case ui::AccessibilityTypes::ROLE_SLIDER: |
| SendSliderNotification(view, type, profile); |
| break; |
| + case ui::AccessibilityTypes::ROLE_OUTLINE: |
| + SendTreeNotification(view, type, profile); |
| + break; |
| + case ui::AccessibilityTypes::ROLE_OUTLINEITEM: |
| + SendTreeItemNotification(view, type, profile); |
| + break; |
| default: |
| // If this is encountered, please file a bug with the role that wasn't |
| // caught so we can add accessibility extension API support. |
| @@ -274,6 +281,60 @@ void AccessibilityEventRouterViews::SendMenuItemNotification( |
| } |
| // static |
| +void AccessibilityEventRouterViews::SendTreeNotification( |
| + views::View* view, |
| + ui::AccessibilityTypes::Event event, |
| + Profile* profile) { |
| + AccessibilityTreeInfo info(profile, GetViewName(view)); |
| + SendControlAccessibilityNotification(event, &info); |
| +} |
| + |
| +// static |
| +void AccessibilityEventRouterViews::SendTreeItemNotification( |
| + views::View* view, |
| + ui::AccessibilityTypes::Event event, |
| + Profile* profile) { |
| + std::string name = GetViewName(view); |
| + std::string context = GetViewContext(view); |
| + |
| + if (strcmp(view->GetClassName(), views::TreeView::kViewClassName) != 0) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + views::TreeView* tree = static_cast<views::TreeView*>(view); |
| + ui::TreeModelNode* selected_node = tree->GetSelectedNode(); |
| + ui::TreeModel* model = tree->model(); |
| + |
| + int siblings_count = model->GetChildCount(model->GetRoot()); |
| + int children_count = -1; |
| + int index = -1; |
| + int dept = -1; |
|
dmazzoni
2013/11/22 23:45:30
dept -> depth
zel
2013/11/23 00:17:16
Done.
|
| + bool is_expanded = false; |
| + |
| + if (selected_node) { |
| + children_count = model->GetChildCount(selected_node); |
| + is_expanded = tree->IsExpanded(selected_node); |
| + ui::TreeModelNode* parent_node = model->GetParent(selected_node); |
| + if (parent_node) { |
| + index = model->GetIndexOf(parent_node, selected_node); |
| + siblings_count = model->GetChildCount(parent_node); |
| + } |
| + // Get node depth. |
| + dept = 0; |
| + while (parent_node) { |
| + dept++; |
| + parent_node = model->GetParent(parent_node); |
| + } |
| + } |
| + |
| + AccessibilityTreeItemInfo info( |
| + profile, name, context, dept, index, siblings_count, children_count, |
| + is_expanded); |
| + SendControlAccessibilityNotification(event, &info); |
| +} |
| + |
| +// static |
| void AccessibilityEventRouterViews::SendTextfieldNotification( |
| views::View* view, |
| ui::AccessibilityTypes::Event event, |