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

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

Issue 14827004: cros: Arrow key traversal in views. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/focus/focus_manager.h" 5 #include "ui/views/focus/focus_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector>
8 9
9 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "build/build_config.h" 12 #include "build/build_config.h"
12 #include "ui/base/accelerators/accelerator.h" 13 #include "ui/base/accelerators/accelerator.h"
13 #include "ui/base/events/event.h" 14 #include "ui/base/events/event.h"
14 #include "ui/base/keycodes/keyboard_codes.h" 15 #include "ui/base/keycodes/keyboard_codes.h"
15 #include "ui/views/focus/focus_manager_delegate.h" 16 #include "ui/views/focus/focus_manager_delegate.h"
16 #include "ui/views/focus/focus_search.h" 17 #include "ui/views/focus/focus_search.h"
17 #include "ui/views/focus/view_storage.h" 18 #include "ui/views/focus/view_storage.h"
18 #include "ui/views/focus/widget_focus_manager.h" 19 #include "ui/views/focus/widget_focus_manager.h"
19 #include "ui/views/view.h" 20 #include "ui/views/view.h"
20 #include "ui/views/widget/root_view.h" 21 #include "ui/views/widget/root_view.h"
21 #include "ui/views/widget/widget.h" 22 #include "ui/views/widget/widget.h"
22 #include "ui/views/widget/widget_delegate.h" 23 #include "ui/views/widget/widget_delegate.h"
23 24
24 namespace views { 25 namespace views {
25 26
26 bool FocusManager::shortcut_handling_suspended_ = false; 27 bool FocusManager::shortcut_handling_suspended_ = false;
28 bool FocusManager::arrow_key_traversal_enabled_ = false;
27 29
28 FocusManager::FocusManager(Widget* widget, FocusManagerDelegate* delegate) 30 FocusManager::FocusManager(Widget* widget, FocusManagerDelegate* delegate)
29 : widget_(widget), 31 : widget_(widget),
30 delegate_(delegate), 32 delegate_(delegate),
31 focused_view_(NULL), 33 focused_view_(NULL),
32 accelerator_manager_(new ui::AcceleratorManager), 34 accelerator_manager_(new ui::AcceleratorManager),
33 focus_change_reason_(kReasonDirectFocusChange), 35 focus_change_reason_(kReasonDirectFocusChange),
34 is_changing_focus_(false) { 36 is_changing_focus_(false) {
35 DCHECK(widget_); 37 DCHECK(widget_);
36 stored_focused_view_storage_id_ = 38 stored_focused_view_storage_id_ =
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 AdvanceFocus(event.IsShiftDown()); 82 AdvanceFocus(event.IsShiftDown());
81 return false; 83 return false;
82 } 84 }
83 #else 85 #else
84 if (IsTabTraversalKeyEvent(event)) { 86 if (IsTabTraversalKeyEvent(event)) {
85 AdvanceFocus(event.IsShiftDown()); 87 AdvanceFocus(event.IsShiftDown());
86 return false; 88 return false;
87 } 89 }
88 #endif 90 #endif
89 91
92 if (arrow_key_traversal_enabled_ && ProcessArrowKeyTraversal(event))
93 return false;
94
90 // Intercept arrow key messages to switch between grouped views. 95 // Intercept arrow key messages to switch between grouped views.
91 if (focused_view_ && focused_view_->GetGroup() != -1 && 96 if (focused_view_ && focused_view_->GetGroup() != -1 &&
92 (key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN || 97 (key_code == ui::VKEY_UP || key_code == ui::VKEY_DOWN ||
93 key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT)) { 98 key_code == ui::VKEY_LEFT || key_code == ui::VKEY_RIGHT)) {
94 bool next = (key_code == ui::VKEY_RIGHT || key_code == ui::VKEY_DOWN); 99 bool next = (key_code == ui::VKEY_RIGHT || key_code == ui::VKEY_DOWN);
95 View::Views views; 100 View::Views views;
96 focused_view_->parent()->GetViewsInGroup(focused_view_->GetGroup(), 101 focused_view_->parent()->GetViewsInGroup(focused_view_->GetGroup(),
97 &views); 102 &views);
98 View::Views::const_iterator i( 103 View::Views::const_iterator i(
99 std::find(views.begin(), views.end(), focused_view_)); 104 std::find(views.begin(), views.end(), focused_view_));
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 } 514 }
510 515
511 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) { 516 void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) {
512 focus_change_listeners_.AddObserver(listener); 517 focus_change_listeners_.AddObserver(listener);
513 } 518 }
514 519
515 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) { 520 void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) {
516 focus_change_listeners_.RemoveObserver(listener); 521 focus_change_listeners_.RemoveObserver(listener);
517 } 522 }
518 523
524 bool FocusManager::ProcessArrowKeyTraversal(const ui::KeyEvent& event) {
525 if (event.IsShiftDown() || event.IsControlDown() || event.IsAltDown())
526 return false;
527
528 const int key_code = event.key_code();
529 if (key_code == ui::VKEY_LEFT || key_code == ui::VKEY_UP) {
530 AdvanceFocus(true);
531 return true;
532 }
533 if (key_code == ui::VKEY_RIGHT || key_code == ui::VKEY_DOWN) {
534 AdvanceFocus(false);
535 return true;
536 }
537
538 return false;
539 }
540
519 } // namespace views 541 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698