OSDN Git Service

Before we send VIEW_SIZE_CHANGED after first layout,
authorGrace Kloba <klobag@google.com>
Mon, 28 Sep 2009 00:46:31 +0000 (17:46 -0700)
committerGrace Kloba <klobag@google.com>
Mon, 28 Sep 2009 17:10:15 +0000 (10:10 -0700)
we should remove VIEW_SIZE_CHANGED in the queue if
there is any as we are going to send the message in
the front of the queue.

Fix http://b/issue?id=2133222

core/java/android/webkit/WebViewCore.java

index 53024d6..8b6746e 100644 (file)
@@ -1980,6 +1980,13 @@ final class WebViewCore {
             data.mTextWrapWidth = data.mWidth;
             data.mScale = -1.0f;
             data.mIgnoreHeight = false;
+            // send VIEW_SIZE_CHANGED to the front of the queue so that we can
+            // avoid pushing the wrong picture to the WebView side. If there is
+            // a VIEW_SIZE_CHANGED in the queue, probably from WebView side,
+            // ignore it as we have a new size. If we leave VIEW_SIZE_CHANGED
+            // in the queue, as mLastHeightSent has been updated here, we may
+            // miss the requestLayout in WebView side after the new picture.
+            mEventHub.removeMessages(EventHub.VIEW_SIZE_CHANGED);
             mEventHub.sendMessageAtFrontOfQueue(Message.obtain(null,
                     EventHub.VIEW_SIZE_CHANGED, data));
         } else if (mSettings.getUseWideViewPort()) {
@@ -2001,6 +2008,9 @@ final class WebViewCore {
                 data.mTextWrapWidth = Math.round(webViewWidth
                         / mRestoreState.mTextWrapScale);
                 data.mIgnoreHeight = false;
+                // send VIEW_SIZE_CHANGED to the front of the queue so that we
+                // can avoid pushing the wrong picture to the WebView side.
+                mEventHub.removeMessages(EventHub.VIEW_SIZE_CHANGED);
                 mEventHub.sendMessageAtFrontOfQueue(Message.obtain(null,
                         EventHub.VIEW_SIZE_CHANGED, data));
             }