diff options
author | Adam Powell <adamp@google.com> | 2011-03-25 13:58:19 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2011-03-25 13:58:19 -0700 |
commit | baa3380d74928baf6a5685c54c719af37171a625 (patch) | |
tree | f3332c7290297ce3c49f94e5bf0a652d41868fb2 | |
parent | 837430dd3440f6e71f68ef755399e22386dee084 (diff) | |
download | frameworks_base-baa3380d74928baf6a5685c54c719af37171a625.zip frameworks_base-baa3380d74928baf6a5685c54c719af37171a625.tar.gz frameworks_base-baa3380d74928baf6a5685c54c719af37171a625.tar.bz2 |
Fix bug 4170809 - Pages with flash lose touch events
Fix WebView touch cancel behavior when we time out waiting for a
response from webkit.
Change-Id: I0aeeea64b156e204dbe2dda913a42df28704ed16
-rw-r--r-- | core/java/android/webkit/WebView.java | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 96623b0..a3ced9e 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -6056,7 +6056,6 @@ public class WebView extends AbsoluteLayout if (shouldForwardTouchEvent()) { if (removeEvents) { mWebViewCore.removeMessages(EventHub.TOUCH_EVENT); - mTouchEventQueue.ignoreCurrentlyMissingEvents(); } TouchEventData ted = new TouchEventData(); ted.mIds = new int[1]; @@ -6073,6 +6072,12 @@ public class WebView extends AbsoluteLayout ted.mSequence = mTouchEventQueue.nextTouchSequence(); mWebViewCore.sendMessage(EventHub.TOUCH_EVENT, ted); mPreventDefault = PREVENT_DEFAULT_IGNORE; + + if (removeEvents) { + // Mark this after sending the message above; we should + // be willing to ignore the cancel event that we just sent. + mTouchEventQueue.ignoreCurrentlyMissingEvents(); + } } } @@ -7266,17 +7271,18 @@ public class WebView extends AbsoluteLayout * been queued will also be processed in their proper order. * * @param ted Touch data to be processed in order. + * @return true if the event was processed before returning, false if it was just enqueued. */ - public void enqueueTouchEvent(TouchEventData ted) { + public boolean enqueueTouchEvent(TouchEventData ted) { if (ted.mSequence < mLastHandledTouchSequence) { // Stale event and we already moved on; drop it. (Should not be common.) Log.w(LOGTAG, "Stale touch event " + MotionEvent.actionToString(ted.mAction) + " received from webcore; ignoring"); - return; + return false; } if (dropStaleGestures(ted.mMotionEvent, ted.mSequence)) { - return; + return false; } if (mLastHandledTouchSequence + 1 == ted.mSequence) { @@ -7298,6 +7304,7 @@ public class WebView extends AbsoluteLayout QueuedTouch qd = obtainQueuedTouch().set(ted); mTouchEventQueue = mTouchEventQueue == null ? qd : mTouchEventQueue.add(qd); } + return true; } /** @@ -7851,11 +7858,11 @@ public class WebView extends AbsoluteLayout } TouchEventData ted = (TouchEventData) msg.obj; - // WebCore is responding to us; remove pending timeout. - // It will be re-posted when needed. - removeMessages(PREVENT_DEFAULT_TIMEOUT); - - mTouchEventQueue.enqueueTouchEvent(ted); + if (mTouchEventQueue.enqueueTouchEvent(ted)) { + // WebCore is responding to us; remove pending timeout. + // It will be re-posted when needed. + removeMessages(PREVENT_DEFAULT_TIMEOUT); + } break; case REQUEST_KEYBOARD: |