Chromium Code Reviews| Index: ui/events/devices/x11/touch_factory_x11.cc |
| diff --git a/ui/events/devices/x11/touch_factory_x11.cc b/ui/events/devices/x11/touch_factory_x11.cc |
| index 3b91724f4f6a6e8ab31489fe58d92aec9648d434..e712342b6fe531aa0ce38a9fa00de98d5bb0a2c8 100644 |
| --- a/ui/events/devices/x11/touch_factory_x11.cc |
| +++ b/ui/events/devices/x11/touch_factory_x11.cc |
| @@ -98,44 +98,41 @@ void TouchFactory::UpdateDeviceList(XDisplay* display) { |
| DeviceListCacheX11::GetInstance()->GetXI2DeviceList(display); |
| for (int i = 0; i < xi_dev_list.count; i++) { |
| const XIDeviceInfo& devinfo = xi_dev_list[i]; |
| - if (devinfo.use == XIFloatingSlave || devinfo.use == XIMasterPointer) { |
| + if (devinfo.use == XIFloatingSlave || devinfo.use == XIMasterPointer || |
| + devinfo.use == XISlavePointer) { |
| for (int k = 0; k < devinfo.num_classes; ++k) { |
| XIAnyClassInfo* xiclassinfo = devinfo.classes[k]; |
| if (xiclassinfo->type == XITouchClass) { |
|
sadrul
2017/03/10 20:28:57
Perhaps we could change this to early-continue too
|
| XITouchClassInfo* tci = |
| reinterpret_cast<XITouchClassInfo*>(xiclassinfo); |
| // Only care direct touch device (such as touch screen) right now |
| - if (tci->mode == XIDirectTouch) { |
| + if (tci->mode != XIDirectTouch) |
| + continue; |
| + |
| + int master_id = devinfo.use == XISlavePointer ? devinfo.attachment |
| + : devinfo.deviceid; |
| + |
| + if (!IsValidDevice(master_id) |
| + continue; |
| + |
| + touch_device_lookup_[master_id] = true; |
| + touch_device_list_[master_id] = true; |
| + |
| + if (devinfo.use != XIMasterPointer) |
| + CacheTouchscreenIds(devinfo.deviceid); |
| + |
| + if (devinfo.use == XISlavePointer) { |
| + device_master_id_list_[devinfo.deviceid] = master_id; |
| touch_device_lookup_[devinfo.deviceid] = true; |
| - touch_device_list_[devinfo.deviceid] = true; |
| + touch_device_list_[devinfo.deviceid] = false; |
| } |
| } |
| } |
| - pointer_device_lookup_[devinfo.deviceid] = true; |
| + pointer_device_lookup_[devinfo.deviceid] = |
| + (devinfo.use != XISlavePointer); |
| } else if (devinfo.use == XIMasterKeyboard) { |
| virtual_core_keyboard_device_ = devinfo.deviceid; |
| } |
| - |
| - 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(devinfo.deviceid); |
| - if (devinfo.use == XISlavePointer) { |
| - device_master_id_list_[devinfo.deviceid] = devinfo.attachment; |
| - // If the slave device is direct touch device, we also set its |
| - // master device to be touch device. |
| - touch_device_lookup_[devinfo.attachment] = true; |
| - touch_device_list_[devinfo.attachment] = true; |
| - } |
| - } |
| - } |
| - } |
| - } |
| } |
| } |