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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ash/accelerators/accelerator_controller.cc
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index b18d0a01a1af496ea7a3b0be59fe3279badddfaa..3c37e993f6b9859dbd4ce3abb4c888753581bf5e 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -253,33 +253,38 @@ void HandleNewWindow() {
}
bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate,
- const ui::Accelerator& previous_accelerator) {
- // We only allow next IME to be triggered if the previous is accelerator key
- // is ONLY either Shift, Alt, Enter or Space.
- // The first two cases to avoid conflicting accelerators that contain
- // Alt+Shift (like Alt+Shift+Tab or Alt+Shift+S) to trigger next IME when the
- // wrong order of key sequences is pressed. crbug.com/527154.
- // The latter two cases are needed for CJK IME users who tend to press Enter
- // (or Space) and Shift+Alt almost at the same time to commit an IME string
- // and then switch from the IME to the English layout. This allows these users
- // to trigger NEXT_IME even if they press Shift+Alt before releasing Enter.
- // crbug.com/139556.
- // TODO(nona|mazda): Fix crbug.com/139556 in a cleaner way.
- const ui::KeyboardCode previous_key_code = previous_accelerator.key_code();
- switch (previous_key_code) {
- case ui::VKEY_SHIFT:
- case ui::VKEY_LSHIFT:
- case ui::VKEY_RSHIFT:
- case ui::VKEY_MENU:
- case ui::VKEY_LMENU:
- case ui::VKEY_RMENU:
- case ui::VKEY_RETURN:
- case ui::VKEY_SPACE:
- return ime_control_delegate && ime_control_delegate->CanCycleIme();
-
- default:
- return false;
+ const ui::Accelerator& previous_accelerator,
+ bool current_accelerator_is_deprecated) {
+ if (current_accelerator_is_deprecated) {
+ // We only allow next IME to be triggered if the previous is accelerator key
+ // is ONLY either Shift, Alt, Enter or Space.
+ // The first six cases below are to avoid conflicting accelerators that
+ // contain Alt+Shift (like Alt+Shift+Tab or Alt+Shift+S) to trigger next IME
+ // when the wrong order of key sequences is pressed. crbug.com/527154.
+ // The latter two cases are needed for CJK IME users who tend to press Enter
+ // (or Space) and Shift+Alt almost at the same time to commit an IME string
+ // and then switch from the IME to the English layout. This allows these
+ // users to trigger NEXT_IME even if they press Shift+Alt before releasing
+ // Enter. crbug.com/139556.
+ // TODO(nona|mazda): Fix crbug.com/139556 in a cleaner way.
+ const ui::KeyboardCode previous_key_code = previous_accelerator.key_code();
+ switch (previous_key_code) {
+ case ui::VKEY_SHIFT:
+ case ui::VKEY_LSHIFT:
+ case ui::VKEY_RSHIFT:
+ case ui::VKEY_MENU:
+ case ui::VKEY_LMENU:
+ case ui::VKEY_RMENU:
+ case ui::VKEY_RETURN:
+ case ui::VKEY_SPACE:
+ break;
+
+ default:
+ return false;
+ }
}
+
+ return ime_control_delegate && ime_control_delegate->CanCycleIme();
}
void HandleNextIme(ImeControlDelegate* ime_control_delegate) {
@@ -913,17 +918,19 @@ void AcceleratorController::RegisterAccelerators(
void AcceleratorController::RegisterDeprecatedAccelerators() {
#if defined(OS_CHROMEOS)
+ for (size_t i = 0; i < kDeprecatedAcceleratorsDataLength; ++i) {
+ const DeprecatedAcceleratorData* data = &kDeprecatedAcceleratorsData[i];
+ actions_with_deprecations_[data->action] = data;
+ }
+
for (size_t i = 0; i < kDeprecatedAcceleratorsLength; ++i) {
- const DeprecatedAcceleratorData* data = &kDeprecatedAccelerators[i];
- const AcceleratorAction action = data->deprecated_accelerator.action;
+ const AcceleratorData& accelerator_data = kDeprecatedAccelerators[i];
const ui::Accelerator deprecated_accelerator =
- CreateAccelerator(data->deprecated_accelerator.keycode,
- data->deprecated_accelerator.modifiers,
- data->deprecated_accelerator.trigger_on_press);
+ CreateAccelerator(accelerator_data.keycode, accelerator_data.modifiers,
+ accelerator_data.trigger_on_press);
Register(deprecated_accelerator, this);
- actions_with_deprecations_[action] = data;
- accelerators_[deprecated_accelerator] = action;
+ accelerators_[deprecated_accelerator] = accelerator_data.action;
deprecated_accelerators_.insert(deprecated_accelerator);
}
#endif // defined(OS_CHROMEOS)
@@ -964,9 +971,18 @@ bool AcceleratorController::CanPerformAction(
return CanHandleMagnifyScreen();
case NEW_INCOGNITO_WINDOW:
return CanHandleNewIncognitoWindow();
- case NEXT_IME:
- return CanHandleNextIme(ime_control_delegate_.get(),
- previous_accelerator);
+ case NEXT_IME: {
+#if defined(OS_CHROMEOS)
+ bool accelerator_is_deprecated =
+ (deprecated_accelerators_.count(accelerator) != 0);
+#else
+ // On non-chromeos, the NEXT_IME deprecated accelerators are always used.
+ bool accelerator_is_deprecated = true;
+#endif // defined(OS_CHROMEOS)
+
+ return CanHandleNextIme(ime_control_delegate_.get(), previous_accelerator,
+ accelerator_is_deprecated);
+ }
case PREVIOUS_IME:
return CanHandlePreviousIme(ime_control_delegate_.get());
case SCALE_UI_RESET:

Powered by Google App Engine
This is Rietveld 408576698