Chromium Code Reviews| Index: views/focus/focus_manager.cc |
| diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc |
| index 5ebcb71f8734899f6fea872df96c14007c003c40..99c73b0e1e811994fe314220b840f769b530b638 100644 |
| --- a/views/focus/focus_manager.cc |
| +++ b/views/focus/focus_manager.cc |
| @@ -11,6 +11,7 @@ |
| #include "build/build_config.h" |
| #include "ui/base/keycodes/keyboard_codes.h" |
| #include "ui/base/models/accelerator.h" |
| +#include "ui/base/accelerator_manager.h" |
|
tfarina
2011/11/14 15:59:54
nit: sort alphabetical.
mazda
2011/11/14 19:16:54
Done.
|
| #include "views/focus/focus_search.h" |
| #include "views/focus/view_storage.h" |
| #include "views/focus/widget_focus_manager.h" |
| @@ -23,6 +24,7 @@ namespace views { |
| FocusManager::FocusManager(Widget* widget) |
| : widget_(widget), |
| focused_view_(NULL), |
| + accelerator_manager_(new ui::AcceleratorManager), |
| focus_change_reason_(kReasonDirectFocusChange), |
| is_changing_focus_(false) { |
| DCHECK(widget_); |
| @@ -361,60 +363,25 @@ View* FocusManager::FindFocusableView(FocusTraversable* focus_traversable, |
| void FocusManager::RegisterAccelerator( |
| const ui::Accelerator& accelerator, |
| ui::AcceleratorTarget* target) { |
| - AcceleratorTargetList& targets = accelerators_[accelerator]; |
| - DCHECK(std::find(targets.begin(), targets.end(), target) == targets.end()) |
| - << "Registering the same target multiple times"; |
| - targets.push_front(target); |
| + accelerator_manager_->Register(accelerator, target); |
| } |
| void FocusManager::UnregisterAccelerator(const ui::Accelerator& accelerator, |
| ui::AcceleratorTarget* target) { |
| - AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); |
| - if (map_iter == accelerators_.end()) { |
| - NOTREACHED() << "Unregistering non-existing accelerator"; |
| - return; |
| - } |
| - |
| - AcceleratorTargetList* targets = &map_iter->second; |
| - AcceleratorTargetList::iterator target_iter = |
| - std::find(targets->begin(), targets->end(), target); |
| - if (target_iter == targets->end()) { |
| - NOTREACHED() << "Unregistering accelerator for wrong target"; |
| - return; |
| - } |
| - |
| - targets->erase(target_iter); |
| + accelerator_manager_->Unregister(accelerator, target); |
| } |
| void FocusManager::UnregisterAccelerators(ui::AcceleratorTarget* target) { |
| - for (AcceleratorMap::iterator map_iter = accelerators_.begin(); |
| - map_iter != accelerators_.end(); ++map_iter) { |
| - AcceleratorTargetList* targets = &map_iter->second; |
| - targets->remove(target); |
| - } |
| + accelerator_manager_->UnregisterAll(target); |
| } |
| bool FocusManager::ProcessAccelerator(const ui::Accelerator& accelerator) { |
| - AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); |
| - if (map_iter != accelerators_.end()) { |
| - // We have to copy the target list here, because an AcceleratorPressed |
| - // event handler may modify the list. |
| - AcceleratorTargetList targets(map_iter->second); |
| - for (AcceleratorTargetList::iterator iter = targets.begin(); |
| - iter != targets.end(); ++iter) { |
| - if ((*iter)->AcceleratorPressed(accelerator)) |
| - return true; |
| - } |
| - } |
| - return false; |
| + return accelerator_manager_->Process(accelerator); |
| } |
| ui::AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( |
| const ui::Accelerator& accelerator) const { |
| - AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); |
| - if (map_iter == accelerators_.end() || map_iter->second.empty()) |
| - return NULL; |
| - return map_iter->second.front(); |
| + return accelerator_manager_->GetCurrentTarget(accelerator); |
| } |
| void FocusManager::FocusNativeView(gfx::NativeView native_view) { |