Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 7e1e827a3fe25ad305e15ba165f99315f0c1c68a..61e1a4b16fc73edb1d5ebcde5e863b8ac419a329 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -25,6 +25,8 @@ |
#include "ui/gfx/gl/gl_bindings.h" |
#endif |
+using WebKit::WebTouchEvent; |
+ |
namespace { |
#if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) |
@@ -36,6 +38,37 @@ void AcknowledgeSwapBuffers(int32 route_id, int gpu_host_id) { |
} |
#endif |
+ui::TouchStatus DecideTouchStatus(const WebKit::WebTouchEvent& event, |
+ WebKit::WebTouchPoint* point) { |
+ if (event.type == WebKit::WebInputEvent::TouchStart && |
+ event.touchesLength == 1) |
+ return ui::TOUCH_STATUS_START; |
+ |
+ if (event.type == WebKit::WebInputEvent::TouchMove && point == NULL) |
+ return ui::TOUCH_STATUS_CONTINUE; |
+ |
+ if (event.type == WebKit::WebInputEvent::TouchEnd && |
+ event.touchesLength == 0) |
+ return ui::TOUCH_STATUS_END; |
+ |
+ if (event.type == WebKit::WebInputEvent::TouchCancel) |
+ return ui::TOUCH_STATUS_CANCEL; |
+ |
+ return point ? ui::TOUCH_STATUS_CONTINUE : ui::TOUCH_STATUS_UNKNOWN; |
+} |
+ |
+void UpdateWebTouchEventAfterDispatch(WebKit::WebTouchEvent* event, |
+ WebKit::WebTouchPoint* point) { |
+ if (point->state != WebKit::WebTouchPoint::StateReleased) |
sadrul
2011/10/25 19:09:55
I kept this here, and didn't move to content:: sin
|
+ return; |
+ --event->touchesLength; |
+ for (unsigned i = point - event->touches; |
+ i < event->touchesLength; |
+ ++i) { |
+ event->touches[i] = event->touches[i + 1]; |
+ } |
+} |
+ |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
@@ -360,8 +393,17 @@ bool RenderWidgetHostViewAura::OnMouseEvent(aura::MouseEvent* event) { |
ui::TouchStatus RenderWidgetHostViewAura::OnTouchEvent( |
aura::TouchEvent* event) { |
- NOTIMPLEMENTED(); |
- return ui::TOUCH_STATUS_UNKNOWN; |
+ // Update the touch event first. |
+ WebKit::WebTouchPoint* point = content::UpdateWebTouchEvent(event, |
+ &touch_event_); |
+ |
+ // Forward the touch event only if a touch point was updated. |
+ if (point) { |
+ host_->ForwardTouchEvent(touch_event_); |
+ UpdateWebTouchEventAfterDispatch(&touch_event_, point); |
+ } |
+ |
+ return DecideTouchStatus(touch_event_, point); |
} |
bool RenderWidgetHostViewAura::ShouldActivate(aura::Event* event) { |