From f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Tue, 2 Mar 2010 13:08:52 -0800 Subject: Don't send ACTION_MOVE to webkit until the distance is confirmed to be a drag. Always send touch events to webkit if a subview, plugin, is in full screen mode. Fix http://b/issue?id=2478701 --- core/java/android/webkit/WebView.java | 41 ++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 77b88370a4ee..0739735a5973 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -4494,12 +4494,12 @@ public class WebView extends AbsoluteLayout y = getViewHeightWithTitle() - 1; } - // pass the touch events from UI thread to WebCore thread - if (mForwardTouchEvents - && (action != MotionEvent.ACTION_MOVE || eventTime - - mLastSentTouchTime > mCurrentTouchInterval) - && (action == MotionEvent.ACTION_DOWN - || mPreventDrag != PREVENT_DRAG_CANCEL)) { + // pass the touch events, except ACTION_MOVE which will be handled + // later, from UI thread to WebCore thread + if (mFullScreenHolder != null || (mForwardTouchEvents + && action != MotionEvent.ACTION_MOVE + && (action == MotionEvent.ACTION_DOWN || mPreventDrag + != PREVENT_DRAG_CANCEL))) { WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); ted.mAction = action; ted.mX = viewToContentX((int) x + mScrollX); @@ -4590,6 +4590,21 @@ public class WebView extends AbsoluteLayout if ((deltaX * deltaX + deltaY * deltaY) < mTouchSlopSquare) { break; } + + // pass the first ACTION_MOVE from UI thread to WebCore + // thread after the distance is confirmed that it is a drag + if (mFullScreenHolder == null && mForwardTouchEvents + && mPreventDrag != PREVENT_DRAG_CANCEL) { + WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); + ted.mAction = action; + ted.mX = viewToContentX((int) x + mScrollX); + ted.mY = viewToContentY((int) y + mScrollY); + ted.mEventTime = eventTime; + ted.mMetaState = ev.getMetaState(); + mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); + mLastSentTouchTime = eventTime; + } + if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) { // track mLastTouchTime as we may need to do fling at // ACTION_UP @@ -4646,6 +4661,20 @@ public class WebView extends AbsoluteLayout Toast.LENGTH_LONG).show(); } } + } else { + // pass the touch events from UI thread to WebCore thread + if (mFullScreenHolder == null && mForwardTouchEvents + && eventTime - mLastSentTouchTime > mCurrentTouchInterval + && mPreventDrag != PREVENT_DRAG_CANCEL) { + WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); + ted.mAction = action; + ted.mX = viewToContentX((int) x + mScrollX); + ted.mY = viewToContentY((int) y + mScrollY); + ted.mEventTime = eventTime; + ted.mMetaState = ev.getMetaState(); + mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); + mLastSentTouchTime = eventTime; + } } // do pan -- cgit v1.2.3-59-g8ed1b