| 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 |