OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/mus/accelerators/accelerator_controller_delegate_mus.h" | 5 #include "ash/mus/accelerators/accelerator_controller_delegate_mus.h" |
6 | 6 |
7 #include "ash/mus/window_manager.h" | 7 #include "ash/mus/window_manager.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "mash/public/interfaces/launchable.mojom.h" | 9 #include "mash/public/interfaces/launchable.mojom.h" |
10 #include "services/service_manager/public/cpp/connector.h" | 10 #include "services/service_manager/public/cpp/connector.h" |
11 #include "services/ui/public/interfaces/constants.mojom.h" | 11 #include "services/ui/public/interfaces/constants.mojom.h" |
12 #include "services/ui/public/interfaces/display/display_controller.mojom.h" | 12 #include "services/ui/public/interfaces/display/display_controller.mojom.h" |
13 #include "services/ui/public/interfaces/display/test_display_controller.mojom.h" | 13 #include "services/ui/public/interfaces/display/test_display_controller.mojom.h" |
| 14 #include "ui/display/screen.h" |
14 | 15 |
15 namespace ash { | 16 namespace ash { |
16 namespace mus { | 17 namespace mus { |
17 | 18 |
18 AcceleratorControllerDelegateMus::AcceleratorControllerDelegateMus( | 19 AcceleratorControllerDelegateMus::AcceleratorControllerDelegateMus( |
19 WindowManager* window_manager) | 20 WindowManager* window_manager) |
20 : window_manager_(window_manager) { | 21 : window_manager_(window_manager) { |
21 #if !defined(OS_CHROMEOS) | 22 #if !defined(OS_CHROMEOS) |
22 // To avoid trybot complaining that |window_manager_| is not being used in | 23 // To avoid trybot complaining that |window_manager_| is not being used in |
23 // non-ChromeOS. | 24 // non-ChromeOS. |
24 window_manager_ = nullptr; | 25 window_manager_ = nullptr; |
25 #endif | 26 #endif |
26 } | 27 } |
27 | 28 |
28 AcceleratorControllerDelegateMus::~AcceleratorControllerDelegateMus() {} | 29 AcceleratorControllerDelegateMus::~AcceleratorControllerDelegateMus() {} |
29 | 30 |
30 bool AcceleratorControllerDelegateMus::HandlesAction(AcceleratorAction action) { | 31 bool AcceleratorControllerDelegateMus::HandlesAction(AcceleratorAction action) { |
31 // This is the list of actions that are not ported from aura. The actions are | 32 // Accelerators that return true need to work differently in mash. These |
32 // replicated here to make sure we don't forget any. This list should | 33 // should have implementations in CanPerformAction() and PerformAction(). |
33 // eventually be empty. If there are any actions that don't make sense for | 34 // Accelerators that return false have not been ported to work with mash yet. |
34 // mus, then they should be removed from AcceleratorAction. | 35 // If the behavior between cash and mash can be unified then the accelerator |
| 36 // should be moved to accelerator_controller.cc/h. See |
35 // http://crbug.com/612331. | 37 // http://crbug.com/612331. |
36 switch (action) { | 38 switch (action) { |
| 39 case SCALE_UI_DOWN: |
| 40 case SCALE_UI_RESET: |
| 41 case SCALE_UI_UP: |
| 42 case ROTATE_SCREEN: |
| 43 return true; |
37 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: | 44 case DEBUG_TOGGLE_DEVICE_SCALE_FACTOR: |
38 case DEV_TOGGLE_ROOT_WINDOW_FULL_SCREEN: | 45 case DEV_TOGGLE_ROOT_WINDOW_FULL_SCREEN: |
39 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: | 46 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: |
40 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: | 47 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: |
41 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: | 48 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: |
42 case MAGNIFY_SCREEN_ZOOM_IN: | 49 case MAGNIFY_SCREEN_ZOOM_IN: |
43 case MAGNIFY_SCREEN_ZOOM_OUT: | 50 case MAGNIFY_SCREEN_ZOOM_OUT: |
44 case ROTATE_SCREEN: | |
45 case ROTATE_WINDOW: | 51 case ROTATE_WINDOW: |
46 case SCALE_UI_DOWN: | |
47 case SCALE_UI_RESET: | |
48 case SCALE_UI_UP: | |
49 case SHOW_SYSTEM_TRAY_BUBBLE: | 52 case SHOW_SYSTEM_TRAY_BUBBLE: |
50 case TAKE_PARTIAL_SCREENSHOT: | 53 case TAKE_PARTIAL_SCREENSHOT: |
51 case TAKE_SCREENSHOT: | 54 case TAKE_SCREENSHOT: |
52 case TAKE_WINDOW_SCREENSHOT: | 55 case TAKE_WINDOW_SCREENSHOT: |
53 case UNPIN: | 56 case UNPIN: |
54 NOTIMPLEMENTED(); | 57 NOTIMPLEMENTED(); |
55 return false; | 58 return false; |
56 | 59 |
57 #if defined(OS_CHROMEOS) | 60 #if defined(OS_CHROMEOS) |
58 case DEV_ADD_REMOVE_DISPLAY: | 61 case DEV_ADD_REMOVE_DISPLAY: |
59 case DEV_TOGGLE_UNIFIED_DESKTOP: | 62 case DEV_TOGGLE_UNIFIED_DESKTOP: |
60 case SWAP_PRIMARY_DISPLAY: | 63 case SWAP_PRIMARY_DISPLAY: |
| 64 case TOGGLE_MIRROR_MODE: |
61 case TOUCH_HUD_PROJECTION_TOGGLE: | 65 case TOUCH_HUD_PROJECTION_TOGGLE: |
62 return true; | 66 return true; |
63 case LOCK_PRESSED: | 67 case LOCK_PRESSED: |
64 case LOCK_RELEASED: | 68 case LOCK_RELEASED: |
65 case POWER_PRESSED: | 69 case POWER_PRESSED: |
66 case POWER_RELEASED: | 70 case POWER_RELEASED: |
67 case TOGGLE_MIRROR_MODE: | |
68 case TOUCH_HUD_CLEAR: | 71 case TOUCH_HUD_CLEAR: |
69 case TOUCH_HUD_MODE_CHANGE: | 72 case TOUCH_HUD_MODE_CHANGE: |
70 NOTIMPLEMENTED(); | 73 NOTIMPLEMENTED(); |
71 return false; | 74 return false; |
72 #endif | 75 #endif |
73 | 76 |
74 default: | 77 default: |
75 break; | 78 break; |
76 } | 79 } |
77 return false; | 80 return false; |
78 } | 81 } |
79 | 82 |
80 bool AcceleratorControllerDelegateMus::CanPerformAction( | 83 bool AcceleratorControllerDelegateMus::CanPerformAction( |
81 AcceleratorAction action, | 84 AcceleratorAction action, |
82 const ui::Accelerator& accelerator, | 85 const ui::Accelerator& accelerator, |
83 const ui::Accelerator& previous_accelerator) { | 86 const ui::Accelerator& previous_accelerator) { |
| 87 switch (action) { |
| 88 case ROTATE_SCREEN: |
| 89 case SCALE_UI_DOWN: |
| 90 case SCALE_UI_RESET: |
| 91 case SCALE_UI_UP: |
| 92 return true; |
84 #if defined(OS_CHROMEOS) | 93 #if defined(OS_CHROMEOS) |
85 switch (action) { | |
86 case DEV_ADD_REMOVE_DISPLAY: | 94 case DEV_ADD_REMOVE_DISPLAY: |
87 case DEV_TOGGLE_UNIFIED_DESKTOP: | 95 case DEV_TOGGLE_UNIFIED_DESKTOP: |
| 96 return true; |
88 case SWAP_PRIMARY_DISPLAY: | 97 case SWAP_PRIMARY_DISPLAY: |
| 98 return display::Screen::GetScreen()->GetNumDisplays() > 1; |
| 99 case TOGGLE_MIRROR_MODE: |
89 case TOUCH_HUD_PROJECTION_TOGGLE: | 100 case TOUCH_HUD_PROJECTION_TOGGLE: |
90 return true; | 101 return true; |
| 102 #endif |
91 default: | 103 default: |
92 break; | 104 break; |
93 } | 105 } |
94 #endif | |
95 return false; | 106 return false; |
96 } | 107 } |
97 | 108 |
98 void AcceleratorControllerDelegateMus::PerformAction( | 109 void AcceleratorControllerDelegateMus::PerformAction( |
99 AcceleratorAction action, | 110 AcceleratorAction action, |
100 const ui::Accelerator& accelerator) { | 111 const ui::Accelerator& accelerator) { |
| 112 switch (action) { |
| 113 case ROTATE_SCREEN: { |
| 114 window_manager_->GetDisplayController()->RotateCurrentDisplayCW(); |
| 115 break; |
| 116 } |
| 117 case SCALE_UI_DOWN: { |
| 118 window_manager_->GetDisplayController()->DecreaseInternalDisplayZoom(); |
| 119 break; |
| 120 } |
| 121 case SCALE_UI_RESET: { |
| 122 window_manager_->GetDisplayController()->ResetInternalDisplayZoom(); |
| 123 break; |
| 124 } |
| 125 case SCALE_UI_UP: { |
| 126 window_manager_->GetDisplayController()->IncreaseInternalDisplayZoom(); |
| 127 break; |
| 128 } |
101 #if defined(OS_CHROMEOS) | 129 #if defined(OS_CHROMEOS) |
102 switch (action) { | |
103 case DEV_ADD_REMOVE_DISPLAY: { | 130 case DEV_ADD_REMOVE_DISPLAY: { |
104 display::mojom::TestDisplayControllerPtr test_display_controller; | 131 display::mojom::TestDisplayControllerPtr test_display_controller; |
105 window_manager_->connector()->ConnectToInterface( | 132 window_manager_->connector()->ConnectToInterface( |
106 ui::mojom::kServiceName, &test_display_controller); | 133 ui::mojom::kServiceName, &test_display_controller); |
107 test_display_controller->ToggleAddRemoveDisplay(); | 134 test_display_controller->ToggleAddRemoveDisplay(); |
108 break; | 135 break; |
109 } | 136 } |
110 case DEV_TOGGLE_UNIFIED_DESKTOP: { | 137 case DEV_TOGGLE_UNIFIED_DESKTOP: { |
111 // TODO(crbug.com/657816): This is hack. I'm just stealing the shortcut | 138 // TODO(crbug.com/657816): This is hack. I'm just stealing the shortcut |
112 // key to toggle display size in mus. This should be removed by launch. | 139 // key to toggle display size in mus. This should be removed by launch. |
113 display::mojom::TestDisplayControllerPtr test_display_controller; | 140 display::mojom::TestDisplayControllerPtr test_display_controller; |
114 window_manager_->connector()->ConnectToInterface( | 141 window_manager_->connector()->ConnectToInterface( |
115 ui::mojom::kServiceName, &test_display_controller); | 142 ui::mojom::kServiceName, &test_display_controller); |
116 test_display_controller->ToggleDisplayResolution(); | 143 test_display_controller->ToggleDisplayResolution(); |
117 break; | 144 break; |
118 } | 145 } |
119 case SWAP_PRIMARY_DISPLAY: { | 146 case SWAP_PRIMARY_DISPLAY: { |
120 window_manager_->GetDisplayController()->SwapPrimaryDisplay(); | 147 window_manager_->GetDisplayController()->SwapPrimaryDisplay(); |
121 break; | 148 break; |
122 } | 149 } |
| 150 case TOGGLE_MIRROR_MODE: { |
| 151 window_manager_->GetDisplayController()->ToggleMirrorMode(); |
| 152 break; |
| 153 } |
123 case TOUCH_HUD_PROJECTION_TOGGLE: { | 154 case TOUCH_HUD_PROJECTION_TOGGLE: { |
124 mash::mojom::LaunchablePtr launchable; | 155 mash::mojom::LaunchablePtr launchable; |
125 window_manager_->connector()->ConnectToInterface("touch_hud", | 156 window_manager_->connector()->ConnectToInterface("touch_hud", |
126 &launchable); | 157 &launchable); |
127 launchable->Launch(mash::mojom::kWindow, | 158 launchable->Launch(mash::mojom::kWindow, |
128 mash::mojom::LaunchMode::DEFAULT); | 159 mash::mojom::LaunchMode::DEFAULT); |
129 break; | 160 break; |
130 } | 161 } |
| 162 #endif |
131 default: | 163 default: |
132 NOTREACHED(); | 164 NOTREACHED(); |
133 } | 165 } |
134 #else | |
135 NOTREACHED(); | |
136 #endif | |
137 } | 166 } |
138 | 167 |
139 void AcceleratorControllerDelegateMus::ShowDeprecatedAcceleratorNotification( | 168 void AcceleratorControllerDelegateMus::ShowDeprecatedAcceleratorNotification( |
140 const char* const notification_id, | 169 const char* const notification_id, |
141 int message_id, | 170 int message_id, |
142 int old_shortcut_id, | 171 int old_shortcut_id, |
143 int new_shortcut_id) { | 172 int new_shortcut_id) { |
144 // TODO: http://crbug.com/630316. | 173 // TODO: http://crbug.com/630316. |
145 NOTIMPLEMENTED(); | 174 NOTIMPLEMENTED(); |
146 } | 175 } |
147 | 176 |
148 } // namespace mus | 177 } // namespace mus |
149 } // namespace ash | 178 } // namespace ash |
OLD | NEW |