| Index: ash/accelerators/accelerator_controller.cc
|
| diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
|
| index 153cba41ecffcedbd8469b2485bf2716dd40d859..cd62a95656b0968855b635f2d7c1aafebe862092 100644
|
| --- a/ash/accelerators/accelerator_controller.cc
|
| +++ b/ash/accelerators/accelerator_controller.cc
|
| @@ -450,6 +450,8 @@ bool AcceleratorController::PerformAction(int action,
|
| // Type of the previous accelerator. Used by NEXT_IME and DISABLE_CAPS_LOCK.
|
| const ui::EventType previous_event_type =
|
| context_.previous_accelerator().type();
|
| + const ui::KeyboardCode previous_key_code =
|
| + context_.previous_accelerator().key_code();
|
|
|
| // You *MUST* return true when some action is performed. Otherwise, this
|
| // function might be called *twice*, via BrowserView::PreHandleKeyboardEvent
|
| @@ -539,10 +541,6 @@ bool AcceleratorController::PerformAction(int action,
|
| // For bindings on the Search key, activate the binding on press if the
|
| // Search key is not acting as a modifier. Otherwise, activate it on
|
| // release.
|
| -
|
| - const ui::KeyboardCode previous_key_code =
|
| - context_.previous_accelerator().key_code();
|
| -
|
| const bool search_as_function_key =
|
| Shell::GetInstance()->delegate()->IsSearchKeyActingAsFunctionKey();
|
| const bool type_pressed = accelerator.type() == ui::ET_KEY_PRESSED;
|
| @@ -571,9 +569,12 @@ bool AcceleratorController::PerformAction(int action,
|
| ash::Shell::GetInstance()->ToggleAppList();
|
| return true;
|
| case DISABLE_CAPS_LOCK:
|
| - // See: case NEXT_IME.
|
| - if (previous_event_type == ui::ET_KEY_RELEASED) {
|
| - // We totally ignore this accelerator.
|
| + if (previous_event_type == ui::ET_KEY_RELEASED ||
|
| + (previous_key_code != ui::VKEY_LSHIFT &&
|
| + previous_key_code != ui::VKEY_SHIFT &&
|
| + previous_key_code != ui::VKEY_RSHIFT)) {
|
| + // If something else was pressed between the Shift key being pressed
|
| + // and released, then ignore the release of the Shift key.
|
| return false;
|
| }
|
| if (shell->caps_lock_delegate()->IsCapsLockEnabled()) {
|
| @@ -656,8 +657,8 @@ bool AcceleratorController::PerformAction(int action,
|
| // This workaround allows the user to trigger NEXT_IME even if the
|
| // user presses Shift+Alt before releasing Enter.
|
| // TODO(nona|mazda): Fix crbug.com/139556 in a cleaner way.
|
| - context_.previous_accelerator().key_code() != ui::VKEY_RETURN &&
|
| - context_.previous_accelerator().key_code() != ui::VKEY_SPACE) {
|
| + previous_key_code != ui::VKEY_RETURN &&
|
| + previous_key_code != ui::VKEY_SPACE) {
|
| // We totally ignore this accelerator.
|
| // TODO(mazda): Fix crbug.com/158217
|
| return false;
|
|
|