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 <string> | 9 #include <string> |
10 | 10 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 Shell::GetInstance()->new_window_delegate()->NewTab(); | 246 Shell::GetInstance()->new_window_delegate()->NewTab(); |
247 } | 247 } |
248 | 248 |
249 void HandleNewWindow() { | 249 void HandleNewWindow() { |
250 base::RecordAction(base::UserMetricsAction("Accel_New_Window")); | 250 base::RecordAction(base::UserMetricsAction("Accel_New_Window")); |
251 Shell::GetInstance()->new_window_delegate()->NewWindow( | 251 Shell::GetInstance()->new_window_delegate()->NewWindow( |
252 false /* is_incognito */); | 252 false /* is_incognito */); |
253 } | 253 } |
254 | 254 |
255 bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate, | 255 bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate, |
256 const ui::Accelerator& previous_accelerator) { | 256 const ui::Accelerator& previous_accelerator, |
257 // We only allow next IME to be triggered if the previous is accelerator key | 257 bool current_accelerator_is_deprecated) { |
258 // is ONLY either Shift, Alt, Enter or Space. | 258 if (current_accelerator_is_deprecated) { |
259 // The first two cases to avoid conflicting accelerators that contain | 259 // We only allow next IME to be triggered if the previous is accelerator key |
260 // Alt+Shift (like Alt+Shift+Tab or Alt+Shift+S) to trigger next IME when the | 260 // is ONLY either Shift, Alt, Enter or Space. |
261 // wrong order of key sequences is pressed. crbug.com/527154. | 261 // The first six cases below are to avoid conflicting accelerators that |
262 // The latter two cases are needed for CJK IME users who tend to press Enter | 262 // contain Alt+Shift (like Alt+Shift+Tab or Alt+Shift+S) to trigger next IME |
263 // (or Space) and Shift+Alt almost at the same time to commit an IME string | 263 // when the wrong order of key sequences is pressed. crbug.com/527154. |
264 // and then switch from the IME to the English layout. This allows these users | 264 // The latter two cases are needed for CJK IME users who tend to press Enter |
265 // to trigger NEXT_IME even if they press Shift+Alt before releasing Enter. | 265 // (or Space) and Shift+Alt almost at the same time to commit an IME string |
266 // crbug.com/139556. | 266 // and then switch from the IME to the English layout. This allows these |
267 // TODO(nona|mazda): Fix crbug.com/139556 in a cleaner way. | 267 // users to trigger NEXT_IME even if they press Shift+Alt before releasing |
268 const ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); | 268 // Enter. crbug.com/139556. |
269 switch (previous_key_code) { | 269 // TODO(nona|mazda): Fix crbug.com/139556 in a cleaner way. |
270 case ui::VKEY_SHIFT: | 270 const ui::KeyboardCode previous_key_code = previous_accelerator.key_code(); |
271 case ui::VKEY_LSHIFT: | 271 switch (previous_key_code) { |
272 case ui::VKEY_RSHIFT: | 272 case ui::VKEY_SHIFT: |
273 case ui::VKEY_MENU: | 273 case ui::VKEY_LSHIFT: |
274 case ui::VKEY_LMENU: | 274 case ui::VKEY_RSHIFT: |
275 case ui::VKEY_RMENU: | 275 case ui::VKEY_MENU: |
276 case ui::VKEY_RETURN: | 276 case ui::VKEY_LMENU: |
277 case ui::VKEY_SPACE: | 277 case ui::VKEY_RMENU: |
278 return ime_control_delegate && ime_control_delegate->CanCycleIme(); | 278 case ui::VKEY_RETURN: |
| 279 case ui::VKEY_SPACE: |
| 280 break; |
279 | 281 |
280 default: | 282 default: |
281 return false; | 283 return false; |
| 284 } |
282 } | 285 } |
| 286 |
| 287 return ime_control_delegate && ime_control_delegate->CanCycleIme(); |
283 } | 288 } |
284 | 289 |
285 void HandleNextIme(ImeControlDelegate* ime_control_delegate) { | 290 void HandleNextIme(ImeControlDelegate* ime_control_delegate) { |
286 base::RecordAction(UserMetricsAction("Accel_Next_Ime")); | 291 base::RecordAction(UserMetricsAction("Accel_Next_Ime")); |
287 ime_control_delegate->HandleNextIme(); | 292 ime_control_delegate->HandleNextIme(); |
288 } | 293 } |
289 | 294 |
290 void HandleOpenFeedbackPage() { | 295 void HandleOpenFeedbackPage() { |
291 base::RecordAction(UserMetricsAction("Accel_Open_Feedback_Page")); | 296 base::RecordAction(UserMetricsAction("Accel_Open_Feedback_Page")); |
292 ash::Shell::GetInstance()->new_window_delegate()->OpenFeedbackPage(); | 297 ash::Shell::GetInstance()->new_window_delegate()->OpenFeedbackPage(); |
(...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 CreateAccelerator(accelerators[i].keycode, accelerators[i].modifiers, | 911 CreateAccelerator(accelerators[i].keycode, accelerators[i].modifiers, |
907 accelerators[i].trigger_on_press); | 912 accelerators[i].trigger_on_press); |
908 Register(accelerator, this); | 913 Register(accelerator, this); |
909 accelerators_.insert( | 914 accelerators_.insert( |
910 std::make_pair(accelerator, accelerators[i].action)); | 915 std::make_pair(accelerator, accelerators[i].action)); |
911 } | 916 } |
912 } | 917 } |
913 | 918 |
914 void AcceleratorController::RegisterDeprecatedAccelerators() { | 919 void AcceleratorController::RegisterDeprecatedAccelerators() { |
915 #if defined(OS_CHROMEOS) | 920 #if defined(OS_CHROMEOS) |
| 921 for (size_t i = 0; i < kDeprecatedAcceleratorsDataLength; ++i) { |
| 922 const DeprecatedAcceleratorData* data = &kDeprecatedAcceleratorsData[i]; |
| 923 actions_with_deprecations_[data->action] = data; |
| 924 } |
| 925 |
916 for (size_t i = 0; i < kDeprecatedAcceleratorsLength; ++i) { | 926 for (size_t i = 0; i < kDeprecatedAcceleratorsLength; ++i) { |
917 const DeprecatedAcceleratorData* data = &kDeprecatedAccelerators[i]; | 927 const AcceleratorData& accelerator_data = kDeprecatedAccelerators[i]; |
918 const AcceleratorAction action = data->deprecated_accelerator.action; | |
919 const ui::Accelerator deprecated_accelerator = | 928 const ui::Accelerator deprecated_accelerator = |
920 CreateAccelerator(data->deprecated_accelerator.keycode, | 929 CreateAccelerator(accelerator_data.keycode, accelerator_data.modifiers, |
921 data->deprecated_accelerator.modifiers, | 930 accelerator_data.trigger_on_press); |
922 data->deprecated_accelerator.trigger_on_press); | |
923 | 931 |
924 Register(deprecated_accelerator, this); | 932 Register(deprecated_accelerator, this); |
925 actions_with_deprecations_[action] = data; | 933 accelerators_[deprecated_accelerator] = accelerator_data.action; |
926 accelerators_[deprecated_accelerator] = action; | |
927 deprecated_accelerators_.insert(deprecated_accelerator); | 934 deprecated_accelerators_.insert(deprecated_accelerator); |
928 } | 935 } |
929 #endif // defined(OS_CHROMEOS) | 936 #endif // defined(OS_CHROMEOS) |
930 } | 937 } |
931 | 938 |
932 bool AcceleratorController::CanPerformAction( | 939 bool AcceleratorController::CanPerformAction( |
933 AcceleratorAction action, | 940 AcceleratorAction action, |
934 const ui::Accelerator& accelerator) { | 941 const ui::Accelerator& accelerator) { |
935 if (nonrepeatable_actions_.find(action) != nonrepeatable_actions_.end() && | 942 if (nonrepeatable_actions_.find(action) != nonrepeatable_actions_.end() && |
936 accelerator.IsRepeat()) { | 943 accelerator.IsRepeat()) { |
(...skipping 20 matching lines...) Expand all Loading... |
957 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: | 964 case DEBUG_TOGGLE_ROOT_WINDOW_FULL_SCREEN: |
958 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: | 965 case DEBUG_TOGGLE_SHOW_DEBUG_BORDERS: |
959 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: | 966 case DEBUG_TOGGLE_SHOW_FPS_COUNTER: |
960 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: | 967 case DEBUG_TOGGLE_SHOW_PAINT_RECTS: |
961 return debug::DebugAcceleratorsEnabled(); | 968 return debug::DebugAcceleratorsEnabled(); |
962 case MAGNIFY_SCREEN_ZOOM_IN: | 969 case MAGNIFY_SCREEN_ZOOM_IN: |
963 case MAGNIFY_SCREEN_ZOOM_OUT: | 970 case MAGNIFY_SCREEN_ZOOM_OUT: |
964 return CanHandleMagnifyScreen(); | 971 return CanHandleMagnifyScreen(); |
965 case NEW_INCOGNITO_WINDOW: | 972 case NEW_INCOGNITO_WINDOW: |
966 return CanHandleNewIncognitoWindow(); | 973 return CanHandleNewIncognitoWindow(); |
967 case NEXT_IME: | 974 case NEXT_IME: { |
968 return CanHandleNextIme(ime_control_delegate_.get(), | 975 #if defined(OS_CHROMEOS) |
969 previous_accelerator); | 976 bool accelerator_is_deprecated = |
| 977 (deprecated_accelerators_.count(accelerator) != 0); |
| 978 #else |
| 979 // On non-chromeos, the NEXT_IME deprecated accelerators are always used. |
| 980 bool accelerator_is_deprecated = true; |
| 981 #endif // defined(OS_CHROMEOS) |
| 982 |
| 983 return CanHandleNextIme(ime_control_delegate_.get(), previous_accelerator, |
| 984 accelerator_is_deprecated); |
| 985 } |
970 case PREVIOUS_IME: | 986 case PREVIOUS_IME: |
971 return CanHandlePreviousIme(ime_control_delegate_.get()); | 987 return CanHandlePreviousIme(ime_control_delegate_.get()); |
972 case SCALE_UI_RESET: | 988 case SCALE_UI_RESET: |
973 case SCALE_UI_UP: | 989 case SCALE_UI_UP: |
974 case SCALE_UI_DOWN: | 990 case SCALE_UI_DOWN: |
975 return accelerators::IsInternalDisplayZoomEnabled(); | 991 return accelerators::IsInternalDisplayZoomEnabled(); |
976 case SHOW_MESSAGE_CENTER_BUBBLE: | 992 case SHOW_MESSAGE_CENTER_BUBBLE: |
977 return CanHandleShowMessageCenterBubble(); | 993 return CanHandleShowMessageCenterBubble(); |
978 case SWITCH_IME: | 994 case SWITCH_IME: |
979 return CanHandleSwitchIme(ime_control_delegate_.get(), accelerator); | 995 return CanHandleSwitchIme(ime_control_delegate_.get(), accelerator); |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1392 } | 1408 } |
1393 | 1409 |
1394 void AcceleratorController::SetKeyboardBrightnessControlDelegate( | 1410 void AcceleratorController::SetKeyboardBrightnessControlDelegate( |
1395 scoped_ptr<KeyboardBrightnessControlDelegate> | 1411 scoped_ptr<KeyboardBrightnessControlDelegate> |
1396 keyboard_brightness_control_delegate) { | 1412 keyboard_brightness_control_delegate) { |
1397 keyboard_brightness_control_delegate_ = | 1413 keyboard_brightness_control_delegate_ = |
1398 keyboard_brightness_control_delegate.Pass(); | 1414 keyboard_brightness_control_delegate.Pass(); |
1399 } | 1415 } |
1400 | 1416 |
1401 } // namespace ash | 1417 } // namespace ash |
OLD | NEW |