diff options
author | kpschoedel@chromium.org <kpschoedel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-17 23:55:52 +0000 |
---|---|---|
committer | kpschoedel@chromium.org <kpschoedel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-17 23:55:52 +0000 |
commit | 7aadf7f44d042de6b30daa995c7be9d24ad3532d (patch) | |
tree | f49dbb95dddb19fa8cf24f12b0a13488b0be66f0 | |
parent | 1b0643813c62c016922d9745f1c622a0f638912c (diff) | |
download | chromium_src-7aadf7f44d042de6b30daa995c7be9d24ad3532d.zip chromium_src-7aadf7f44d042de6b30daa995c7be9d24ad3532d.tar.gz chromium_src-7aadf7f44d042de6b30daa995c7be9d24ad3532d.tar.bz2 |
Support XI2 in PlatformKeycodeFromNative()
R=sadrul@chromium.org
Review URL: https://codereview.chromium.org/397803007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283931 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ui/events/x/events_x.cc | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc index 03b7e28..c9aecd1 100644 --- a/ui/events/x/events_x.cc +++ b/ui/events/x/events_x.cc @@ -579,8 +579,36 @@ const char* CodeFromNative(const base::NativeEvent& native_event) { } uint32 PlatformKeycodeFromNative(const base::NativeEvent& native_event) { - KeySym keysym; - XLookupString(&native_event->xkey, NULL, 0, &keysym, NULL); + XKeyEvent* xkey = NULL; + XEvent xkey_from_xi2; + switch (native_event->type) { + case KeyPress: + case KeyRelease: + xkey = &native_event->xkey; + break; + case GenericEvent: { + XIDeviceEvent* xievent = + static_cast<XIDeviceEvent*>(native_event->xcookie.data); + switch (xievent->evtype) { + case XI_KeyPress: + case XI_KeyRelease: + // Build an XKeyEvent corresponding to the XI2 event, + // so that we can call XLookupString on it. + InitXKeyEventFromXIDeviceEvent(*native_event, &xkey_from_xi2); + xkey = &xkey_from_xi2.xkey; + break; + default: + NOTREACHED(); + break; + } + } + default: + NOTREACHED(); + break; + } + KeySym keysym = XK_VoidSymbol; + if (xkey) + XLookupString(xkey, NULL, 0, &keysym, NULL); return keysym; } |