| 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 "ash/accelerators/accelerator_controller.h" | 5 #include "ash/accelerators/accelerator_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <iostream> | 9 #include <iostream> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 #else | 85 #else |
| 86 return true; | 86 return true; |
| 87 #endif | 87 #endif |
| 88 } | 88 } |
| 89 | 89 |
| 90 bool OverviewEnabled() { | 90 bool OverviewEnabled() { |
| 91 return !CommandLine::ForCurrentProcess()->HasSwitch( | 91 return !CommandLine::ForCurrentProcess()->HasSwitch( |
| 92 switches::kAshDisableOverviewMode); | 92 switches::kAshDisableOverviewMode); |
| 93 } | 93 } |
| 94 | 94 |
| 95 bool HandleCycleWindowMRU(WindowCycleController::Direction direction, | 95 void HandleCycleBackwardMRU(const ui::Accelerator& accelerator) { |
| 96 bool is_alt_down) { | 96 Shell* shell = Shell::GetInstance(); |
| 97 Shell::GetInstance()-> | 97 |
| 98 window_cycle_controller()->HandleCycleWindow(direction, is_alt_down); | 98 if (accelerator.key_code() == ui::VKEY_TAB) |
| 99 // Always report we handled the key, even if the window didn't change. | 99 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_PREVWINDOW_TAB); |
| 100 return true; | 100 |
| 101 if (OverviewEnabled()) { |
| 102 shell->window_selector_controller()->HandleCycleWindow( |
| 103 WindowSelector::BACKWARD); |
| 104 return; |
| 105 } |
| 106 shell->window_cycle_controller()->HandleCycleWindow( |
| 107 WindowCycleController::BACKWARD, accelerator.IsAltDown()); |
| 101 } | 108 } |
| 102 | 109 |
| 103 bool HandleCycleWindowOverviewMRU(WindowSelector::Direction direction) { | 110 void HandleCycleForwardMRU(const ui::Accelerator& accelerator) { |
| 104 Shell::GetInstance()-> | 111 Shell* shell = Shell::GetInstance(); |
| 105 window_selector_controller()->HandleCycleWindow(direction); | 112 |
| 106 return true; | 113 if (accelerator.key_code() == ui::VKEY_TAB) |
| 114 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_NEXTWINDOW_TAB); |
| 115 |
| 116 if (OverviewEnabled()) { |
| 117 shell->window_selector_controller()->HandleCycleWindow( |
| 118 WindowSelector::FORWARD); |
| 119 return; |
| 120 } |
| 121 shell->window_cycle_controller()->HandleCycleWindow( |
| 122 WindowCycleController::FORWARD, accelerator.IsAltDown()); |
| 107 } | 123 } |
| 108 | 124 |
| 109 void HandleCycleWindowLinear(CycleDirection direction) { | 125 void HandleCycleLinear(const ui::Accelerator& accelerator) { |
| 110 Shell::GetInstance()-> | 126 Shell* shell = Shell::GetInstance(); |
| 111 window_cycle_controller()->HandleLinearCycleWindow(); | |
| 112 } | |
| 113 | 127 |
| 114 void ToggleOverviewMode() { | 128 // TODO(jamescook): When overview becomes the default the AcceleratorAction |
| 115 Shell::GetInstance()->window_selector_controller()->ToggleOverview(); | 129 // should be renamed from CYCLE_LINEAR to TOGGLE_OVERVIEW. |
| 130 if (OverviewEnabled()) { |
| 131 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_OVERVIEW_F5); |
| 132 shell->window_selector_controller()->ToggleOverview(); |
| 133 return; |
| 134 } |
| 135 if (accelerator.key_code() == ui::VKEY_MEDIA_LAUNCH_APP1) |
| 136 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_NEXTWINDOW_F5); |
| 137 shell->window_cycle_controller()->HandleLinearCycleWindow(); |
| 116 } | 138 } |
| 117 | 139 |
| 118 bool HandleAccessibleFocusCycle(bool reverse) { | 140 bool HandleAccessibleFocusCycle(bool reverse) { |
| 119 if (!Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) | 141 if (!Shell::GetInstance()->delegate()->IsSpokenFeedbackEnabled()) |
| 120 return false; | 142 return false; |
| 121 aura::Window* active_window = ash::wm::GetActiveWindow(); | 143 aura::Window* active_window = ash::wm::GetActiveWindow(); |
| 122 if (!active_window) | 144 if (!active_window) |
| 123 return false; | 145 return false; |
| 124 views::Widget* widget = | 146 views::Widget* widget = |
| 125 views::Widget::GetWidgetForNativeWindow(active_window); | 147 views::Widget::GetWidgetForNativeWindow(active_window); |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 } | 537 } |
| 516 // Type of the previous accelerator. Used by NEXT_IME and DISABLE_CAPS_LOCK. | 538 // Type of the previous accelerator. Used by NEXT_IME and DISABLE_CAPS_LOCK. |
| 517 const ui::EventType previous_event_type = | 539 const ui::EventType previous_event_type = |
| 518 context_.previous_accelerator().type(); | 540 context_.previous_accelerator().type(); |
| 519 const ui::KeyboardCode previous_key_code = | 541 const ui::KeyboardCode previous_key_code = |
| 520 context_.previous_accelerator().key_code(); | 542 context_.previous_accelerator().key_code(); |
| 521 | 543 |
| 522 // You *MUST* return true when some action is performed. Otherwise, this | 544 // You *MUST* return true when some action is performed. Otherwise, this |
| 523 // function might be called *twice*, via BrowserView::PreHandleKeyboardEvent | 545 // function might be called *twice*, via BrowserView::PreHandleKeyboardEvent |
| 524 // and BrowserView::HandleKeyboardEvent, for a single accelerator press. | 546 // and BrowserView::HandleKeyboardEvent, for a single accelerator press. |
| 547 // |
| 548 // If your accelerator invokes more than one line of code, please either |
| 549 // implement it in your module's controller code (like TOGGLE_MIRROR_MODE |
| 550 // below) or pull it into a HandleFoo() function above. |
| 525 switch (action) { | 551 switch (action) { |
| 526 case ACCESSIBLE_FOCUS_NEXT: | 552 case ACCESSIBLE_FOCUS_NEXT: |
| 527 return HandleAccessibleFocusCycle(false); | 553 return HandleAccessibleFocusCycle(false); |
| 528 case ACCESSIBLE_FOCUS_PREVIOUS: | 554 case ACCESSIBLE_FOCUS_PREVIOUS: |
| 529 return HandleAccessibleFocusCycle(true); | 555 return HandleAccessibleFocusCycle(true); |
| 530 case CYCLE_BACKWARD_MRU: | 556 case CYCLE_BACKWARD_MRU: |
| 531 if (key_code == ui::VKEY_TAB) | 557 HandleCycleBackwardMRU(accelerator); |
| 532 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_PREVWINDOW_TAB); | 558 return true; |
| 533 if (OverviewEnabled()) | |
| 534 return HandleCycleWindowOverviewMRU(WindowSelector::BACKWARD); | |
| 535 return HandleCycleWindowMRU(WindowCycleController::BACKWARD, | |
| 536 accelerator.IsAltDown()); | |
| 537 case CYCLE_FORWARD_MRU: | 559 case CYCLE_FORWARD_MRU: |
| 538 if (key_code == ui::VKEY_TAB) | 560 HandleCycleForwardMRU(accelerator); |
| 539 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_NEXTWINDOW_TAB); | |
| 540 if (OverviewEnabled()) | |
| 541 return HandleCycleWindowOverviewMRU(WindowSelector::FORWARD); | |
| 542 return HandleCycleWindowMRU(WindowCycleController::FORWARD, | |
| 543 accelerator.IsAltDown()); | |
| 544 case CYCLE_BACKWARD_LINEAR: | |
| 545 if (OverviewEnabled()) { | |
| 546 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_OVERVIEW_F5); | |
| 547 ToggleOverviewMode(); | |
| 548 return true; | |
| 549 } | |
| 550 if (key_code == ui::VKEY_MEDIA_LAUNCH_APP1) | |
| 551 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_PREVWINDOW_F5); | |
| 552 HandleCycleWindowLinear(CYCLE_BACKWARD); | |
| 553 return true; | 561 return true; |
| 554 case CYCLE_FORWARD_LINEAR: | 562 case CYCLE_LINEAR: |
| 555 if (OverviewEnabled()) { | 563 HandleCycleLinear(accelerator); |
| 556 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_OVERVIEW_F5); | |
| 557 ToggleOverviewMode(); | |
| 558 return true; | |
| 559 } | |
| 560 if (key_code == ui::VKEY_MEDIA_LAUNCH_APP1) | |
| 561 shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_NEXTWINDOW_F5); | |
| 562 HandleCycleWindowLinear(CYCLE_FORWARD); | |
| 563 return true; | 564 return true; |
| 564 #if defined(OS_CHROMEOS) | 565 #if defined(OS_CHROMEOS) |
| 565 case ADD_REMOVE_DISPLAY: | 566 case ADD_REMOVE_DISPLAY: |
| 566 Shell::GetInstance()->display_manager()->AddRemoveDisplay(); | 567 Shell::GetInstance()->display_manager()->AddRemoveDisplay(); |
| 567 return true; | 568 return true; |
| 568 case TOGGLE_MIRROR_MODE: | 569 case TOGGLE_MIRROR_MODE: |
| 569 Shell::GetInstance()->display_controller()->ToggleMirrorMode(); | 570 Shell::GetInstance()->display_controller()->ToggleMirrorMode(); |
| 570 return true; | 571 return true; |
| 571 case LOCK_SCREEN: | 572 case LOCK_SCREEN: |
| 572 if (key_code == ui::VKEY_L) | 573 if (key_code == ui::VKEY_L) |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 HandleKeyboardBrightnessDown(accelerator); | 711 HandleKeyboardBrightnessDown(accelerator); |
| 711 break; | 712 break; |
| 712 case KEYBOARD_BRIGHTNESS_UP: | 713 case KEYBOARD_BRIGHTNESS_UP: |
| 713 if (keyboard_brightness_control_delegate_) | 714 if (keyboard_brightness_control_delegate_) |
| 714 return keyboard_brightness_control_delegate_-> | 715 return keyboard_brightness_control_delegate_-> |
| 715 HandleKeyboardBrightnessUp(accelerator); | 716 HandleKeyboardBrightnessUp(accelerator); |
| 716 break; | 717 break; |
| 717 case VOLUME_MUTE: | 718 case VOLUME_MUTE: |
| 718 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> | 719 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> |
| 719 HandleVolumeMute(accelerator); | 720 HandleVolumeMute(accelerator); |
| 720 break; | |
| 721 case VOLUME_DOWN: | 721 case VOLUME_DOWN: |
| 722 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> | 722 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> |
| 723 HandleVolumeDown(accelerator); | 723 HandleVolumeDown(accelerator); |
| 724 break; | |
| 725 case VOLUME_UP: | 724 case VOLUME_UP: |
| 726 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> | 725 return shell->system_tray_delegate()->GetVolumeControlDelegate()-> |
| 727 HandleVolumeUp(accelerator); | 726 HandleVolumeUp(accelerator); |
| 728 break; | |
| 729 case FOCUS_LAUNCHER: | 727 case FOCUS_LAUNCHER: |
| 730 return shell->focus_cycler()->FocusWidget( | 728 return shell->focus_cycler()->FocusWidget( |
| 731 Launcher::ForPrimaryDisplay()->shelf_widget()); | 729 Launcher::ForPrimaryDisplay()->shelf_widget()); |
| 732 break; | |
| 733 case FOCUS_NEXT_PANE: | 730 case FOCUS_NEXT_PANE: |
| 734 return HandleRotatePaneFocus(Shell::FORWARD); | 731 return HandleRotatePaneFocus(Shell::FORWARD); |
| 735 case FOCUS_PREVIOUS_PANE: | 732 case FOCUS_PREVIOUS_PANE: |
| 736 return HandleRotatePaneFocus(Shell::BACKWARD); | 733 return HandleRotatePaneFocus(Shell::BACKWARD); |
| 737 case SHOW_KEYBOARD_OVERLAY: | 734 case SHOW_KEYBOARD_OVERLAY: |
| 738 ash::Shell::GetInstance()->delegate()->ShowKeyboardOverlay(); | 735 ash::Shell::GetInstance()->delegate()->ShowKeyboardOverlay(); |
| 739 return true; | 736 return true; |
| 740 case SHOW_OAK: | 737 case SHOW_OAK: |
| 741 if (CommandLine::ForCurrentProcess()->HasSwitch( | 738 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 742 switches::kAshEnableOak)) { | 739 switches::kAshEnableOak)) { |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 984 keyboard_brightness_control_delegate) { | 981 keyboard_brightness_control_delegate) { |
| 985 keyboard_brightness_control_delegate_ = | 982 keyboard_brightness_control_delegate_ = |
| 986 keyboard_brightness_control_delegate.Pass(); | 983 keyboard_brightness_control_delegate.Pass(); |
| 987 } | 984 } |
| 988 | 985 |
| 989 bool AcceleratorController::CanHandleAccelerators() const { | 986 bool AcceleratorController::CanHandleAccelerators() const { |
| 990 return true; | 987 return true; |
| 991 } | 988 } |
| 992 | 989 |
| 993 } // namespace ash | 990 } // namespace ash |
| OLD | NEW |