diff options
| author | Grace Kloba <klobag@google.com> | 2010-02-23 15:25:31 -0800 |
|---|---|---|
| committer | Grace Kloba <klobag@google.com> | 2010-02-24 18:24:48 -0800 |
| commit | a406fb90805adf36fe0fabd3a79018e33706453c (patch) | |
| tree | 1322e4e78a58c8b239d287934d18880c64e64a60 /core/java/android/webkit/WebView.java | |
| parent | 4ed2b1c34b2dd0e2bd2f403a6f3de0bdbf473b98 (diff) | |
DO NOT MERGE
If mPreventDrag is cancelled due to time out, remove
the pending TOUCH_EVENTS and then send an ACTION_CANCEL
and skip the rest of touch events.
This should address the drag problem Flash plugin has.
Fix http://b/issue?id=245053
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 4f5207889fde..9af2d51c434a 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -372,6 +372,7 @@ public class WebView extends AbsoluteLayout private static final int PREVENT_DRAG_NO = 0; private static final int PREVENT_DRAG_MAYBE_YES = 1; private static final int PREVENT_DRAG_YES = 2; + private static final int PREVENT_DRAG_CANCEL = 3; private int mPreventDrag = PREVENT_DRAG_NO; // by default mPreventLongPress is false. If it is true, long press event @@ -4138,8 +4139,11 @@ public class WebView extends AbsoluteLayout } // pass the touch events from UI thread to WebCore thread - if (mForwardTouchEvents && (action != MotionEvent.ACTION_MOVE - || eventTime - mLastSentTouchTime > TOUCH_SENT_INTERVAL)) { + if (mForwardTouchEvents + && (action != MotionEvent.ACTION_MOVE || eventTime + - mLastSentTouchTime > TOUCH_SENT_INTERVAL) + && (action == MotionEvent.ACTION_DOWN + || mPreventDrag != PREVENT_DRAG_CANCEL)) { WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); ted.mAction = action; ted.mX = viewToContentX((int) x + mScrollX); @@ -5407,12 +5411,17 @@ public class WebView extends AbsoluteLayout break; } case SWITCH_TO_SHORTPRESS: { - // if mPreventDrag is not confirmed, treat it as no so that - // it won't block panning the page. + // if mPreventDrag is not confirmed, cancel it so that it + // won't block panning the page. if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) { - mPreventDrag = PREVENT_DRAG_NO; + mPreventDrag = PREVENT_DRAG_CANCEL; mPreventLongPress = false; mPreventDoubleTap = false; + // remove the pending TOUCH_EVENT and send a cancel + mWebViewCore.removeMessages(EventHub.TOUCH_EVENT); + WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); + ted.mAction = MotionEvent.ACTION_CANCEL; + mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); } if (mTouchMode == TOUCH_INIT_MODE) { mTouchMode = mFullScreenHolder == null @@ -5434,7 +5443,7 @@ public class WebView extends AbsoluteLayout ted.mY = viewToContentY((int) mLastTouchY + mScrollY); ted.mEventTime = SystemClock.uptimeMillis(); mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); - } else if (mPreventDrag == PREVENT_DRAG_NO) { + } else if (mPreventDrag != PREVENT_DRAG_YES) { mTouchMode = TOUCH_DONE_MODE; if (mFullScreenHolder == null) { performLongClick(); @@ -5445,13 +5454,18 @@ public class WebView extends AbsoluteLayout } case RELEASE_SINGLE_TAP: { if (mPreventDrag == PREVENT_DRAG_MAYBE_YES) { - // if mPreventDrag is not confirmed, treat it as - // no so that it won't block tap. - mPreventDrag = PREVENT_DRAG_NO; + // if mPreventDrag is not confirmed, cancel it so that + // it won't block panning the page. + mPreventDrag = PREVENT_DRAG_CANCEL; mPreventLongPress = false; mPreventDoubleTap = false; + // remove the pending TOUCH_EVENT and send a cancel + mWebViewCore.removeMessages(EventHub.TOUCH_EVENT); + WebViewCore.TouchEventData ted = new WebViewCore.TouchEventData(); + ted.mAction = MotionEvent.ACTION_CANCEL; + mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); } - if (mPreventDrag == PREVENT_DRAG_NO) { + if (mPreventDrag != PREVENT_DRAG_YES) { mTouchMode = TOUCH_DONE_MODE; doShortPress(); } |
