Index: ash/accelerators/accelerator_controller.cc |
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc |
index 8b354056338afd208391fd72f395d6a1d869dcef..da65a610a90dc696d73c0fd1d3954e4173d3e9f6 100644 |
--- a/ash/accelerators/accelerator_controller.cc |
+++ b/ash/accelerators/accelerator_controller.cc |
@@ -4,84 +4,36 @@ |
#include "ash/accelerators/accelerator_controller.h" |
-#include <algorithm> |
-#include <cmath> |
-#include <string> |
-#include <utility> |
- |
#include "ash/accelerators/accelerator_commands.h" |
+#include "ash/accelerators/accelerator_controller_delegate.h" |
#include "ash/accelerators/debug_commands.h" |
#include "ash/common/accessibility_delegate.h" |
#include "ash/common/accessibility_types.h" |
-#include "ash/common/ash_switches.h" |
#include "ash/common/focus_cycler.h" |
-#include "ash/common/gpu_support.h" |
#include "ash/common/media_delegate.h" |
#include "ash/common/multi_profile_uma.h" |
#include "ash/common/session/session_state_delegate.h" |
-#include "ash/common/shelf/shelf_model.h" |
#include "ash/common/shell_delegate.h" |
-#include "ash/common/shell_window_ids.h" |
#include "ash/common/system/brightness_control_delegate.h" |
#include "ash/common/system/keyboard_brightness_control_delegate.h" |
-#include "ash/common/system/status_area_widget.h" |
-#include "ash/common/system/system_notifier.h" |
-#include "ash/common/system/tray/system_tray.h" |
#include "ash/common/system/tray/system_tray_delegate.h" |
#include "ash/common/system/tray/system_tray_notifier.h" |
#include "ash/common/system/volume_control_delegate.h" |
-#include "ash/common/system/web_notification/web_notification_tray.h" |
-#include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
#include "ash/common/wm/mru_window_tracker.h" |
#include "ash/common/wm/overview/window_selector_controller.h" |
#include "ash/common/wm/window_cycle_controller.h" |
+#include "ash/common/wm/window_positioning_utils.h" |
#include "ash/common/wm/window_state.h" |
#include "ash/common/wm/wm_event.h" |
#include "ash/common/wm_shell.h" |
-#include "ash/debug.h" |
-#include "ash/display/window_tree_host_manager.h" |
+#include "ash/common/wm_window.h" |
#include "ash/ime_control_delegate.h" |
-#include "ash/magnifier/magnification_controller.h" |
-#include "ash/magnifier/partial_magnification_controller.h" |
-#include "ash/new_window_delegate.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/rotator/screen_rotation_animator.h" |
-#include "ash/rotator/window_rotation.h" |
-#include "ash/screen_util.h" |
-#include "ash/screenshot_delegate.h" |
-#include "ash/shelf/shelf.h" |
-#include "ash/shelf/shelf_delegate.h" |
-#include "ash/shelf/shelf_widget.h" |
-#include "ash/shell.h" |
-#include "ash/touch/touch_hud_debug.h" |
-#include "ash/utility/screenshot_controller.h" |
-#include "ash/wm/power_button_controller.h" |
-#include "ash/wm/window_state_aura.h" |
-#include "ash/wm/window_util.h" |
-#include "base/bind.h" |
-#include "base/command_line.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/user_metrics.h" |
-#include "base/strings/string_split.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "ui/aura/env.h" |
#include "ui/base/accelerators/accelerator.h" |
#include "ui/base/accelerators/accelerator_manager.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/compositor/layer.h" |
-#include "ui/compositor/layer_animation_sequence.h" |
-#include "ui/compositor/layer_animator.h" |
-#include "ui/display/screen.h" |
-#include "ui/events/event.h" |
-#include "ui/events/keycodes/keyboard_codes.h" |
-#include "ui/message_center/message_center.h" |
-#include "ui/message_center/notification.h" |
-#include "ui/message_center/notifier_settings.h" |
#if defined(OS_CHROMEOS) |
-#include "ash/display/display_configuration_controller.h" |
-#include "base/sys_info.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/dbus/power_manager_client.h" |
#include "ui/base/ime/chromeos/ime_keyboard.h" |
@@ -93,28 +45,6 @@ namespace { |
using base::UserMetricsAction; |
-// The notification delegate that will be used to open the keyboard shortcut |
-// help page when the notification is clicked. |
-class DeprecatedAcceleratorNotificationDelegate |
- : public message_center::NotificationDelegate { |
- public: |
- DeprecatedAcceleratorNotificationDelegate() {} |
- |
- // message_center::NotificationDelegate: |
- bool HasClickedListener() override { return true; } |
- |
- void Click() override { |
- if (!WmShell::Get()->GetSessionStateDelegate()->IsUserSessionBlocked()) |
- WmShell::Get()->delegate()->OpenKeyboardShortcutHelpPage(); |
- } |
- |
- private: |
- // Private destructor since NotificationDelegate is ref-counted. |
- ~DeprecatedAcceleratorNotificationDelegate() override {} |
- |
- DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorNotificationDelegate); |
-}; |
- |
ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, |
int modifiers, |
bool trigger_on_press) { |
@@ -124,63 +54,6 @@ ui::Accelerator CreateAccelerator(ui::KeyboardCode keycode, |
return accelerator; |
} |
-// Ensures that there are no word breaks at the "+"s in the shortcut texts such |
-// as "Ctrl+Shift+Space". |
-void EnsureNoWordBreaks(base::string16* shortcut_text) { |
- std::vector<base::string16> keys = |
- base::SplitString(*shortcut_text, base::ASCIIToUTF16("+"), |
- base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
- |
- if (keys.size() < 2U) |
- return; |
- |
- // The plus sign surrounded by the word joiner to guarantee an non-breaking |
- // shortcut. |
- const base::string16 non_breaking_plus = |
- base::UTF8ToUTF16("\xe2\x81\xa0+\xe2\x81\xa0"); |
- shortcut_text->clear(); |
- for (size_t i = 0; i < keys.size() - 1; ++i) { |
- *shortcut_text += keys[i]; |
- *shortcut_text += non_breaking_plus; |
- } |
- |
- *shortcut_text += keys.back(); |
-} |
- |
-// Gets the notification message after it formats it in such a way that there |
-// are no line breaks in the middle of the shortcut texts. |
-base::string16 GetNotificationText(int message_id, |
- int old_shortcut_id, |
- int new_shortcut_id) { |
- base::string16 old_shortcut = l10n_util::GetStringUTF16(old_shortcut_id); |
- base::string16 new_shortcut = l10n_util::GetStringUTF16(new_shortcut_id); |
- EnsureNoWordBreaks(&old_shortcut); |
- EnsureNoWordBreaks(&new_shortcut); |
- |
- return l10n_util::GetStringFUTF16(message_id, new_shortcut, old_shortcut); |
-} |
- |
-void ShowDeprecatedAcceleratorNotification(const char* const notification_id, |
- int message_id, |
- int old_shortcut_id, |
- int new_shortcut_id) { |
- const base::string16 message = |
- GetNotificationText(message_id, old_shortcut_id, new_shortcut_id); |
- std::unique_ptr<message_center::Notification> notification( |
- new message_center::Notification( |
- message_center::NOTIFICATION_TYPE_SIMPLE, notification_id, |
- base::string16(), message, |
- WmShell::Get()->delegate()->GetDeprecatedAcceleratorImage(), |
- base::string16(), GURL(), |
- message_center::NotifierId( |
- message_center::NotifierId::SYSTEM_COMPONENT, |
- system_notifier::kNotifierDeprecatedAccelerator), |
- message_center::RichNotificationData(), |
- new DeprecatedAcceleratorNotificationDelegate)); |
- message_center::MessageCenter::Get()->AddNotification( |
- std::move(notification)); |
-} |
- |
void RecordUmaHistogram(const char* histogram_name, |
DeprecatedAcceleratorUsage sample) { |
auto* histogram = base::LinearHistogram::FactoryGet( |
@@ -220,49 +93,6 @@ void HandleRotatePaneFocus(FocusCycler::Direction direction) { |
WmShell::Get()->focus_cycler()->RotateFocus(direction); |
} |
-void HandleFocusShelf() { |
- base::RecordAction(base::UserMetricsAction("Accel_Focus_Shelf")); |
- WmShell::Get()->focus_cycler()->FocusWidget( |
- Shelf::ForPrimaryDisplay()->shelf_widget()); |
-} |
- |
-void HandleLaunchAppN(int n) { |
- base::RecordAction(UserMetricsAction("Accel_Launch_App")); |
- Shelf::ForPrimaryDisplay()->LaunchAppIndexAt(n); |
-} |
- |
-void HandleLaunchLastApp() { |
- base::RecordAction(UserMetricsAction("Accel_Launch_Last_App")); |
- Shelf::ForPrimaryDisplay()->LaunchAppIndexAt(-1); |
-} |
- |
-bool CanHandleMagnifyScreen() { |
- Shell* shell = Shell::GetInstance(); |
- return shell->magnification_controller()->IsEnabled() || |
- shell->partial_magnification_controller()->is_enabled(); |
-} |
- |
-// Magnify the screen |
-void HandleMagnifyScreen(int delta_index) { |
- if (Shell::GetInstance()->magnification_controller()->IsEnabled()) { |
- // TODO(yoshiki): Move the following logic to MagnificationController. |
- float scale = Shell::GetInstance()->magnification_controller()->GetScale(); |
- // Calculate rounded logarithm (base kMagnificationScaleFactor) of scale. |
- int scale_index = |
- std::floor(std::log(scale) / std::log(kMagnificationScaleFactor) + 0.5); |
- |
- int new_scale_index = std::max(0, std::min(8, scale_index + delta_index)); |
- |
- Shell::GetInstance()->magnification_controller()->SetScale( |
- std::pow(kMagnificationScaleFactor, new_scale_index), true); |
- } else if (Shell::GetInstance() |
- ->partial_magnification_controller() |
- ->is_enabled()) { |
- float scale = delta_index > 0 ? kDefaultPartialMagnifiedScale : 1; |
- Shell::GetInstance()->partial_magnification_controller()->SetScale(scale); |
- } |
-} |
- |
void HandleMediaNextTrack() { |
WmShell::Get()->media_delegate()->HandleMediaNextTrack(); |
} |
@@ -275,28 +105,6 @@ void HandleMediaPrevTrack() { |
WmShell::Get()->media_delegate()->HandleMediaPrevTrack(); |
} |
-bool CanHandleNewIncognitoWindow() { |
- return WmShell::Get()->delegate()->IsIncognitoAllowed(); |
-} |
- |
-void HandleNewIncognitoWindow() { |
- base::RecordAction(UserMetricsAction("Accel_New_Incognito_Window")); |
- Shell::GetInstance()->new_window_delegate()->NewWindow( |
- true /* is_incognito */); |
-} |
- |
-void HandleNewTab(const ui::Accelerator& accelerator) { |
- if (accelerator.key_code() == ui::VKEY_T) |
- base::RecordAction(base::UserMetricsAction("Accel_NewTab_T")); |
- Shell::GetInstance()->new_window_delegate()->NewTab(); |
-} |
- |
-void HandleNewWindow() { |
- base::RecordAction(base::UserMetricsAction("Accel_New_Window")); |
- Shell::GetInstance()->new_window_delegate()->NewWindow( |
- false /* is_incognito */); |
-} |
- |
bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) { |
return ime_control_delegate && ime_control_delegate->CanCycleIme(); |
} |
@@ -326,11 +134,6 @@ void HandleNextIme(ImeControlDelegate* ime_control_delegate) { |
ime_control_delegate->HandleNextIme(); |
} |
-void HandleOpenFeedbackPage() { |
- base::RecordAction(UserMetricsAction("Accel_Open_Feedback_Page")); |
- Shell::GetInstance()->new_window_delegate()->OpenFeedbackPage(); |
-} |
- |
bool CanHandlePreviousIme(ImeControlDelegate* ime_control_delegate) { |
return ime_control_delegate && ime_control_delegate->CanCycleIme(); |
} |
@@ -343,100 +146,6 @@ void HandlePreviousIme(ImeControlDelegate* ime_control_delegate, |
// Else: consume the Ctrl+Space ET_KEY_RELEASED event but do not do anything. |
} |
-void HandleRestoreTab() { |
- base::RecordAction(base::UserMetricsAction("Accel_Restore_Tab")); |
- Shell::GetInstance()->new_window_delegate()->RestoreTab(); |
-} |
- |
-display::Display::Rotation GetNextRotation(display::Display::Rotation current) { |
- switch (current) { |
- case display::Display::ROTATE_0: |
- return display::Display::ROTATE_90; |
- case display::Display::ROTATE_90: |
- return display::Display::ROTATE_180; |
- case display::Display::ROTATE_180: |
- return display::Display::ROTATE_270; |
- case display::Display::ROTATE_270: |
- return display::Display::ROTATE_0; |
- } |
- NOTREACHED() << "Unknown rotation:" << current; |
- return display::Display::ROTATE_0; |
-} |
- |
-// Rotates the screen. |
-void HandleRotateScreen() { |
- if (Shell::GetInstance()->display_manager()->IsInUnifiedMode()) |
- return; |
- |
- base::RecordAction(UserMetricsAction("Accel_Rotate_Window")); |
- gfx::Point point = display::Screen::GetScreen()->GetCursorScreenPoint(); |
- display::Display display = |
- display::Screen::GetScreen()->GetDisplayNearestPoint(point); |
- const DisplayInfo& display_info = |
- Shell::GetInstance()->display_manager()->GetDisplayInfo(display.id()); |
- ScreenRotationAnimator(display.id()) |
- .Rotate(GetNextRotation(display_info.GetActiveRotation()), |
- display::Display::ROTATION_SOURCE_USER); |
-} |
- |
-// Rotate the active window. |
-void HandleRotateActiveWindow() { |
- base::RecordAction(UserMetricsAction("Accel_Rotate_Window")); |
- aura::Window* active_window = wm::GetActiveWindow(); |
- if (active_window) { |
- // The rotation animation bases its target transform on the current |
- // rotation and position. Since there could be an animation in progress |
- // right now, queue this animation so when it starts it picks up a neutral |
- // rotation and position. Use replace so we only enqueue one at a time. |
- active_window->layer()->GetAnimator()->set_preemption_strategy( |
- ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); |
- active_window->layer()->GetAnimator()->StartAnimation( |
- new ui::LayerAnimationSequence( |
- new WindowRotation(360, active_window->layer()))); |
- } |
-} |
- |
-void HandleShowKeyboardOverlay() { |
- base::RecordAction(UserMetricsAction("Accel_Show_Keyboard_Overlay")); |
- Shell::GetInstance()->new_window_delegate()->ShowKeyboardOverlay(); |
-} |
- |
-bool CanHandleShowMessageCenterBubble() { |
- RootWindowController* controller = |
- RootWindowController::ForTargetRootWindow(); |
- StatusAreaWidget* status_area_widget = |
- controller->shelf_widget()->status_area_widget(); |
- return status_area_widget && |
- status_area_widget->web_notification_tray()->visible(); |
-} |
- |
-void HandleShowMessageCenterBubble() { |
- base::RecordAction(UserMetricsAction("Accel_Show_Message_Center_Bubble")); |
- RootWindowController* controller = |
- RootWindowController::ForTargetRootWindow(); |
- StatusAreaWidget* status_area_widget = |
- controller->shelf_widget()->status_area_widget(); |
- if (status_area_widget) { |
- WebNotificationTray* notification_tray = |
- status_area_widget->web_notification_tray(); |
- if (notification_tray->visible()) |
- notification_tray->ShowMessageCenterBubble(); |
- } |
-} |
- |
-void HandleShowSystemTrayBubble() { |
- base::RecordAction(UserMetricsAction("Accel_Show_System_Tray_Bubble")); |
- RootWindowController* controller = |
- RootWindowController::ForTargetRootWindow(); |
- if (!controller->GetSystemTray()->HasSystemBubble()) |
- controller->GetSystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); |
-} |
- |
-void HandleShowTaskManager() { |
- base::RecordAction(UserMetricsAction("Accel_Show_Task_Manager")); |
- Shell::GetInstance()->new_window_delegate()->ShowTaskManager(); |
-} |
- |
bool CanHandleSwitchIme(ImeControlDelegate* ime_control_delegate, |
const ui::Accelerator& accelerator) { |
return ime_control_delegate && |
@@ -449,53 +158,6 @@ void HandleSwitchIme(ImeControlDelegate* ime_control_delegate, |
ime_control_delegate->HandleSwitchIme(accelerator); |
} |
-void HandleTakeWindowScreenshot(ScreenshotDelegate* screenshot_delegate) { |
- base::RecordAction(UserMetricsAction("Accel_Take_Window_Screenshot")); |
- DCHECK(screenshot_delegate); |
- Shell::GetInstance()->screenshot_controller()->StartWindowScreenshotSession( |
- screenshot_delegate); |
-} |
- |
-void HandleTakePartialScreenshot(ScreenshotDelegate* screenshot_delegate) { |
- base::RecordAction(UserMetricsAction("Accel_Take_Partial_Screenshot")); |
- DCHECK(screenshot_delegate); |
- Shell::GetInstance()->screenshot_controller()->StartPartialScreenshotSession( |
- screenshot_delegate); |
-} |
- |
-void HandleTakeScreenshot(ScreenshotDelegate* screenshot_delegate) { |
- base::RecordAction(UserMetricsAction("Accel_Take_Screenshot")); |
- DCHECK(screenshot_delegate); |
- if (screenshot_delegate->CanTakeScreenshot()) |
- screenshot_delegate->HandleTakeScreenshotForAllRootWindows(); |
-} |
- |
-bool CanHandleToggleAppList(const ui::Accelerator& accelerator, |
- const ui::Accelerator& previous_accelerator) { |
- if (accelerator.key_code() == ui::VKEY_LWIN) { |
- // If something else was pressed between the Search key (LWIN) |
- // being pressed and released, then ignore the release of the |
- // Search key. |
- if (previous_accelerator.type() != ui::ET_KEY_PRESSED || |
- previous_accelerator.key_code() != ui::VKEY_LWIN) { |
- return false; |
- } |
- |
- // When spoken feedback is enabled, we should neither toggle the list nor |
- // consume the key since Search+Shift is one of the shortcuts the a11y |
- // feature uses. crbug.com/132296 |
- if (WmShell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled()) |
- return false; |
- } |
- return true; |
-} |
- |
-void HandleToggleAppList(const ui::Accelerator& accelerator) { |
- if (accelerator.key_code() == ui::VKEY_LWIN) |
- base::RecordAction(base::UserMetricsAction("Accel_Search_LWin")); |
- Shell::GetInstance()->ToggleAppList(NULL); |
-} |
- |
void HandleToggleFullscreen(const ui::Accelerator& accelerator) { |
if (accelerator.key_code() == ui::VKEY_MEDIA_LAUNCH_APP2) |
base::RecordAction(UserMetricsAction("Accel_Fullscreen_F4")); |
@@ -508,7 +170,10 @@ void HandleToggleOverview() { |
} |
bool CanHandleWindowSnapOrDock() { |
- wm::WindowState* window_state = wm::GetActiveWindowState(); |
+ WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
+ if (!active_window) |
+ return false; |
+ wm::WindowState* window_state = active_window->GetWindowState(); |
// Disable window snapping shortcut key for full screen window due to |
// http://crbug.com/135487. |
return (window_state && window_state->IsUserPositionable() && |
@@ -524,7 +189,9 @@ void HandleWindowSnapOrDock(AcceleratorAction action) { |
const wm::WMEvent event(action == WINDOW_CYCLE_SNAP_DOCK_LEFT |
? wm::WM_EVENT_CYCLE_SNAP_DOCK_LEFT |
: wm::WM_EVENT_CYCLE_SNAP_DOCK_RIGHT); |
- wm::GetActiveWindowState()->OnWMEvent(&event); |
+ WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
+ DCHECK(active_window); |
+ active_window->GetWindowState()->OnWMEvent(&event); |
} |
void HandleWindowMinimize() { |
@@ -534,22 +201,13 @@ void HandleWindowMinimize() { |
bool CanHandlePositionCenter() { |
// Docked windows do not support centering. |
- wm::WindowState* window_state = wm::GetActiveWindowState(); |
- return (window_state && !window_state->IsDocked()); |
+ WmWindow* active_window = WmShell::Get()->GetActiveWindow(); |
+ return (active_window && !active_window->GetWindowState()->IsDocked()); |
} |
void HandlePositionCenter() { |
base::RecordAction(UserMetricsAction("Accel_Window_Position_Center")); |
- wm::CenterWindow(wm::GetActiveWindow()); |
-} |
- |
-bool CanHandleUnpin() { |
- wm::WindowState* window_state = wm::GetActiveWindowState(); |
- return window_state && window_state->IsPinned(); |
-} |
- |
-void HandleUnpin() { |
- accelerators::Unpin(); |
+ wm::CenterWindow(WmShell::Get()->GetActiveWindow()); |
} |
#if defined(OS_CHROMEOS) |
@@ -591,28 +249,6 @@ void HandleSuspend() { |
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestSuspend(); |
} |
-void HandleCrosh() { |
- base::RecordAction(UserMetricsAction("Accel_Open_Crosh")); |
- |
- Shell::GetInstance()->new_window_delegate()->OpenCrosh(); |
-} |
- |
-void HandleFileManager() { |
- base::RecordAction(UserMetricsAction("Accel_Open_File_Manager")); |
- |
- Shell::GetInstance()->new_window_delegate()->OpenFileManager(); |
-} |
- |
-void HandleGetHelp() { |
- Shell::GetInstance()->new_window_delegate()->OpenGetHelp(); |
-} |
- |
-void HandleSwapPrimaryDisplay() { |
- base::RecordAction(UserMetricsAction("Accel_Swap_Primary_Display")); |
- Shell::GetInstance()->display_configuration_controller()->SetPrimaryDisplayId( |
- ScreenUtil::GetSecondaryDisplay().id(), true /* user_action */); |
-} |
- |
bool CanHandleCycleUser() { |
return WmShell::Get()->delegate()->IsMultiProfilesEnabled() && |
WmShell::Get()->GetSessionStateDelegate()->NumberOfLoggedInUsers() > 1; |
@@ -656,13 +292,6 @@ void HandleToggleCapsLock() { |
keyboard->SetCapsLockEnabled(!keyboard->CapsLockIsEnabled()); |
} |
-void HandleToggleMirrorMode() { |
- base::RecordAction(UserMetricsAction("Accel_Toggle_Mirror_Mode")); |
- bool mirror = !Shell::GetInstance()->display_manager()->IsInMirrorMode(); |
- Shell::GetInstance()->display_configuration_controller()->SetMirrorMode( |
- mirror, true /* user_action */); |
-} |
- |
void HandleToggleSpokenFeedback() { |
base::RecordAction(UserMetricsAction("Accel_Toggle_Spoken_Feedback")); |
@@ -670,20 +299,6 @@ void HandleToggleSpokenFeedback() { |
A11Y_NOTIFICATION_SHOW); |
} |
-bool CanHandleTouchHud() { |
- return RootWindowController::ForTargetRootWindow()->touch_hud_debug(); |
-} |
- |
-void HandleTouchHudClear() { |
- RootWindowController::ForTargetRootWindow()->touch_hud_debug()->Clear(); |
-} |
- |
-void HandleTouchHudModeChange() { |
- RootWindowController* controller = |
- RootWindowController::ForTargetRootWindow(); |
- controller->touch_hud_debug()->ChangeToNextMode(); |
-} |
- |
void HandleVolumeDown(const ui::Accelerator& accelerator) { |
VolumeControlDelegate* volume_delegate = |
WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
@@ -712,8 +327,10 @@ void HandleVolumeUp(const ui::Accelerator& accelerator) { |
//////////////////////////////////////////////////////////////////////////////// |
// AcceleratorController, public: |
-AcceleratorController::AcceleratorController() |
- : accelerator_manager_(new ui::AcceleratorManager), |
+AcceleratorController::AcceleratorController( |
+ AcceleratorControllerDelegate* delegate) |
+ : delegate_(delegate), |
+ accelerator_manager_(new ui::AcceleratorManager), |
accelerator_history_(new ui::AcceleratorHistory) { |
Init(); |
} |
@@ -787,11 +404,6 @@ void AcceleratorController::SetImeControlDelegate( |
ime_control_delegate_ = std::move(ime_control_delegate); |
} |
-void AcceleratorController::SetScreenshotDelegate( |
- std::unique_ptr<ScreenshotDelegate> screenshot_delegate) { |
- screenshot_delegate_ = std::move(screenshot_delegate); |
-} |
- |
bool AcceleratorController::ShouldCloseMenuAndRepostAccelerator( |
const ui::Accelerator& accelerator) const { |
auto itr = accelerators_.find(accelerator); |
@@ -827,11 +439,12 @@ bool AcceleratorController::AcceleratorPressed( |
// We always display the notification as long as this entry exists, |
// except for NEXT_IME, we must check to avoid showing it for the wrong |
// shortcut, as Alt+Shift is tricky and trigger the action on release. |
- if (action != NEXT_IME || |
- (action == NEXT_IME && |
- ShouldShowDeprecatedNextImeNotification( |
- accelerator_history_->previous_accelerator()))) { |
- ShowDeprecatedAcceleratorNotification( |
+ if (delegate_ && |
+ (action != NEXT_IME || |
+ (action == NEXT_IME && |
+ ShouldShowDeprecatedNextImeNotification( |
+ accelerator_history_->previous_accelerator())))) { |
+ delegate_->ShowDeprecatedAcceleratorNotification( |
data->uma_histogram_name, data->notification_message_id, |
data->old_shortcut_id, data->new_shortcut_id); |
} |
@@ -960,32 +573,17 @@ bool AcceleratorController::CanPerformAction( |
case DEBUG_TOGGLE_SHOW_FPS_COUNTER: |
case DEBUG_TOGGLE_SHOW_PAINT_RECTS: |
return debug::DebugAcceleratorsEnabled(); |
- case MAGNIFY_SCREEN_ZOOM_IN: |
- case MAGNIFY_SCREEN_ZOOM_OUT: |
- return CanHandleMagnifyScreen(); |
- case NEW_INCOGNITO_WINDOW: |
- return CanHandleNewIncognitoWindow(); |
case NEXT_IME: |
return CanHandleNextIme(ime_control_delegate_.get()); |
case PREVIOUS_IME: |
return CanHandlePreviousIme(ime_control_delegate_.get()); |
- case SCALE_UI_RESET: |
- case SCALE_UI_UP: |
- case SCALE_UI_DOWN: |
- return accelerators::IsInternalDisplayZoomEnabled(); |
- case SHOW_MESSAGE_CENTER_BUBBLE: |
- return CanHandleShowMessageCenterBubble(); |
case SWITCH_IME: |
return CanHandleSwitchIme(ime_control_delegate_.get(), accelerator); |
- case TOGGLE_APP_LIST: |
- return CanHandleToggleAppList(accelerator, previous_accelerator); |
case WINDOW_CYCLE_SNAP_DOCK_LEFT: |
case WINDOW_CYCLE_SNAP_DOCK_RIGHT: |
return CanHandleWindowSnapOrDock(); |
case WINDOW_POSITION_CENTER: |
return CanHandlePositionCenter(); |
- case UNPIN: |
- return CanHandleUnpin(); |
#if defined(OS_CHROMEOS) |
case DEBUG_ADD_REMOVE_DISPLAY: |
case DEBUG_SHOW_TOAST: |
@@ -1003,43 +601,16 @@ bool AcceleratorController::CanPerformAction( |
return CanHandleCycleUser(); |
case TOGGLE_CAPS_LOCK: |
return CanHandleToggleCapsLock(accelerator, previous_accelerator); |
- case TOUCH_HUD_CLEAR: |
- case TOUCH_HUD_MODE_CHANGE: |
- return CanHandleTouchHud(); |
- case SWAP_PRIMARY_DISPLAY: |
- return display::Screen::GetScreen()->GetNumDisplays() > 1; |
#endif |
case CYCLE_BACKWARD_MRU: |
case CYCLE_FORWARD_MRU: |
case EXIT: |
case FOCUS_NEXT_PANE: |
case FOCUS_PREVIOUS_PANE: |
- case FOCUS_SHELF: |
- case LAUNCH_APP_0: |
- case LAUNCH_APP_1: |
- case LAUNCH_APP_2: |
- case LAUNCH_APP_3: |
- case LAUNCH_APP_4: |
- case LAUNCH_APP_5: |
- case LAUNCH_APP_6: |
- case LAUNCH_APP_7: |
- case LAUNCH_LAST_APP: |
case MEDIA_NEXT_TRACK: |
case MEDIA_PLAY_PAUSE: |
case MEDIA_PREV_TRACK: |
- case NEW_TAB: |
- case NEW_WINDOW: |
- case OPEN_FEEDBACK_PAGE: |
case PRINT_UI_HIERARCHIES: |
- case RESTORE_TAB: |
- case ROTATE_SCREEN: |
- case ROTATE_WINDOW: |
- case SHOW_KEYBOARD_OVERLAY: |
- case SHOW_SYSTEM_TRAY_BUBBLE: |
- case SHOW_TASK_MANAGER: |
- case TAKE_WINDOW_SCREENSHOT: |
- case TAKE_PARTIAL_SCREENSHOT: |
- case TAKE_SCREENSHOT: |
case TOGGLE_FULLSCREEN: |
case TOGGLE_MAXIMIZED: |
case TOGGLE_OVERVIEW: |
@@ -1047,21 +618,11 @@ bool AcceleratorController::CanPerformAction( |
#if defined(OS_CHROMEOS) |
case BRIGHTNESS_DOWN: |
case BRIGHTNESS_UP: |
- case DISABLE_GPU_WATCHDOG: |
case KEYBOARD_BRIGHTNESS_DOWN: |
case KEYBOARD_BRIGHTNESS_UP: |
- case LOCK_PRESSED: |
- case LOCK_RELEASED: |
- case OPEN_CROSH: |
- case OPEN_FILE_MANAGER: |
- case OPEN_GET_HELP: |
- case POWER_PRESSED: |
- case POWER_RELEASED: |
case SUSPEND: |
- case TOGGLE_MIRROR_MODE: |
case TOGGLE_SPOKEN_FEEDBACK: |
case TOGGLE_WIFI: |
- case TOUCH_HUD_PROJECTION_TOGGLE: |
case VOLUME_DOWN: |
case VOLUME_MUTE: |
case VOLUME_UP: |
@@ -1069,8 +630,14 @@ bool AcceleratorController::CanPerformAction( |
case DUMMY_FOR_RESERVED: |
#endif |
return true; |
+ |
+ default: |
+ // Default switch is temporary until mash transition complete. Needed as |
+ // some actions don't yet work with mash. |
+ break; |
} |
- return false; |
+ DCHECK(delegate_ && delegate_->HandlesAction(action)); |
+ return delegate_->CanPerformAction(action, accelerator, previous_accelerator); |
} |
void AcceleratorController::PerformAction(AcceleratorAction action, |
@@ -1081,8 +648,8 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
return; |
// If your accelerator invokes more than one line of code, please either |
- // implement it in your module's controller code (like TOGGLE_MIRROR_MODE |
- // below) or pull it into a HandleFoo() function above. |
+ // implement it in your module's controller code or pull it into a HandleFoo() |
+ // function above. |
switch (action) { |
case CYCLE_BACKWARD_MRU: |
HandleCycleBackwardMRU(accelerator); |
@@ -1111,42 +678,6 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
case FOCUS_PREVIOUS_PANE: |
HandleRotatePaneFocus(FocusCycler::BACKWARD); |
break; |
- case FOCUS_SHELF: |
- HandleFocusShelf(); |
- break; |
- case LAUNCH_APP_0: |
- HandleLaunchAppN(0); |
- break; |
- case LAUNCH_APP_1: |
- HandleLaunchAppN(1); |
- break; |
- case LAUNCH_APP_2: |
- HandleLaunchAppN(2); |
- break; |
- case LAUNCH_APP_3: |
- HandleLaunchAppN(3); |
- break; |
- case LAUNCH_APP_4: |
- HandleLaunchAppN(4); |
- break; |
- case LAUNCH_APP_5: |
- HandleLaunchAppN(5); |
- break; |
- case LAUNCH_APP_6: |
- HandleLaunchAppN(6); |
- break; |
- case LAUNCH_APP_7: |
- HandleLaunchAppN(7); |
- break; |
- case LAUNCH_LAST_APP: |
- HandleLaunchLastApp(); |
- break; |
- case MAGNIFY_SCREEN_ZOOM_IN: |
- HandleMagnifyScreen(1); |
- break; |
- case MAGNIFY_SCREEN_ZOOM_OUT: |
- HandleMagnifyScreen(-1); |
- break; |
case MEDIA_NEXT_TRACK: |
HandleMediaNextTrack(); |
break; |
@@ -1156,72 +687,18 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
case MEDIA_PREV_TRACK: |
HandleMediaPrevTrack(); |
break; |
- case NEW_INCOGNITO_WINDOW: |
- HandleNewIncognitoWindow(); |
- break; |
- case NEW_TAB: |
- HandleNewTab(accelerator); |
- break; |
- case NEW_WINDOW: |
- HandleNewWindow(); |
- break; |
case NEXT_IME: |
HandleNextIme(ime_control_delegate_.get()); |
break; |
- case OPEN_FEEDBACK_PAGE: |
- HandleOpenFeedbackPage(); |
- break; |
case PREVIOUS_IME: |
HandlePreviousIme(ime_control_delegate_.get(), accelerator); |
break; |
case PRINT_UI_HIERARCHIES: |
debug::PrintUIHierarchies(); |
break; |
- case RESTORE_TAB: |
- HandleRestoreTab(); |
- break; |
- case ROTATE_SCREEN: |
- HandleRotateScreen(); |
- break; |
- case ROTATE_WINDOW: |
- HandleRotateActiveWindow(); |
- break; |
- case SCALE_UI_DOWN: |
- accelerators::ZoomInternalDisplay(false /* down */); |
- break; |
- case SCALE_UI_RESET: |
- accelerators::ResetInternalDisplayZoom(); |
- break; |
- case SCALE_UI_UP: |
- accelerators::ZoomInternalDisplay(true /* up */); |
- break; |
- case SHOW_KEYBOARD_OVERLAY: |
- HandleShowKeyboardOverlay(); |
- break; |
- case SHOW_MESSAGE_CENTER_BUBBLE: |
- HandleShowMessageCenterBubble(); |
- break; |
- case SHOW_SYSTEM_TRAY_BUBBLE: |
- HandleShowSystemTrayBubble(); |
- break; |
- case SHOW_TASK_MANAGER: |
- HandleShowTaskManager(); |
- break; |
case SWITCH_IME: |
HandleSwitchIme(ime_control_delegate_.get(), accelerator); |
break; |
- case TAKE_WINDOW_SCREENSHOT: |
- HandleTakeWindowScreenshot(screenshot_delegate_.get()); |
- break; |
- case TAKE_PARTIAL_SCREENSHOT: |
- HandleTakePartialScreenshot(screenshot_delegate_.get()); |
- break; |
- case TAKE_SCREENSHOT: |
- HandleTakeScreenshot(screenshot_delegate_.get()); |
- break; |
- case TOGGLE_APP_LIST: |
- HandleToggleAppList(accelerator); |
- break; |
case TOGGLE_FULLSCREEN: |
HandleToggleFullscreen(accelerator); |
break; |
@@ -1241,9 +718,6 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
case WINDOW_POSITION_CENTER: |
HandlePositionCenter(); |
break; |
- case UNPIN: |
- HandleUnpin(); |
- break; |
#if defined(OS_CHROMEOS) |
case BRIGHTNESS_DOWN: { |
BrightnessControlDelegate* delegate = |
@@ -1270,9 +744,6 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
case DISABLE_CAPS_LOCK: |
HandleDisableCapsLock(); |
break; |
- case DISABLE_GPU_WATCHDOG: |
- Shell::GetInstance()->gpu_support()->DisableGpuWatchdog(); |
- break; |
case KEYBOARD_BRIGHTNESS_DOWN: { |
KeyboardBrightnessControlDelegate* delegate = |
WmShell::Get()->keyboard_brightness_control_delegate(); |
@@ -1287,42 +758,12 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
delegate->HandleKeyboardBrightnessUp(accelerator); |
break; |
} |
- case LOCK_PRESSED: |
- case LOCK_RELEASED: |
- Shell::GetInstance()->power_button_controller()->OnLockButtonEvent( |
- action == LOCK_PRESSED, base::TimeTicks()); |
- break; |
case LOCK_SCREEN: |
HandleLock(); |
break; |
- case OPEN_CROSH: |
- HandleCrosh(); |
- break; |
- case OPEN_FILE_MANAGER: |
- HandleFileManager(); |
- break; |
- case OPEN_GET_HELP: |
- HandleGetHelp(); |
- break; |
- case POWER_PRESSED: // fallthrough |
- case POWER_RELEASED: |
- if (!base::SysInfo::IsRunningOnChromeOS()) { |
- // There is no powerd, the Chrome OS power manager, in linux desktop, |
- // so call the PowerButtonController here. |
- Shell::GetInstance()->power_button_controller()->OnPowerButtonEvent( |
- action == POWER_PRESSED, base::TimeTicks()); |
- } |
- // We don't do anything with these at present on the device, |
- // (power button events are reported to us from powerm via |
- // D-BUS), but we consume them to prevent them from getting |
- // passed to apps -- see http://crbug.com/146609. |
- break; |
case SUSPEND: |
HandleSuspend(); |
break; |
- case SWAP_PRIMARY_DISPLAY: |
- HandleSwapPrimaryDisplay(); |
- break; |
case SWITCH_TO_NEXT_USER: |
HandleCycleUser(SessionStateDelegate::CYCLE_TO_NEXT_USER); |
break; |
@@ -1332,24 +773,12 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
case TOGGLE_CAPS_LOCK: |
HandleToggleCapsLock(); |
break; |
- case TOGGLE_MIRROR_MODE: |
- HandleToggleMirrorMode(); |
- break; |
case TOGGLE_SPOKEN_FEEDBACK: |
HandleToggleSpokenFeedback(); |
break; |
case TOGGLE_WIFI: |
WmShell::Get()->system_tray_notifier()->NotifyRequestToggleWifi(); |
break; |
- case TOUCH_HUD_CLEAR: |
- HandleTouchHudClear(); |
- break; |
- case TOUCH_HUD_MODE_CHANGE: |
- HandleTouchHudModeChange(); |
- break; |
- case TOUCH_HUD_PROJECTION_TOGGLE: |
- accelerators::ToggleTouchHudProjection(); |
- break; |
case VOLUME_DOWN: |
HandleVolumeDown(accelerator); |
break; |
@@ -1364,6 +793,12 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
NOTREACHED(); |
break; |
#endif |
+ default: |
+ // Temporary until mash transition complete. Needed as some actions |
+ // don't yet work with mash. |
+ DCHECK(delegate_ && delegate_->HandlesAction(action)); |
+ delegate_->PerformAction(action, accelerator); |
+ break; |
} |
} |