diff options
author | tdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-26 13:28:56 +0000 |
---|---|---|
committer | tdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-26 13:28:56 +0000 |
commit | ca4b88e1c47918672c14412491c44633605b2ec0 (patch) | |
tree | 3c852f822f383bcbaa66f41991941328a8af59e4 /ui | |
parent | 60731365c2e022af1e50210cf88bc0e3be6a259f (diff) | |
download | chromium_src-ca4b88e1c47918672c14412491c44633605b2ec0.zip chromium_src-ca4b88e1c47918672c14412491c44633605b2ec0.tar.gz chromium_src-ca4b88e1c47918672c14412491c44633605b2ec0.tar.bz2 |
Don't lookup touchscreen info for XIMasterPointer.
This fixes a crash caused by calling XOpenDevice on the core pointer.
BUG=343488
Review URL: https://codereview.chromium.org/177843004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@253433 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/events/x/touch_factory_x11.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/ui/events/x/touch_factory_x11.cc b/ui/events/x/touch_factory_x11.cc index 68de538..8176ce2 100644 --- a/ui/events/x/touch_factory_x11.cc +++ b/ui/events/x/touch_factory_x11.cc @@ -130,10 +130,9 @@ void TouchFactory::UpdateDeviceList(Display* display) { XIAnyClassInfo* xiclassinfo = devinfo->classes[k]; if (xiclassinfo->type == XITouchClass) { XITouchClassInfo* tci = - reinterpret_cast<XITouchClassInfo *>(xiclassinfo); + reinterpret_cast<XITouchClassInfo*>(xiclassinfo); // Only care direct touch device (such as touch screen) right now if (tci->mode == XIDirectTouch) { - CacheTouchscreenIds(display, devinfo->deviceid); touch_device_lookup_[devinfo->deviceid] = true; touch_device_list_[devinfo->deviceid] = true; touch_device_available_ = true; @@ -145,6 +144,21 @@ void TouchFactory::UpdateDeviceList(Display* display) { #endif pointer_device_lookup_[devinfo->deviceid] = true; } + +#if defined(USE_XI2_MT) + if (devinfo->use == XIFloatingSlave || devinfo->use == XISlavePointer) { + for (int k = 0; k < devinfo->num_classes; ++k) { + XIAnyClassInfo* xiclassinfo = devinfo->classes[k]; + if (xiclassinfo->type == XITouchClass) { + XITouchClassInfo* tci = + reinterpret_cast<XITouchClassInfo*>(xiclassinfo); + // Only care direct touch device (such as touch screen) right now + if (tci->mode == XIDirectTouch) + CacheTouchscreenIds(display, devinfo->deviceid); + } + } + } +#endif } } |