| Index: ui/events/platform/x11/x11_event_source.cc
|
| diff --git a/ui/events/platform/x11/x11_event_source.cc b/ui/events/platform/x11/x11_event_source.cc
|
| index 337273f189ed4abb2d15bf270e5031434208116f..ea5638d34ec9fc54873db958277a390feb370098 100644
|
| --- a/ui/events/platform/x11/x11_event_source.cc
|
| +++ b/ui/events/platform/x11/x11_event_source.cc
|
| @@ -206,9 +206,24 @@ void X11EventSource::ExtractCookieDataDispatchEvent(XEvent* xevent) {
|
| }
|
|
|
| void X11EventSource::PostDispatchEvent(XEvent* xevent) {
|
| - if (xevent->type == GenericEvent &&
|
| - (xevent->xgeneric.evtype == XI_HierarchyChanged ||
|
| - xevent->xgeneric.evtype == XI_DeviceChanged)) {
|
| + bool should_update_device_list = false;
|
| +
|
| + if (xevent->type == GenericEvent) {
|
| + if (xevent->xgeneric.evtype == XI_HierarchyChanged) {
|
| + should_update_device_list = true;
|
| + } else if (xevent->xgeneric.evtype == XI_DeviceChanged) {
|
| + XIDeviceChangedEvent* xev =
|
| + static_cast<XIDeviceChangedEvent*>(xevent->xcookie.data);
|
| + if (xev->reason == XIDeviceChange) {
|
| + should_update_device_list = true;
|
| + } else if (xev->reason == XISlaveSwitch) {
|
| + ui::DeviceDataManagerX11::GetInstance()->InvalidateScrollClasses(
|
| + xev->sourceid);
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (should_update_device_list) {
|
| UpdateDeviceList();
|
| hotplug_event_handler_->OnHotplugEvent();
|
| }
|
| @@ -217,7 +232,8 @@ void X11EventSource::PostDispatchEvent(XEvent* xevent) {
|
| xevent->xcrossing.detail != NotifyInferior &&
|
| xevent->xcrossing.mode != NotifyUngrab) {
|
| // Clear stored scroll data
|
| - ui::DeviceDataManagerX11::GetInstance()->InvalidateScrollClasses();
|
| + ui::DeviceDataManagerX11::GetInstance()->InvalidateScrollClasses(
|
| + DeviceDataManagerX11::kAllDevices);
|
| }
|
| }
|
|
|
|
|