| 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 9697cb9b758879056697801ba265378afef7d64c..dc736566500c1d0681de4e00ed04ed1b4d57c531 100644
|
| --- a/chrome/browser/chromeos/events/event_rewriter.cc
|
| +++ b/chrome/browser/chromeos/events/event_rewriter.cc
|
| @@ -395,10 +395,13 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| CHECK(xev->type == KeyPress || xev->type == KeyRelease);
|
| XKeyEvent* xkey = &(xev->xkey);
|
| UpdateX11EventMask(rewritten_key_event->flags(), &xkey->state);
|
| - xkey->keycode =
|
| - XKeysymToKeycode(gfx::GetXDisplay(),
|
| - ui::XKeysymForWindowsKeyCode(
|
| - state.key_code, state.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() != state.key_code) {
|
| + xkey->keycode = XKeyCodeForWindowsKeyCode(
|
| + state.key_code, state.flags, gfx::GetXDisplay());
|
| + }
|
| }
|
| #endif
|
| return status;
|
|
|