| 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 fdd465ff6897bcd970bbf08d91b758457a58e186..038c5436b021bfc23cad03c6555db0cf59ad4bae 100644
|
| --- a/chrome/browser/chromeos/events/event_rewriter.cc
|
| +++ b/chrome/browser/chromeos/events/event_rewriter.cc
|
| @@ -264,9 +264,14 @@ void EventRewriter::BuildRewrittenKeyEvent(
|
| xkeyevent.xkey = xev->xkey;
|
|
|
| // Update native event to match rewritten |ui::Event|.
|
| - xkeyevent.xkey.keycode = XKeysymToKeycode(
|
| - gfx::GetXDisplay(),
|
| - ui::XKeysymForWindowsKeyCode(key_code, flags & ui::EF_SHIFT_DOWN));
|
| + // The X11 keycode represents a physical key position, so it shouldn't
|
| + // change unless we have actually changed keys, not just modifiers.
|
| + // This is one guard against problems like crbug.com/390263.
|
| + if (key_event.key_code() != key_code) {
|
| + xkeyevent.xkey.keycode =
|
| + XKeyCodeForWindowsKeyCode(key_code, flags, gfx::GetXDisplay());
|
| + }
|
| +
|
| UpdateX11EventMask(flags, &xkeyevent.xkey.state);
|
| ui::KeyEvent x11_key_event(&xkeyevent, false);
|
| rewritten_key_event = new ui::KeyEvent(x11_key_event);
|
|
|