Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(919)

Side by Side Diff: ash/accelerators/accelerator_controller.cc

Issue 1414483011: Deprecate Shift+Alt to switch IME and use Ctrl+Shift+Space instead. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Modified the design to account for deprecated accelerators that map to the same action. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698