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..9dcce100ca93f4c2ed76fc2d66dae007784f7f4a 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,16 +395,23 @@ 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); |
+ is_sticky_key_extension_command = |
+ IsExtensionCommandRegistered(state.key_code, state.flags); |
Finnur
2014/09/24 10:48:41
This block should probably be below line 405.
David Tseng
2014/09/24 16:24:28
Done.
|
if (status == ui::EVENT_REWRITE_DISCARD) |
return ui::EVENT_REWRITE_DISCARD; |
} |
+ // Only rewrite keys involving the search modifier if it has no extensions |
+ // binding the command. |
Finnur
2014/09/24 10:48:41
This comment seems a little out of place here. Why
David Tseng
2014/09/24 16:24:28
Was fixated on Search for the fix; rephrased to be
|
+ if (!is_sticky_key_extension_command) { |
if (!(key_event.flags() & ui::EF_FINAL)) { |
Finnur
2014/09/24 10:48:41
The indentation here is now wrong, but we anyway p
David Tseng
2014/09/24 16:24:28
Done.
|
RewriteExtendedKeys(key_event, &state); |
RewriteFunctionKeys(key_event, &state); |
} |
+ } |
if ((key_event.flags() == state.flags) && |
(key_event.key_code() == state.key_code) && |
#if defined(USE_X11) |