| OLD | NEW | 
|    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  Loading... | 
|   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  Loading... | 
|  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 | 
| OLD | NEW |