OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/logging.h" | 5 #include "base/logging.h" |
6 #include "chrome/browser/view_ids.h" | 6 #include "chrome/browser/view_ids.h" |
7 #include "chrome/browser/views/frame/browser_view.h" | 7 #include "chrome/browser/views/frame/browser_view.h" |
| 8 #include "chrome/browser/views/location_bar/location_bar_view.h" |
8 #include "chrome/browser/views/accessible_toolbar_view.h" | 9 #include "chrome/browser/views/accessible_toolbar_view.h" |
9 #include "views/controls/button/menu_button.h" | 10 #include "views/controls/button/menu_button.h" |
10 #include "views/controls/native/native_view_host.h" | 11 #include "views/controls/native/native_view_host.h" |
11 #include "views/focus/focus_search.h" | 12 #include "views/focus/focus_search.h" |
12 #include "views/focus/view_storage.h" | 13 #include "views/focus/view_storage.h" |
13 #include "views/widget/tooltip_manager.h" | 14 #include "views/widget/tooltip_manager.h" |
14 #include "views/widget/widget.h" | 15 #include "views/widget/widget.h" |
15 | 16 |
16 AccessibleToolbarView::AccessibleToolbarView() | 17 AccessibleToolbarView::AccessibleToolbarView() |
17 : toolbar_has_focus_(false), | 18 : toolbar_has_focus_(false), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 focus_manager_->AddFocusChangeListener(this); | 75 focus_manager_->AddFocusChangeListener(this); |
75 | 76 |
76 return true; | 77 return true; |
77 } | 78 } |
78 | 79 |
79 bool AccessibleToolbarView::SetToolbarFocusAndFocusDefault( | 80 bool AccessibleToolbarView::SetToolbarFocusAndFocusDefault( |
80 int view_storage_id) { | 81 int view_storage_id) { |
81 return SetToolbarFocus(view_storage_id, GetDefaultFocusableChild()); | 82 return SetToolbarFocus(view_storage_id, GetDefaultFocusableChild()); |
82 } | 83 } |
83 | 84 |
84 void AccessibleToolbarView::RemoveToolbarFocusIfNoChildHasFocus() { | |
85 views::View* focused_view = focus_manager_->GetFocusedView(); | |
86 if (toolbar_has_focus_ && (!focused_view || !IsParentOf(focused_view))) | |
87 RemoveToolbarFocus(); | |
88 } | |
89 | |
90 void AccessibleToolbarView::RemoveToolbarFocus() { | 85 void AccessibleToolbarView::RemoveToolbarFocus() { |
91 focus_manager_->RemoveFocusChangeListener(this); | 86 focus_manager_->RemoveFocusChangeListener(this); |
92 toolbar_has_focus_ = false; | 87 toolbar_has_focus_ = false; |
93 | 88 |
94 focus_manager_->UnregisterAccelerator(home_key_, this); | 89 focus_manager_->UnregisterAccelerator(home_key_, this); |
95 focus_manager_->UnregisterAccelerator(end_key_, this); | 90 focus_manager_->UnregisterAccelerator(end_key_, this); |
96 focus_manager_->UnregisterAccelerator(escape_key_, this); | 91 focus_manager_->UnregisterAccelerator(escape_key_, this); |
97 focus_manager_->UnregisterAccelerator(left_key_, this); | 92 focus_manager_->UnregisterAccelerator(left_key_, this); |
98 focus_manager_->UnregisterAccelerator(right_key_, this); | 93 focus_manager_->UnregisterAccelerator(right_key_, this); |
99 } | 94 } |
100 | 95 |
| 96 void AccessibleToolbarView::RemoveToolbarFocusIfNoChildHasFocus() { |
| 97 views::View* focused_view = focus_manager_->GetFocusedView(); |
| 98 if (toolbar_has_focus_ && (!focused_view || !IsParentOf(focused_view))) |
| 99 RemoveToolbarFocus(); |
| 100 } |
| 101 |
101 void AccessibleToolbarView::RestoreLastFocusedView() { | 102 void AccessibleToolbarView::RestoreLastFocusedView() { |
102 views::ViewStorage* view_storage = views::ViewStorage::GetSharedInstance(); | 103 views::ViewStorage* view_storage = views::ViewStorage::GetSharedInstance(); |
103 views::View* last_focused_view = | 104 views::View* last_focused_view = |
104 view_storage->RetrieveView(last_focused_view_storage_id_); | 105 view_storage->RetrieveView(last_focused_view_storage_id_); |
105 if (last_focused_view) { | 106 if (last_focused_view) { |
106 focus_manager_->SetFocusedView(last_focused_view); | 107 focus_manager_->SetFocusedView(last_focused_view); |
107 } else { | 108 } else { |
108 // Focus the location bar | 109 // Focus the location bar |
109 views::View* view = GetAncestorWithClassName(BrowserView::kViewClassName); | 110 views::View* view = GetAncestorWithClassName(BrowserView::kViewClassName); |
110 if (view) { | 111 if (view) { |
(...skipping 24 matching lines...) Expand all Loading... |
135 | 136 |
136 views::FocusTraversable* AccessibleToolbarView::GetPaneFocusTraversable() { | 137 views::FocusTraversable* AccessibleToolbarView::GetPaneFocusTraversable() { |
137 if (toolbar_has_focus_) | 138 if (toolbar_has_focus_) |
138 return this; | 139 return this; |
139 else | 140 else |
140 return NULL; | 141 return NULL; |
141 } | 142 } |
142 | 143 |
143 bool AccessibleToolbarView::AcceleratorPressed( | 144 bool AccessibleToolbarView::AcceleratorPressed( |
144 const views::Accelerator& accelerator) { | 145 const views::Accelerator& accelerator) { |
145 // Special case: don't handle arrows for native views, like the | 146 // Special case: don't handle arrows for certain views, like the |
146 // location bar's edit text view, which needs them for text editing. | 147 // location bar's edit text view, which need them for text editing. |
147 views::View* focused_view = focus_manager_->GetFocusedView(); | 148 views::View* focused_view = focus_manager_->GetFocusedView(); |
148 if (focused_view->GetClassName() == views::NativeViewHost::kViewClassName && | 149 if ((focused_view->GetClassName() == LocationBarView::kViewClassName || |
| 150 focused_view->GetClassName() == views::NativeViewHost::kViewClassName) && |
149 (accelerator.GetKeyCode() == base::VKEY_LEFT || | 151 (accelerator.GetKeyCode() == base::VKEY_LEFT || |
150 accelerator.GetKeyCode() == base::VKEY_RIGHT)) { | 152 accelerator.GetKeyCode() == base::VKEY_RIGHT)) { |
151 return false; | 153 return false; |
152 } | 154 } |
153 | 155 |
154 switch (accelerator.GetKeyCode()) { | 156 switch (accelerator.GetKeyCode()) { |
155 case base::VKEY_ESCAPE: | 157 case base::VKEY_ESCAPE: |
156 RemoveToolbarFocus(); | 158 RemoveToolbarFocus(); |
157 RestoreLastFocusedView(); | 159 RestoreLastFocusedView(); |
158 return true; | 160 return true; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 | 221 |
220 views::FocusTraversable* AccessibleToolbarView::GetFocusTraversableParent() { | 222 views::FocusTraversable* AccessibleToolbarView::GetFocusTraversableParent() { |
221 DCHECK(toolbar_has_focus_); | 223 DCHECK(toolbar_has_focus_); |
222 return NULL; | 224 return NULL; |
223 } | 225 } |
224 | 226 |
225 views::View* AccessibleToolbarView::GetFocusTraversableParentView() { | 227 views::View* AccessibleToolbarView::GetFocusTraversableParentView() { |
226 DCHECK(toolbar_has_focus_); | 228 DCHECK(toolbar_has_focus_); |
227 return NULL; | 229 return NULL; |
228 } | 230 } |
OLD | NEW |