Chromium Code Reviews| Index: ui/events/x/events_x_utils.cc |
| diff --git a/ui/events/x/events_x_utils.cc b/ui/events/x/events_x_utils.cc |
| index 452c096a06a1e4baa0fc296cc2cbf8062703f913..64b652c7cfc469c6fa4baea3eed622d7a8b70c58 100644 |
| --- a/ui/events/x/events_x_utils.cc |
| +++ b/ui/events/x/events_x_utils.cc |
| @@ -626,15 +626,22 @@ gfx::Vector2d GetMouseWheelOffsetFromXEvent(const XEvent& xev) { |
| int button = xev.type == GenericEvent ? EventButtonFromXEvent(xev) |
| : xev.xbutton.button; |
| + // If this is an xinput1 scroll event from an xinput2 mouse then we need to |
| + // block the legacy scroll events for the necessary axes. |
|
sadrul
2016/04/19 14:28:24
For mouse-press/releases on a normal mouse device,
|
| + int scroll_class_type = |
| + DeviceDataManagerX11::GetInstance()->GetScrollClassDeviceDetail(xev); |
| + bool xi2_vertical = scroll_class_type & SCROLL_TYPE_VERTICAL; |
| + bool xi2_horizontal = scroll_class_type & SCROLL_TYPE_HORIZONTAL; |
| + |
| switch (button) { |
| case 4: |
| - return gfx::Vector2d(0, kWheelScrollAmount); |
| + return gfx::Vector2d(0, xi2_vertical ? 0 : kWheelScrollAmount); |
| case 5: |
| - return gfx::Vector2d(0, -kWheelScrollAmount); |
| + return gfx::Vector2d(0, xi2_vertical ? 0 : -kWheelScrollAmount); |
| case 6: |
| - return gfx::Vector2d(kWheelScrollAmount, 0); |
| + return gfx::Vector2d(xi2_horizontal ? 0 : kWheelScrollAmount, 0); |
| case 7: |
| - return gfx::Vector2d(-kWheelScrollAmount, 0); |
| + return gfx::Vector2d(xi2_horizontal ? 0 : -kWheelScrollAmount, 0); |
| default: |
| return gfx::Vector2d(); |
| } |
| @@ -731,7 +738,7 @@ bool GetScrollOffsetsFromXEvent(const XEvent& xev, |
| return true; |
| } |
| - if (DeviceDataManagerX11::GetInstance()->GetScrollClassDeviceDetail(xev) != |
| + if (DeviceDataManagerX11::GetInstance()->GetScrollClassEventDetail(xev) != |
| SCROLL_TYPE_NO_SCROLL) { |
| double x_scroll_offset, y_scroll_offset; |
| DeviceDataManagerX11::GetInstance()->GetScrollClassOffsets( |