Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/accessibility/ax_widget_obj_wrapper.h" | 5 #include "ui/views/accessibility/ax_widget_obj_wrapper.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "ui/accessibility/ax_action_data.h" | |
| 8 #include "ui/accessibility/ax_node_data.h" | 9 #include "ui/accessibility/ax_node_data.h" |
| 9 #include "ui/views/accessibility/ax_aura_obj_cache.h" | 10 #include "ui/views/accessibility/ax_aura_obj_cache.h" |
| 10 #include "ui/views/accessibility/ax_aura_obj_wrapper.h" | 11 #include "ui/views/accessibility/ax_aura_obj_wrapper.h" |
| 11 #include "ui/views/widget/widget.h" | 12 #include "ui/views/widget/widget.h" |
| 12 #include "ui/views/widget/widget_delegate.h" | 13 #include "ui/views/widget/widget_delegate.h" |
| 13 | 14 |
| 14 namespace views { | 15 namespace views { |
| 15 | 16 |
| 16 AXWidgetObjWrapper::AXWidgetObjWrapper(Widget* widget) : widget_(widget) { | 17 AXWidgetObjWrapper::AXWidgetObjWrapper(Widget* widget) : widget_(widget) { |
| 17 widget->AddObserver(this); | 18 widget->AddObserver(this); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 49 base::UTF16ToUTF8( | 50 base::UTF16ToUTF8( |
| 50 widget_->widget_delegate()->GetAccessibleWindowTitle())); | 51 widget_->widget_delegate()->GetAccessibleWindowTitle())); |
| 51 out_node_data->location = gfx::RectF(widget_->GetWindowBoundsInScreen()); | 52 out_node_data->location = gfx::RectF(widget_->GetWindowBoundsInScreen()); |
| 52 out_node_data->state = 0; | 53 out_node_data->state = 0; |
| 53 } | 54 } |
| 54 | 55 |
| 55 int32_t AXWidgetObjWrapper::GetID() { | 56 int32_t AXWidgetObjWrapper::GetID() { |
| 56 return AXAuraObjCache::GetInstance()->GetID(widget_); | 57 return AXAuraObjCache::GetInstance()->GetID(widget_); |
| 57 } | 58 } |
| 58 | 59 |
| 60 bool AXWidgetObjWrapper::HandleAccessibleAction( | |
|
David Tseng
2017/04/06 16:45:44
I think this is the wrong level of abstraction to
dmazzoni
2017/04/07 23:34:09
No, because a HIT_TEST is fired on the root. We ju
| |
| 61 const ui::AXActionData& action) { | |
| 62 if (action.action == ui::AX_ACTION_HIT_TEST) { | |
| 63 // For a hit test event, try to delegate to a View, and if that | |
| 64 // fails fire the event directly. | |
| 65 views::View* root_view = widget_->GetRootView(); | |
| 66 views::View* hit_view = | |
| 67 root_view->GetEventHandlerForPoint(action.target_point); | |
| 68 if (hit_view) { | |
| 69 AXAuraObjWrapper* view_wrapper = | |
| 70 AXAuraObjCache::GetInstance()->GetOrCreate(hit_view); | |
| 71 if (view_wrapper) | |
| 72 return view_wrapper->HandleAccessibleAction(action); | |
| 73 } | |
| 74 | |
| 75 AXAuraObjCache::GetInstance()->FireEvent(this, | |
| 76 action.hit_test_event_to_fire); | |
| 77 return true; | |
| 78 } | |
| 79 | |
| 80 return false; | |
| 81 } | |
| 82 | |
| 59 void AXWidgetObjWrapper::OnWidgetDestroying(Widget* widget) { | 83 void AXWidgetObjWrapper::OnWidgetDestroying(Widget* widget) { |
| 60 AXAuraObjCache::GetInstance()->Remove(widget); | 84 AXAuraObjCache::GetInstance()->Remove(widget); |
| 61 } | 85 } |
| 62 | 86 |
| 63 void AXWidgetObjWrapper::OnWidgetClosing(Widget* widget) { | 87 void AXWidgetObjWrapper::OnWidgetClosing(Widget* widget) { |
| 64 AXAuraObjCache::GetInstance()->Remove(widget); | 88 AXAuraObjCache::GetInstance()->Remove(widget); |
| 65 } | 89 } |
| 66 | 90 |
| 67 void AXWidgetObjWrapper::OnWidgetVisibilityChanged(Widget*, bool) { | 91 void AXWidgetObjWrapper::OnWidgetVisibilityChanged(Widget*, bool) { |
| 68 // If a widget changes visibility it may affect what's focused, in particular | 92 // If a widget changes visibility it may affect what's focused, in particular |
| 69 // when a widget that contains the focused view gets hidden. | 93 // when a widget that contains the focused view gets hidden. |
| 70 AXAuraObjCache::GetInstance()->OnFocusedViewChanged(); | 94 AXAuraObjCache::GetInstance()->OnFocusedViewChanged(); |
| 71 } | 95 } |
| 72 | 96 |
| 73 void AXWidgetObjWrapper::OnWillRemoveView(Widget* widget, View* view) { | 97 void AXWidgetObjWrapper::OnWillRemoveView(Widget* widget, View* view) { |
| 74 AXAuraObjCache::GetInstance()->RemoveViewSubtree(view); | 98 AXAuraObjCache::GetInstance()->RemoveViewSubtree(view); |
| 75 } | 99 } |
| 76 | 100 |
| 77 } // namespace views | 101 } // namespace views |
| OLD | NEW |