summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpschoedel@chromium.org <kpschoedel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-17 23:55:52 +0000
committerkpschoedel@chromium.org <kpschoedel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-17 23:55:52 +0000
commit7aadf7f44d042de6b30daa995c7be9d24ad3532d (patch)
treef49dbb95dddb19fa8cf24f12b0a13488b0be66f0
parent1b0643813c62c016922d9745f1c622a0f638912c (diff)
downloadchromium_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.cc32
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;
}