]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixes #2005 (server-side scrolling of table broken)
authorMarc Englund <marc.englund@itmill.com>
Mon, 25 Aug 2008 09:21:00 +0000 (09:21 +0000)
committerMarc Englund <marc.englund@itmill.com>
Mon, 25 Aug 2008 09:21:00 +0000 (09:21 +0000)
svn changeset:5254/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IScrollTable.java

index 602719ac282409b4043d4132448bd6051f5abbae..42e49737a8d06f81c60c233db0f10303a9bc506b 100644 (file)
@@ -74,6 +74,7 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
     public static final char ALIGN_RIGHT = 'e';
     private int firstRowInViewPort = 0;
     private int pageLength = 15;
+    private int lastRequestedFirstvisible = 0; // to detect "serverside scroll"
 
     private boolean showRowHeaders = false;
 
@@ -169,6 +170,12 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
         }
         firstvisible = uidl.hasVariable("firstvisible") ? uidl
                 .getIntVariable("firstvisible") : 0;
+        if (firstvisible != lastRequestedFirstvisible) {
+            // received 'surprising' firstvisible from server: scroll there
+            firstRowInViewPort = firstvisible;
+            bodyContainer
+                    .setScrollPosition(firstvisible * tBody.getRowHeight());
+        }
 
         showRowHeaders = uidl.getBooleanAttribute("rowheaders");
         showColHeaders = uidl.getBooleanAttribute("colheaders");
@@ -699,6 +706,9 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
         final int firstRendered = tBody.getFirstRendered();
 
         if (postLimit <= lastRendered && preLimit >= firstRendered) {
+            // remember which firstvisible we requested, in case the server has
+            // a differing opinion
+            lastRequestedFirstvisible = firstRowInViewPort;
             client.updateVariable(paintableId, "firstvisible",
                     firstRowInViewPort, false);
             return; // scrolled withing "non-react area"
@@ -852,7 +862,9 @@ public class IScrollTable extends Composite implements Table, ScrollListener,
 
             client.updateVariable(paintableId, "lastToBeRendered",
                     lastToBeRendered, false);
-
+            // remember which firstvisible we requested, in case the server has
+            // a differing opinion
+            lastRequestedFirstvisible = firstRowInViewPort;
             client.updateVariable(paintableId, "firstvisible",
                     firstRowInViewPort, false);
             client.updateVariable(paintableId, "reqfirstrow", reqFirstRow,