Reviewers: pdr,

Description:
Fixing a bug in ResizeLayoutPanel where moving the scroll bars triggers
a scroll event on older versions of Safari, which causes an infinite
loop.


Please review this at http://gwt-code-reviews.appspot.com/1314801/show

Affected files:
  M user/src/com/google/gwt/user/client/ui/ResizeLayoutPanel.java


Index: user/src/com/google/gwt/user/client/ui/ResizeLayoutPanel.java
===================================================================
--- user/src/com/google/gwt/user/client/ui/ResizeLayoutPanel.java (revision 9583) +++ user/src/com/google/gwt/user/client/ui/ResizeLayoutPanel.java (working copy)
@@ -117,6 +117,7 @@
     private Element expandableInner;
     private int lastOffsetHeight = -1;
     private int lastOffsetWidth = -1;
+    private boolean resettingScrollables;

     @Override
     public void init(Element elem, Delegate delegate) {
@@ -189,7 +190,7 @@
     }

     public void onBrowserEvent(Event event) {
-      if (Event.ONSCROLL == event.getTypeInt()) {
+      if (!resettingScrollables && Event.ONSCROLL == event.getTypeInt()) {
         EventTarget eventTarget = event.getEventTarget();
         if (!Element.is(eventTarget)) {
           return;
@@ -224,6 +225,15 @@
      */
     private boolean resetScrollables() {
       /*
+ * Older versions of safari trigger a synchronous scroll event when we + * update scrollTop/scrollLeft, so we set a boolean to ignore that event.
+       */
+      if (resettingScrollables) {
+        return false;
+      }
+      resettingScrollables = true;
+
+      /*
* Reset expandable element. Scrollbars are not rendered if the div is too * small, so we need to set the dimensions of the inner div to a value
        * greater than the offsetWidth/Height.
@@ -244,8 +254,10 @@
if (lastOffsetHeight != offsetHeight || lastOffsetWidth != offsetWidth) {
         lastOffsetHeight = offsetHeight;
         lastOffsetWidth = offsetWidth;
+        resettingScrollables = false;
         return true;
       }
+      resettingScrollables = false;
       return false;
     }
   }


--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to