Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Unified Diff: views/focus/focus_manager.cc

Issue 8508056: Split a part of code managing accelerators from views::FocusManager. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address comments Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « views/focus/focus_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « views/focus/focus_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698