| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 | 10 |
| 11 #if defined(OS_LINUX) | 11 #if defined(OS_LINUX) |
| 12 #include <gtk/gtk.h> | 12 #include <gtk/gtk.h> |
| 13 #endif | 13 #endif |
| 14 | 14 |
| 15 #include "app/keyboard_codes.h" | |
| 16 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "ui/base/keycodes/keyboard_codes.h" |
| 17 #include "views/accelerator.h" | 17 #include "views/accelerator.h" |
| 18 #include "views/focus/focus_search.h" | 18 #include "views/focus/focus_search.h" |
| 19 #include "views/focus/view_storage.h" | 19 #include "views/focus/view_storage.h" |
| 20 #include "views/view.h" | 20 #include "views/view.h" |
| 21 #include "views/widget/root_view.h" | 21 #include "views/widget/root_view.h" |
| 22 #include "views/widget/widget.h" | 22 #include "views/widget/widget.h" |
| 23 | 23 |
| 24 namespace views { | 24 namespace views { |
| 25 | 25 |
| 26 // FocusManager::WidgetFocusManager --------------------------------- | 26 // FocusManager::WidgetFocusManager --------------------------------- |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 return false; | 113 return false; |
| 114 } | 114 } |
| 115 #else | 115 #else |
| 116 if (IsTabTraversalKeyEvent(event)) { | 116 if (IsTabTraversalKeyEvent(event)) { |
| 117 AdvanceFocus(event.IsShiftDown()); | 117 AdvanceFocus(event.IsShiftDown()); |
| 118 return false; | 118 return false; |
| 119 } | 119 } |
| 120 #endif | 120 #endif |
| 121 | 121 |
| 122 // Intercept arrow key messages to switch between grouped views. | 122 // Intercept arrow key messages to switch between grouped views. |
| 123 app::KeyboardCode key_code = event.GetKeyCode(); | 123 ui::KeyboardCode key_code = event.GetKeyCode(); |
| 124 if (focused_view_ && focused_view_->GetGroup() != -1 && | 124 if (focused_view_ && focused_view_->GetGroup() != -1 && |
| 125 (key_code == app::VKEY_UP || key_code == app::VKEY_DOWN || | 125 (key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN || |
| 126 key_code == app::VKEY_LEFT || key_code == app::VKEY_RIGHT)) { | 126 key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT)) { |
| 127 bool next = (key_code == app::VKEY_RIGHT || key_code == app::VKEY_DOWN); | 127 bool next = (key_code == ui::VKEY_RIGHT || key_code == ui::VKEY_DOWN); |
| 128 std::vector<View*> views; | 128 std::vector<View*> views; |
| 129 focused_view_->GetParent()->GetViewsWithGroup(focused_view_->GetGroup(), | 129 focused_view_->GetParent()->GetViewsWithGroup(focused_view_->GetGroup(), |
| 130 &views); | 130 &views); |
| 131 std::vector<View*>::const_iterator iter = std::find(views.begin(), | 131 std::vector<View*>::const_iterator iter = std::find(views.begin(), |
| 132 views.end(), | 132 views.end(), |
| 133 focused_view_); | 133 focused_view_); |
| 134 DCHECK(iter != views.end()); | 134 DCHECK(iter != views.end()); |
| 135 int index = static_cast<int>(iter - views.begin()); | 135 int index = static_cast<int>(iter - views.begin()); |
| 136 index += next ? 1 : -1; | 136 index += next ? 1 : -1; |
| 137 if (index < 0) { | 137 if (index < 0) { |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( | 502 AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( |
| 503 const views::Accelerator& accelerator) const { | 503 const views::Accelerator& accelerator) const { |
| 504 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); | 504 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); |
| 505 if (map_iter == accelerators_.end() || map_iter->second.empty()) | 505 if (map_iter == accelerators_.end() || map_iter->second.empty()) |
| 506 return NULL; | 506 return NULL; |
| 507 return map_iter->second.front(); | 507 return map_iter->second.front(); |
| 508 } | 508 } |
| 509 | 509 |
| 510 // static | 510 // static |
| 511 bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { | 511 bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { |
| 512 return key_event.GetKeyCode() == app::VKEY_TAB && | 512 return key_event.GetKeyCode() == ui::VKEY_TAB && |
| 513 !key_event.IsControlDown(); | 513 !key_event.IsControlDown(); |
| 514 } | 514 } |
| 515 | 515 |
| 516 void FocusManager::ViewRemoved(View* parent, View* removed) { | 516 void FocusManager::ViewRemoved(View* parent, View* removed) { |
| 517 if (focused_view_ && focused_view_ == removed) | 517 if (focused_view_ && focused_view_ == removed) |
| 518 ClearFocus(); | 518 ClearFocus(); |
| 519 } | 519 } |
| 520 | 520 |
| 521 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { | 521 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { |
| 522 DCHECK(std::find(focus_change_listeners_.begin(), | 522 DCHECK(std::find(focus_change_listeners_.begin(), |
| 523 focus_change_listeners_.end(), listener) == | 523 focus_change_listeners_.end(), listener) == |
| 524 focus_change_listeners_.end()) << "Adding a listener twice."; | 524 focus_change_listeners_.end()) << "Adding a listener twice."; |
| 525 focus_change_listeners_.push_back(listener); | 525 focus_change_listeners_.push_back(listener); |
| 526 } | 526 } |
| 527 | 527 |
| 528 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { | 528 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { |
| 529 FocusChangeListenerList::iterator place = | 529 FocusChangeListenerList::iterator place = |
| 530 std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(), | 530 std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(), |
| 531 listener); | 531 listener); |
| 532 if (place == focus_change_listeners_.end()) { | 532 if (place == focus_change_listeners_.end()) { |
| 533 NOTREACHED() << "Removing a listener that isn't registered."; | 533 NOTREACHED() << "Removing a listener that isn't registered."; |
| 534 return; | 534 return; |
| 535 } | 535 } |
| 536 focus_change_listeners_.erase(place); | 536 focus_change_listeners_.erase(place); |
| 537 } | 537 } |
| 538 | 538 |
| 539 } // namespace views | 539 } // namespace views |
| OLD | NEW |