summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2011-09-30 12:41:54 +0000
committerLeif Åstrand <leif@vaadin.com>2011-09-30 12:41:54 +0000
commitce46da1c3d92b0b8c0515e8937b5c8dee5ff8ac9 (patch)
treec4b3c4af5afe0b4623f01abaa07a121c590a4e97
parent00b26d46bb205049a336832b5703be5cb2572edb (diff)
parent3d266de566ee2b4bc8758906c6c487848bea120f (diff)
downloadvaadin-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.java23
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;