| Index: views/focus/focus_manager.cc
|
| diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc
|
| index 5ebcb71f8734899f6fea872df96c14007c003c40..3ee07552a6da5129eabd4c46fe60e0fd715b6eb1 100644
|
| --- a/views/focus/focus_manager.cc
|
| +++ b/views/focus/focus_manager.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/auto_reset.h"
|
| #include "base/logging.h"
|
| #include "build/build_config.h"
|
| +#include "ui/base/accelerator_manager.h"
|
| #include "ui/base/keycodes/keyboard_codes.h"
|
| #include "ui/base/models/accelerator.h"
|
| #include "views/focus/focus_search.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) {
|
|
|