diff options
author | Leif Åstrand <leif@vaadin.com> | 2011-09-30 12:41:54 +0000 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2011-09-30 12:41:54 +0000 |
commit | ce46da1c3d92b0b8c0515e8937b5c8dee5ff8ac9 (patch) | |
tree | c4b3c4af5afe0b4623f01abaa07a121c590a4e97 | |
parent | 00b26d46bb205049a336832b5703be5cb2572edb (diff) | |
parent | 3d266de566ee2b4bc8758906c6c487848bea120f (diff) | |
download | vaadin-framework-ce46da1c3d92b0b8c0515e8937b5c8dee5ff8ac9.tar.gz vaadin-framework-ce46da1c3d92b0b8c0515e8937b5c8dee5ff8ac9.zip |
Merged #6698 to Vaadin 6.7 branch
svn changeset:21476/svn branch:6.7
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java index ce586cbcc5..731b388040 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java @@ -421,6 +421,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, private int tabIndex; private TouchScrollDelegate touchScrollDelegate; + private int lastRenderedHeight; + public VScrollTable() { setMultiSelectMode(MULTISELECT_MODE_DEFAULT); @@ -830,7 +832,9 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, paintableId = uidl.getStringAttribute("id"); immediate = uidl.getBooleanAttribute("immediate"); + int previousTotalRows = totalRows; updateTotalRows(uidl); + boolean totalRowsChanged = (totalRows != previousTotalRows); updateDragMode(uidl); @@ -899,10 +903,17 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, uidl.getIntAttribute("rows")); if (headerChangedDuringUpdate) { triggerLazyColumnAdjustment(true); - } else { + } else if (!isScrollPositionVisible() + || totalRowsChanged + || lastRenderedHeight != scrollBody + .getOffsetHeight()) { // webkits may still bug with their disturbing scrollbar // bug, see #3457 // Run overflow fix for the scrollable area + // #6698 - If there's a scroll going on, don't abort it + // by changing overflows as the length of the contents + // *shouldn't* have changed (unless the number of rows + // or the height of the widget has also changed) Scheduler.get().scheduleDeferred(new Command() { public void execute() { Util.runWebkitOverflowAutoFix(scrollBodyPanel @@ -965,6 +976,10 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, resizeSortedColumnForSortIndicator(); + // Remember this to detect situations where overflow hack might be + // needed during scrolling + lastRenderedHeight = scrollBody.getOffsetHeight(); + rendering = false; headerChangedDuringUpdate = false; @@ -2020,6 +2035,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler, } } + private boolean isScrollPositionVisible() { + return scrollPositionElement != null + && !scrollPositionElement.getStyle().getDisplay() + .equals(Display.NONE.toString()); + } + private class RowRequestHandler extends Timer { private int reqFirstRow = 0; |