Browse Source

#6698 Scrolling with the mouse is aborted when data is received from the server

svn changeset:21434/svn branch:6.6
tags/6.7.0
Leif Åstrand 12 years ago
parent
commit
68e20d0c8d
1 changed files with 20 additions and 2 deletions
  1. 20
    2
      src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

+ 20
- 2
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java View File

@@ -419,6 +419,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
private int tabIndex;
private TouchScrollDelegate touchScrollDelegate;

private int lastRenderedHeight;

public VScrollTable() {
scrollBodyPanel.setStyleName(CLASSNAME + "-body-wrapper");
scrollBodyPanel.addFocusHandler(this);
@@ -820,7 +822,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
paintableId = uidl.getStringAttribute("id");
immediate = uidl.getBooleanAttribute("immediate");
final int newTotalRows = uidl.getIntAttribute("totalrows");
if (newTotalRows != totalRows) {
boolean totalRowsChanged = newTotalRows != totalRows;
if (totalRowsChanged) {
if (scrollBody != null) {
if (totalRows == 0) {
tHead.clear();
@@ -996,10 +999,15 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
uidl.getIntAttribute("rows"));
if (headerChangedDuringUpdate) {
lazyAdjustColumnWidths.schedule(1);
} else {
} else if (!isScrollPositionVisible() || totalRowsChanged
|| lastRenderedHeight != scrollBody.getOffsetHeight()) {
// webkits may still bug with their disturbing scrollbar bug,
// See #3457
// run overflow fix for 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
@@ -1083,6 +1091,10 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
tHead.resizeCaptionContainer(oldSortedHeader);
}

// Remember this to detect situations where overflow hack might be
// needed during scrolling
lastRenderedHeight = scrollBody.getOffsetHeight();

rendering = false;
headerChangedDuringUpdate = false;

@@ -1844,6 +1856,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;

Loading…
Cancel
Save