diff options
| author | Grace Kloba <klobag@google.com> | 2010-03-02 13:08:52 -0800 |
|---|---|---|
| committer | Grace Kloba <klobag@google.com> | 2010-03-03 10:28:55 -0800 |
| commit | f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d (patch) | |
| tree | 4beb6f76d5c95fc143547e4b30f28b3c9932448b | |
| parent | c833119c140c32feddab153b1111a76a97de6c06 (diff) | |
| download | frameworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.zip frameworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.tar.gz frameworks_base-f6bd0ba6308673a8b6bb9f71dd40a09d11c0d90d.tar.bz2 | |
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
| -rw-r--r-- | core/java/android/webkit/WebView.java | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 77b8837..0739735 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 |
