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..ac1d7b984dbfec699b46e9cc6aca02112e230079 100644 |
| --- a/ui/events/devices/x11/touch_factory_x11.cc |
| +++ b/ui/events/devices/x11/touch_factory_x11.cc |
| @@ -98,7 +98,8 @@ 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) { |
| @@ -108,24 +109,8 @@ void TouchFactory::UpdateDeviceList(XDisplay* display) { |
| if (tci->mode == XIDirectTouch) { |
| touch_device_lookup_[devinfo.deviceid] = true; |
| touch_device_list_[devinfo.deviceid] = true; |
| - } |
| - } |
| - } |
| - pointer_device_lookup_[devinfo.deviceid] = true; |
| - } 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) { |
| + if (devinfo.use == XISlavePointer && |
| + IsValidDevice(devinfo.attachment)) { |
| 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. |
| @@ -135,6 +120,9 @@ void TouchFactory::UpdateDeviceList(XDisplay* display) { |
| } |
| } |
| } |
| + pointer_device_lookup_[devinfo.deviceid] = true; |
|
chaopeng
2016/12/12 16:35:43
It looks like we should also set pointer_device_lo
sadrul
2016/12/12 18:56:11
Hm. Are we going to process each events twice afte
|
| + } else if (devinfo.use == XIMasterKeyboard) { |
| + virtual_core_keyboard_device_ = devinfo.deviceid; |
| } |
| } |
| } |