summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/widgets/Escalator.java20
-rw-r--r--uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java6
2 files changed, 18 insertions, 8 deletions
diff --git a/client/src/main/java/com/vaadin/client/widgets/Escalator.java b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
index 3d2c80ddbe..e3e0dfa0e4 100644
--- a/client/src/main/java/com/vaadin/client/widgets/Escalator.java
+++ b/client/src/main/java/com/vaadin/client/widgets/Escalator.java
@@ -6616,15 +6616,19 @@ public class Escalator extends Widget
} else if (type.equalsIgnoreCase("cell")) {
// If wanted row is not visible, we need to scroll there.
Range visibleRowRange = getVisibleRowRange();
- if (indices.length > 0 && !visibleRowRange.contains(indices[0])) {
- try {
- scrollToRow(indices[0], ScrollDestination.ANY, 0);
- } catch (IllegalArgumentException e) {
- getLogger().log(Level.SEVERE, e.getMessage());
+ if (indices.length > 0) {
+ // Contains a row number, ensure it is available and visible
+ boolean rowInCache = visibleRowRange.contains(indices[0]);
+
+ // Scrolling might be a no-op if row is already in the viewport
+ scrollToRow(indices[0], ScrollDestination.ANY, 0);
+
+ if (!rowInCache) {
+ // Row was not in cache, scrolling caused lazy loading and
+ // the caller needs to wait and call this method again to be
+ // able to get the requested element
+ return null;
}
- // Scrolling causes a lazy loading event. No element can
- // currently be retrieved.
- return null;
}
container = getBody();
} else if (type.equalsIgnoreCase("footer")) {
diff --git a/uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java b/uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java
index 1c6ae8b44e..49b44a01a7 100644
--- a/uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java
+++ b/uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java
@@ -68,4 +68,10 @@ public class GridScrollTest extends GridBasicFeaturesTest {
active);
}
+ @Test
+ public void scrollIntoViewThroughSubPart() {
+ openTestURL("theme=valo");
+ GridElement grid = $(GridElement.class).first();
+ assertEquals("(10, 0)", grid.getCell(10, 0).getText());
+ }
}