Chromium Code Reviews| Index: ui/events/x/events_x.cc |
| diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc |
| index 9bf87c0e24c4e4b2a25aeedddf4d00b1340f4d0e..4b6c9dd488062a1c9e9c1ce2b4993296f03e3772 100644 |
| --- a/ui/events/x/events_x.cc |
| +++ b/ui/events/x/events_x.cc |
| @@ -438,6 +438,9 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) { |
| return devices->IsTouchpadXInputEvent(native_event) ? ET_SCROLL |
| : ET_MOUSEWHEEL; |
| } |
| + if (devices->GetScrollClassEventDetail(native_event) != |
| + SCROLL_TYPE_NO_SCROLL) |
| + return ET_MOUSEWHEEL; |
|
sadrul
2015/08/18 16:57:46
Should IsScrollEvent() return true in this case, s
Will Shackleton
2015/08/26 19:52:48
IsScrollEvent() detects XInput 1 scroll events - t
sadrul
2015/08/26 19:55:57
Is there a reason to have separate API for this? I
|
| if (devices->IsCMTMetricsEvent(native_event)) |
| return ET_UMA_DATA; |
| if (GetButtonMaskForX2Event(xievent)) |
| @@ -711,15 +714,22 @@ gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) { |
| int button = native_event->type == GenericEvent ? |
| EventButtonFromNative(native_event) : native_event->xbutton.button; |
| + int scroll_class_type = |
| + DeviceDataManagerX11::GetInstance() |
| + ->GetScrollClassDeviceDetail(native_event); |
|
sadrul
2015/08/18 16:57:46
Indenting here is off (you can use 'git cl format'
|
| + bool vertical_scroll_class = scroll_class_type & SCROLL_TYPE_VERTICAL; |
| + bool horizontal_scroll_class = scroll_class_type & SCROLL_TYPE_HORIZONTAL; |
| + |
| switch (button) { |
| case 4: |
| - return gfx::Vector2d(0, kWheelScrollAmount); |
| + return gfx::Vector2d(0, vertical_scroll_class ? 0 : kWheelScrollAmount); |
| case 5: |
| - return gfx::Vector2d(0, -kWheelScrollAmount); |
| + return gfx::Vector2d(0, vertical_scroll_class ? 0 : -kWheelScrollAmount); |
| case 6: |
| - return gfx::Vector2d(kWheelScrollAmount, 0); |
| + return gfx::Vector2d(horizontal_scroll_class ? 0 : kWheelScrollAmount, 0); |
| case 7: |
| - return gfx::Vector2d(-kWheelScrollAmount, 0); |
| + return gfx::Vector2d(horizontal_scroll_class ? 0 : -kWheelScrollAmount, |
| + 0); |
| default: |
| return gfx::Vector2d(); |
| } |
| @@ -803,30 +813,41 @@ bool GetScrollOffsets(const base::NativeEvent& native_event, |
| float* x_offset_ordinal, |
| float* y_offset_ordinal, |
| int* finger_count) { |
| - if (!DeviceDataManagerX11::GetInstance()->IsScrollEvent(native_event)) |
| - return false; |
| + if (DeviceDataManagerX11::GetInstance()->IsScrollEvent(native_event)) { |
| + // Temp values to prevent passing NULLs to DeviceDataManager. |
| + float x_offset_, y_offset_; |
| + float x_offset_ordinal_, y_offset_ordinal_; |
| + int finger_count_; |
| + if (!x_offset) |
| + x_offset = &x_offset_; |
| + if (!y_offset) |
| + y_offset = &y_offset_; |
| + if (!x_offset_ordinal) |
| + x_offset_ordinal = &x_offset_ordinal_; |
| + if (!y_offset_ordinal) |
| + y_offset_ordinal = &y_offset_ordinal_; |
| + if (!finger_count) |
| + finger_count = &finger_count_; |
| + |
| + DeviceDataManagerX11::GetInstance()->GetScrollOffsets( |
| + native_event, |
| + x_offset, y_offset, |
| + x_offset_ordinal, y_offset_ordinal, |
| + finger_count); |
| + return true; |
| + } |
| - // Temp values to prevent passing NULLs to DeviceDataManager. |
| - float x_offset_, y_offset_; |
| - float x_offset_ordinal_, y_offset_ordinal_; |
| - int finger_count_; |
| - if (!x_offset) |
| - x_offset = &x_offset_; |
| - if (!y_offset) |
| - y_offset = &y_offset_; |
| - if (!x_offset_ordinal) |
| - x_offset_ordinal = &x_offset_ordinal_; |
| - if (!y_offset_ordinal) |
| - y_offset_ordinal = &y_offset_ordinal_; |
| - if (!finger_count) |
| - finger_count = &finger_count_; |
| - |
| - DeviceDataManagerX11::GetInstance()->GetScrollOffsets( |
| - native_event, |
| - x_offset, y_offset, |
| - x_offset_ordinal, y_offset_ordinal, |
| - finger_count); |
| - return true; |
| + if (DeviceDataManagerX11::GetInstance()-> |
| + GetScrollClassEventDetail(native_event) != SCROLL_TYPE_NO_SCROLL) { |
| + double x_scroll_offset, y_scroll_offset; |
| + DeviceDataManagerX11::GetInstance()->GetScrollClassOffsets( |
| + native_event, |
| + &x_scroll_offset, &y_scroll_offset); |
| + *x_offset = x_scroll_offset * kWheelScrollAmount; |
| + *y_offset = y_scroll_offset * kWheelScrollAmount; |
| + return true; |
| + } |
| + return false; |
| } |
| bool GetFlingData(const base::NativeEvent& native_event, |