summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authortdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-26 13:28:56 +0000
committertdresser@chromium.org <tdresser@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-26 13:28:56 +0000
commitca4b88e1c47918672c14412491c44633605b2ec0 (patch)
tree3c852f822f383bcbaa66f41991941328a8af59e4 /ui
parent60731365c2e022af1e50210cf88bc0e3be6a259f (diff)
downloadchromium_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.cc18
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
}
}