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

Side by Side Diff: views/focus/focus_manager.cc

Issue 3354005: Re-lands 58186: (Closed)
Patch Set: Created 10 years, 3 months 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 unified diff | Download patch
« no previous file with comments | « views/focus/accelerator_handler_win.cc ('k') | views/focus/focus_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "base/keyboard_codes.h" 15 #include "app/keyboard_codes.h"
16 #include "base/logging.h" 16 #include "base/logging.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
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 return false; 102 return false;
103 } 103 }
104 #else 104 #else
105 if (IsTabTraversalKeyEvent(event)) { 105 if (IsTabTraversalKeyEvent(event)) {
106 AdvanceFocus(event.IsShiftDown()); 106 AdvanceFocus(event.IsShiftDown());
107 return false; 107 return false;
108 } 108 }
109 #endif 109 #endif
110 110
111 // Intercept arrow key messages to switch between grouped views. 111 // Intercept arrow key messages to switch between grouped views.
112 base::KeyboardCode key_code = event.GetKeyCode(); 112 app::KeyboardCode key_code = event.GetKeyCode();
113 if (focused_view_ && focused_view_->GetGroup() != -1 && 113 if (focused_view_ && focused_view_->GetGroup() != -1 &&
114 (key_code == base::VKEY_UP || key_code == base::VKEY_DOWN || 114 (key_code == app::VKEY_UP || key_code == app::VKEY_DOWN ||
115 key_code == base::VKEY_LEFT || key_code == base::VKEY_RIGHT)) { 115 key_code == app::VKEY_LEFT || key_code == app::VKEY_RIGHT)) {
116 bool next = (key_code == base::VKEY_RIGHT || key_code == base::VKEY_DOWN); 116 bool next = (key_code == app::VKEY_RIGHT || key_code == app::VKEY_DOWN);
117 std::vector<View*> views; 117 std::vector<View*> views;
118 focused_view_->GetParent()->GetViewsWithGroup(focused_view_->GetGroup(), 118 focused_view_->GetParent()->GetViewsWithGroup(focused_view_->GetGroup(),
119 &views); 119 &views);
120 std::vector<View*>::const_iterator iter = std::find(views.begin(), 120 std::vector<View*>::const_iterator iter = std::find(views.begin(),
121 views.end(), 121 views.end(),
122 focused_view_); 122 focused_view_);
123 DCHECK(iter != views.end()); 123 DCHECK(iter != views.end());
124 int index = static_cast<int>(iter - views.begin()); 124 int index = static_cast<int>(iter - views.begin());
125 index += next ? 1 : -1; 125 index += next ? 1 : -1;
126 if (index < 0) { 126 if (index < 0) {
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( 487 AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator(
488 const views::Accelerator& accelerator) const { 488 const views::Accelerator& accelerator) const {
489 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator); 489 AcceleratorMap::const_iterator map_iter = accelerators_.find(accelerator);
490 if (map_iter == accelerators_.end() || map_iter->second.empty()) 490 if (map_iter == accelerators_.end() || map_iter->second.empty())
491 return NULL; 491 return NULL;
492 return map_iter->second.front(); 492 return map_iter->second.front();
493 } 493 }
494 494
495 // static 495 // static
496 bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { 496 bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) {
497 return key_event.GetKeyCode() == base::VKEY_TAB && 497 return key_event.GetKeyCode() == app::VKEY_TAB &&
498 !key_event.IsControlDown(); 498 !key_event.IsControlDown();
499 } 499 }
500 500
501 void FocusManager::ViewRemoved(View* parent, View* removed) { 501 void FocusManager::ViewRemoved(View* parent, View* removed) {
502 if (focused_view_ && focused_view_ == removed) 502 if (focused_view_ && focused_view_ == removed)
503 ClearFocus(); 503 ClearFocus();
504 } 504 }
505 505
506 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { 506 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) {
507 DCHECK(std::find(focus_change_listeners_.begin(), 507 DCHECK(std::find(focus_change_listeners_.begin(),
508 focus_change_listeners_.end(), listener) == 508 focus_change_listeners_.end(), listener) ==
509 focus_change_listeners_.end()) << "Adding a listener twice."; 509 focus_change_listeners_.end()) << "Adding a listener twice.";
510 focus_change_listeners_.push_back(listener); 510 focus_change_listeners_.push_back(listener);
511 } 511 }
512 512
513 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { 513 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) {
514 FocusChangeListenerList::iterator place = 514 FocusChangeListenerList::iterator place =
515 std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(), 515 std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(),
516 listener); 516 listener);
517 if (place == focus_change_listeners_.end()) { 517 if (place == focus_change_listeners_.end()) {
518 NOTREACHED() << "Removing a listener that isn't registered."; 518 NOTREACHED() << "Removing a listener that isn't registered.";
519 return; 519 return;
520 } 520 }
521 focus_change_listeners_.erase(place); 521 focus_change_listeners_.erase(place);
522 } 522 }
523 523
524 } // namespace views 524 } // namespace views
OLDNEW
« no previous file with comments | « views/focus/accelerator_handler_win.cc ('k') | views/focus/focus_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698