summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2016-10-19 22:50:22 +0300
committerPekka Hyvönen <pekka@vaadin.com>2016-12-09 09:39:00 +0200
commit97a75f1abcbd1c9001a7ff5b75713e3a913748cb (patch)
tree2b235993e96a42f63c2bfa989d8cc3a2d05776cc
parenta30c614552d22f1b5817e0c2757fa05ab0df8736 (diff)
downloadvaadin-framework-97a75f1abcbd1c9001a7ff5b75713e3a913748cb.tar.gz
vaadin-framework-97a75f1abcbd1c9001a7ff5b75713e3a913748cb.zip
Make Grid isWorkPending wait for scroll events to complete (#20417)
Change-Id: I3cfdac539111ff2e88c7ff81e6d6b9a579160423
-rw-r--r--client/src/main/java/com/vaadin/client/widget/escalator/ScrollbarBundle.java13
-rw-r--r--uitest/src/test/java/com/vaadin/v7/tests/components/grid/basicfeatures/server/GridScrollTest.java14
2 files changed, 26 insertions, 1 deletions
diff --git a/client/src/main/java/com/vaadin/client/widget/escalator/ScrollbarBundle.java b/client/src/main/java/com/vaadin/client/widget/escalator/ScrollbarBundle.java
index c62c5f032f..2b615ebdb7 100644
--- a/client/src/main/java/com/vaadin/client/widget/escalator/ScrollbarBundle.java
+++ b/client/src/main/java/com/vaadin/client/widget/escalator/ScrollbarBundle.java
@@ -362,6 +362,7 @@ public abstract class ScrollbarBundle implements DeferredWorker {
private HandlerRegistration scrollSizeTemporaryScrollHandler;
private HandlerRegistration offsetSizeTemporaryScrollHandler;
+ private HandlerRegistration scrollInProgress;
private ScrollbarBundle() {
root.appendChild(scrollSizeElement);
@@ -523,6 +524,16 @@ public abstract class ScrollbarBundle implements DeferredWorker {
scrollPos = Math.max(0, Math.min(maxScrollPos, truncate(px)));
if (!WidgetUtil.pixelValuesEqual(oldScrollPos, scrollPos)) {
+ if (scrollInProgress == null) {
+ // Only used for tracking that there is "workPending"
+ scrollInProgress = addScrollHandler(new ScrollHandler() {
+ @Override
+ public void onScroll(ScrollEvent event) {
+ scrollInProgress.removeHandler();
+ scrollInProgress = null;
+ }
+ });
+ }
if (isInvisibleScrollbar) {
invisibleScrollbarTemporaryResizer.show();
}
@@ -911,6 +922,6 @@ public abstract class ScrollbarBundle implements DeferredWorker {
// requestAnimationFrame - which is not automatically checked
return scrollSizeTemporaryScrollHandler != null
|| offsetSizeTemporaryScrollHandler != null
- || scrollEventFirer.isBeingFired;
+ || scrollInProgress != null || scrollEventFirer.isBeingFired;
}
}
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 4f10c5b72a..1c6ae8b44e 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
@@ -54,4 +54,18 @@ public class GridScrollTest extends GridBasicFeaturesTest {
"0. Requested items 247 - 346", getLogRow(0));
assertEquals("There should be only one log row", " ", getLogRow(1));
}
+
+ @Test
+ public void workPendingWhileScrolling() {
+ openTestURL("theme=valo");
+ String script = "var c = window.vaadin.clients.runcomvaadintestscomponentsgridbasicfeaturesGridBasicFeatures;\n"
+ // Scroll down and cause lazy loading
+ + "c.getElementByPath(\"//Grid[0]#cell[21]\"); \n"
+ + "return c.isActive();";
+
+ Boolean active = (Boolean) executeScript(script);
+ assertTrue("Grid should be marked to have workPending while scrolling",
+ active);
+ }
+
}