Chromium Code Reviews| Index: chrome/browser/chromeos/system_key_event_listener.cc |
| diff --git a/chrome/browser/chromeos/system_key_event_listener.cc b/chrome/browser/chromeos/system_key_event_listener.cc |
| index 66f6cdc35f87198c4ef2c99346322c8baa22ce65..7997d857e0f8298f5a59acb1ed3dbdf241bd292b 100644 |
| --- a/chrome/browser/chromeos/system_key_event_listener.cc |
| +++ b/chrome/browser/chromeos/system_key_event_listener.cc |
| @@ -184,6 +184,40 @@ bool SystemKeyEventListener::WillProcessXEvent(XEvent* xevent) { |
| } |
| } |
| } |
| + } else if (xevent->type == MappingNotify) { |
| + XMappingEvent* xmap = &xevent->xmapping; |
| + if (xmap->request == MappingKeyboard) { |
| + XRefreshKeyboardMapping(xmap); |
| + Display* display = xmap->display; |
| + Window root = DefaultRootWindow(display); |
| + |
| + struct { |
|
Daniel Erat
2011/05/17 18:33:17
Mind unifying this with the code in the c'tor that
sadrul
2011/05/17 19:39:55
Done.
|
| + int32* keycode; |
| + KeySym keysym; |
| + } *key, keys[] = { |
| + { &key_f8_, XK_F8 }, |
| + { &key_f9_, XK_F9 }, |
| + { &key_f10_, XK_F10 }, |
| + { &key_volume_mute_, XF86XK_AudioMute }, |
| + { &key_volume_down_, XF86XK_AudioLowerVolume }, |
| + { &key_volume_up_, XF86XK_AudioRaiseVolume }, |
| + { NULL, NoSymbol } |
| + }; |
| + // It is necessary to ungrab the keys first. |
| + for (key = keys; key->keycode; key++) |
| + XUngrabKey(display, *key->keycode, AnyModifier, root); |
| + |
| + bool handled = false; |
| + for (key = keys; key->keycode; key++) { |
| + int32 old_keycode = *key->keycode; |
| + *key->keycode = XKeysymToKeycode(display, key->keysym); |
| + if (*key->keycode) |
| + GrabKey(*key->keycode, 0); |
| + handled = (old_keycode != *key->keycode) || handled; |
| + } |
| + |
| + return handled; |
| + } |
| } |
| return false; |
| } |