| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "views/focus/focus_manager.h" | 5 #include "views/focus/focus_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
| 12 #include "ui/base/keycodes/keyboard_codes.h" | 12 #include "ui/base/keycodes/keyboard_codes.h" |
| 13 #include "views/accelerator.h" | 13 #include "ui/base/models/accelerator.h" |
| 14 #include "views/focus/focus_search.h" | 14 #include "views/focus/focus_search.h" |
| 15 #include "views/focus/view_storage.h" | 15 #include "views/focus/view_storage.h" |
| 16 #include "views/focus/widget_focus_manager.h" | 16 #include "views/focus/widget_focus_manager.h" |
| 17 #include "views/view.h" | 17 #include "views/view.h" |
| 18 #include "views/widget/root_view.h" | 18 #include "views/widget/root_view.h" |
| 19 #include "views/widget/widget.h" | 19 #include "views/widget/widget.h" |
| 20 | 20 |
| 21 namespace views { | 21 namespace views { |
| 22 | 22 |
| 23 FocusManager::FocusManager(Widget* widget) | 23 FocusManager::FocusManager(Widget* widget) |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } else if (index >= static_cast<int>(views.size())) { | 79 } else if (index >= static_cast<int>(views.size())) { |
| 80 index = 0; | 80 index = 0; |
| 81 } | 81 } |
| 82 SetFocusedViewWithReason(views[index], kReasonFocusTraversal); | 82 SetFocusedViewWithReason(views[index], kReasonFocusTraversal); |
| 83 return false; | 83 return false; |
| 84 } | 84 } |
| 85 | 85 |
| 86 // Process keyboard accelerators. | 86 // Process keyboard accelerators. |
| 87 // If the key combination matches an accelerator, the accelerator is | 87 // If the key combination matches an accelerator, the accelerator is |
| 88 // triggered, otherwise the key event is processed as usual. | 88 // triggered, otherwise the key event is processed as usual. |
| 89 Accelerator accelerator(event.key_code(), | 89 ui::Accelerator accelerator(event.key_code(), |
| 90 event.IsShiftDown(), | 90 event.IsShiftDown(), |
| 91 event.IsControlDown(), | 91 event.IsControlDown(), |
| 92 event.IsAltDown()); | 92 event.IsAltDown()); |
| 93 if (ProcessAccelerator(accelerator)) { | 93 if (ProcessAccelerator(accelerator)) { |
| 94 // If a shortcut was activated for this keydown message, do not propagate | 94 // If a shortcut was activated for this keydown message, do not propagate |
| 95 // the event further. | 95 // the event further. |
| 96 return false; | 96 return false; |
| 97 } | 97 } |
| 98 return true; | 98 return true; |
| 99 } | 99 } |
| 100 | 100 |
| 101 void FocusManager::ValidateFocusedView() { | 101 void FocusManager::ValidateFocusedView() { |
| 102 if (focused_view_) { | 102 if (focused_view_) { |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 reverse, | 352 reverse, |
| 353 FocusSearch::DOWN, | 353 FocusSearch::DOWN, |
| 354 false, | 354 false, |
| 355 &new_focus_traversable, | 355 &new_focus_traversable, |
| 356 &new_starting_view); | 356 &new_starting_view); |
| 357 } | 357 } |
| 358 return v; | 358 return v; |
| 359 } | 359 } |
| 360 | 360 |
| 361 void FocusManager::RegisterAccelerator( | 361 void FocusManager::RegisterAccelerator( |
| 362 const Accelerator& accelerator, | 362 const ui::Accelerator& accelerator, |
| 363 AcceleratorTarget* target) { | 363 ui::AcceleratorTarget* target) { |
| 364 AcceleratorTargetList& targets = accelerators_[accelerator]; | 364 AcceleratorTargetList& targets = accelerators_[accelerator]; |
| 365 DCHECK(std::find(targets.begin(), targets.end(), target) == targets.end()) | 365 DCHECK(std::find(targets.begin(), targets.end(), target) == targets.end()) |
| 366 << "Registering the same target multiple times"; | 366 << "Registering the same target multiple times"; |
| 367 targets.push_front(target); | 367 targets.push_front(target); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void FocusManager::UnregisterAccelerator(const Accelerator& accelerator, | 370 void FocusManager::UnregisterAccelerator(const ui::Accelerator& accelerator, |
| 371 AcceleratorTarget* target) { | 371 ui::AcceleratorTarget* target) { |
| 372 AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); | 372 AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); |
| 373 if (map_iter == accelerators_.end()) { | 373 if (map_iter == accelerators_.end()) { |
| 374 NOTREACHED() << "Unregistering non-existing accelerator"; | 374 NOTREACHED() << "Unregistering non-existing accelerator"; |
| 375 return; | 375 return; |
| 376 } | 376 } |
| 377 | 377 |
| 378 AcceleratorTargetList* targets = &map_iter->second; | 378 AcceleratorTargetList* targets = &map_iter->second; |
| 379 AcceleratorTargetList::iterator target_iter = | 379 AcceleratorTargetList::iterator target_iter = |
| 380 std::find(targets->begin(), targets->end(), target); | 380 std::find(targets->begin(), targets->end(), target); |
| 381 if (target_iter == targets->end()) { | 381 if (target_iter == targets->end()) { |
| 382 NOTREACHED() << "Unregistering accelerator for wrong target"; | 382 NOTREACHED() << "Unregistering accelerator for wrong target"; |
| 383 return; | 383 return; |
| 384 } | 384 } |
| 385 | 385 |
| 386 targets->erase(target_iter); | 386 targets->erase(target_iter); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void FocusManager::UnregisterAccelerators(AcceleratorTarget* target) { | 389 void FocusManager::UnregisterAccelerators(ui::AcceleratorTarget* target) { |
| 390 for (AcceleratorMap::iterator map_iter = accelerators_.begin(); | 390 for (AcceleratorMap::iterator map_iter = accelerators_.begin(); |
| 391 map_iter != accelerators_.end(); ++map_iter) { | 391 map_iter != accelerators_.end(); ++map_iter) { |
| 392 AcceleratorTargetList* targets = &map_iter->second; | 392 AcceleratorTargetList* targets = &map_iter->second; |
| 393 targets->remove(target); | 393 targets->remove(target); |
| 394 } | 394 } |
| 395 } | 395 } |
| 396 | 396 |
| 397 bool FocusManager::ProcessAccelerator(const Accelerator& accelerator) { | 397 bool FocusManager::ProcessAccelerator(const ui::Accelerator& accelerator) { |
| 398 AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); | 398 AcceleratorMap::iterator map_iter = accelerators_.find(accelerator); |
| 399 if (map_iter != accelerators_.end()) { | 399 if (map_iter != accelerators_.end()) { |
| 400 // We have to copy the target list here, because an AcceleratorPressed | 400 // We have to copy the target list here, because an AcceleratorPressed |
| 401 // event handler may modify the list. | 401 // event handler may modify the list. |
| 402 AcceleratorTargetList targets(map_iter->second); | 402 AcceleratorTargetList targets(map_iter->second); |
| 403 for (AcceleratorTargetList::iterator iter = targets.begin(); | 403 for (AcceleratorTargetList::iterator iter = targets.begin(); |
| 404 iter != targets.end(); ++iter) { | 404 iter != targets.end(); ++iter) { |
| 405 if ((*iter)->AcceleratorPressed(accelerator)) | 405 if ((*iter)->AcceleratorPressed(accelerator)) |
| 406 return true; | 406 return true; |
| 407 } | 407 } |
| 408 } | 408 } |
| 409 return false; | 409 return false; |
| 410 } | 410 } |
| 411 | 411 |
| 412 AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( | 412 ui::AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( |
| 413 const views::Accelerator& accelerator) const { | 413 const ui::Accelerator& accelerator) const { |
| 414 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); | 414 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); |
| 415 if (map_iter == accelerators_.end() || map_iter->second.empty()) | 415 if (map_iter == accelerators_.end() || map_iter->second.empty()) |
| 416 return NULL; | 416 return NULL; |
| 417 return map_iter->second.front(); | 417 return map_iter->second.front(); |
| 418 } | 418 } |
| 419 | 419 |
| 420 void FocusManager::FocusNativeView(gfx::NativeView native_view) { | 420 void FocusManager::FocusNativeView(gfx::NativeView native_view) { |
| 421 widget_->FocusNativeView(native_view); | 421 widget_->FocusNativeView(native_view); |
| 422 } | 422 } |
| 423 | 423 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 437 | 437 |
| 438 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { | 438 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { |
| 439 focus_change_listeners_.AddObserver(listener); | 439 focus_change_listeners_.AddObserver(listener); |
| 440 } | 440 } |
| 441 | 441 |
| 442 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { | 442 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { |
| 443 focus_change_listeners_.RemoveObserver(listener); | 443 focus_change_listeners_.RemoveObserver(listener); |
| 444 } | 444 } |
| 445 | 445 |
| 446 } // namespace views | 446 } // namespace views |
| OLD | NEW |