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 |