| Index: chrome/browser/chromeos/events/event_rewriter.cc
|
| diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc
|
| index 879e85a0d22706dff47da9a82b62563493210b06..2316a4a0228adb4961b84057dc0e22efbf3664ad 100644
|
| --- a/chrome/browser/chromeos/events/event_rewriter.cc
|
| +++ b/chrome/browser/chromeos/events/event_rewriter.cc
|
| @@ -105,7 +105,7 @@ bool IsISOLevel5ShiftUsedByCurrentInputMethod() {
|
| return manager->IsISOLevel5ShiftUsedByCurrentInputMethod();
|
| }
|
|
|
| -bool IsExtensionCommandRegistered(const ui::KeyEvent& key_event) {
|
| +bool IsExtensionCommandRegistered(ui::KeyboardCode key_code, int flags) {
|
| // Some keyboard events for ChromeOS get rewritten, such as:
|
| // Search+Shift+Left gets converted to Shift+Home (BeginDocument).
|
| // This doesn't make sense if the user has assigned that shortcut
|
| @@ -120,9 +120,9 @@ bool IsExtensionCommandRegistered(const ui::KeyEvent& key_event) {
|
| if (!profile || !extensions::ExtensionCommandsGlobalRegistry::Get(profile))
|
| return false;
|
|
|
| - int modifiers = key_event.flags() & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
|
| - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN);
|
| - ui::Accelerator accelerator(key_event.key_code(), modifiers);
|
| + int modifiers = flags & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
|
| + ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN);
|
| + ui::Accelerator accelerator(key_code, modifiers);
|
| return extensions::ExtensionCommandsGlobalRegistry::Get(profile)
|
| ->IsRegistered(accelerator);
|
| }
|
| @@ -383,7 +383,7 @@ bool EventRewriter::RewriteWithKeyboardRemappingsByKeyCode(
|
| ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| const ui::KeyEvent& key_event,
|
| scoped_ptr<ui::Event>* rewritten_event) {
|
| - if (IsExtensionCommandRegistered(key_event))
|
| + if (IsExtensionCommandRegistered(key_event.key_code(), key_event.flags()))
|
| return ui::EVENT_REWRITE_CONTINUE;
|
| if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE)
|
| DeviceKeyPressedOrReleased(key_event.source_device_id());
|
| @@ -395,13 +395,20 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| RewriteNumPadKeys(key_event, &state);
|
| }
|
| ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
|
| + bool is_sticky_key_extension_command = false;
|
| if (sticky_keys_controller_) {
|
| status = sticky_keys_controller_->RewriteKeyEvent(
|
| key_event, state.key_code, &state.flags);
|
| if (status == ui::EVENT_REWRITE_DISCARD)
|
| return ui::EVENT_REWRITE_DISCARD;
|
| + is_sticky_key_extension_command =
|
| + IsExtensionCommandRegistered(state.key_code, state.flags);
|
| }
|
| - if (!(key_event.flags() & ui::EF_FINAL)) {
|
| +
|
| + // If sticky key rewrites the event, and it matches an extension command, do
|
| + // not further rewrite the event since it won't match the extension command
|
| + // thereafter.
|
| + if (!is_sticky_key_extension_command && !(key_event.flags() & ui::EF_FINAL)) {
|
| RewriteExtendedKeys(key_event, &state);
|
| RewriteFunctionKeys(key_event, &state);
|
| }
|
|
|