Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4714)

Unified Diff: chrome/browser/chromeos/system_key_event_listener.cc

Issue 7019007: Update the X11 keycodes when keys are remapped. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698