Index: content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
index 48dbad231bb553d57a13efc79263eecab3a69f64..8e77365d5d2859e5c6f0e1bcdee40bd3fc884257 100644 |
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
@@ -85,6 +85,9 @@ void MouseWheelEventQueue::ProcessMouseWheelAck( |
(scrolling_device_ == blink::WebGestureDeviceUninitialized || |
scrolling_device_ == blink::WebGestureDeviceTouchpad)) { |
GestureEventWithLatencyInfo scroll_update; |
+ scroll_update.event.timeStampSeconds = |
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
tdresser
2016/03/02 18:26:53
We should take the timestamp from the wheel event.
dtapuska
2016/03/07 18:03:59
Done.
|
+ |
scroll_update.event.x = event_sent_for_gesture_ack_->event.x; |
scroll_update.event.y = event_sent_for_gesture_ack_->event.y; |
scroll_update.event.globalX = event_sent_for_gesture_ack_->event.globalX; |
@@ -96,6 +99,9 @@ void MouseWheelEventQueue::ProcessMouseWheelAck( |
event_sent_for_gesture_ack_->event.deltaX; |
scroll_update.event.data.scrollUpdate.deltaY = |
event_sent_for_gesture_ack_->event.deltaY; |
+ scroll_update.event.data.scrollUpdate.inertial = |
+ event_sent_for_gesture_ack_->event.momentumPhase != |
+ blink::WebMouseWheelEvent::PhaseNone; |
tdresser
2016/03/02 18:26:53
What's the momentum phase for non-mac?
Maybe add a
dtapuska
2016/03/07 18:03:59
Done.
|
if (event_sent_for_gesture_ack_->event.scrollByPage) { |
scroll_update.event.data.scrollUpdate.deltaUnits = |
blink::WebGestureEvent::Page; |
@@ -114,7 +120,30 @@ void MouseWheelEventQueue::ProcessMouseWheelAck( |
? blink::WebGestureEvent::PrecisePixels |
: blink::WebGestureEvent::Pixels; |
} |
- SendGesture(scroll_update); |
+ |
+ bool send_end_now = false; |
+ bool schedule_end = true; |
+ |
+ if (event_sent_for_gesture_ack_->event.phase != |
+ blink::WebMouseWheelEvent::PhaseNone || |
+ event_sent_for_gesture_ack_->event.momentumPhase != |
+ blink::WebMouseWheelEvent::PhaseNone) { |
+ schedule_end = false; |
+ send_end_now = event_sent_for_gesture_ack_->event.phase == |
+ blink::WebMouseWheelEvent::PhaseEnded || |
+ event_sent_for_gesture_ack_->event.phase == |
+ blink::WebMouseWheelEvent::PhaseCancelled || |
+ event_sent_for_gesture_ack_->event.momentumPhase == |
+ blink::WebMouseWheelEvent::PhaseEnded || |
+ event_sent_for_gesture_ack_->event.momentumPhase == |
+ blink::WebMouseWheelEvent::PhaseCancelled; |
+ } |
+ |
+ if (scroll_update.event.data.scrollUpdate.deltaX != 0 || |
+ scroll_update.event.data.scrollUpdate.deltaY != 0) |
+ SendGesture(scroll_update, schedule_end); |
+ if (send_end_now) |
+ SendScrollEnd(scroll_update.event); |
} |
event_sent_for_gesture_ack_.reset(); |
@@ -160,6 +189,8 @@ void MouseWheelEventQueue::TryForwardNextEventToRenderer() { |
void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event) { |
GestureEventWithLatencyInfo scroll_end; |
+ scroll_end.event.timeStampSeconds = |
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); |
tdresser
2016/03/02 18:26:53
I suppose this timestamp needs to be made up, unfo
dtapuska
2016/03/07 18:03:59
Acknowledged.
|
scroll_end.event.type = WebInputEvent::GestureScrollEnd; |
scroll_end.event.sourceDevice = blink::WebGestureDeviceTouchpad; |
scroll_end.event.resendingPluginId = -1; |
@@ -170,20 +201,24 @@ void MouseWheelEventQueue::SendScrollEnd(blink::WebGestureEvent update_event) { |
scroll_end.event.globalX = update_event.globalX; |
scroll_end.event.globalY = update_event.globalY; |
- SendGesture(scroll_end); |
+ SendGesture(scroll_end, false); |
} |
void MouseWheelEventQueue::SendGesture( |
- const GestureEventWithLatencyInfo& gesture) { |
+ const GestureEventWithLatencyInfo& gesture, |
+ bool generate_end) { |
switch (gesture.event.type) { |
case WebInputEvent::GestureScrollUpdate: |
if (needs_scroll_begin_) { |
GestureEventWithLatencyInfo scroll_begin(gesture); |
+ scroll_begin.event.timeStampSeconds = gesture.event.timeStampSeconds; |
scroll_begin.event.x = gesture.event.x; |
scroll_begin.event.y = gesture.event.y; |
scroll_begin.event.globalX = gesture.event.globalX; |
scroll_begin.event.globalY = gesture.event.globalY; |
scroll_begin.event.type = WebInputEvent::GestureScrollBegin; |
+ scroll_begin.event.data.scrollBegin.inertial = |
+ gesture.event.data.scrollUpdate.inertial; |
tdresser
2016/03/02 18:26:53
It isn't clear to me when we'd need a scroll begin
dtapuska
2016/03/07 18:03:59
So the way phasing is done on OSX is that the phas
|
scroll_begin.event.data.scrollBegin.deltaXHint = |
gesture.event.data.scrollUpdate.deltaX; |
scroll_begin.event.data.scrollBegin.deltaYHint = |
@@ -192,11 +227,12 @@ void MouseWheelEventQueue::SendGesture( |
scroll_begin.event.data.scrollBegin.deltaHintUnits = |
gesture.event.data.scrollUpdate.deltaUnits; |
- SendGesture(scroll_begin); |
+ SendGesture(scroll_begin, false); |
} |
- if (scroll_end_timer_.IsRunning()) { |
+ if (scroll_end_timer_.IsRunning()) |
scroll_end_timer_.Reset(); |
- } else { |
+ |
+ if (generate_end) { |
scroll_end_timer_.Start( |
FROM_HERE, |
base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), |