]> source.dussan.org Git - vaadin-framework.git/commitdiff
#6788,#6197 : improved the logic of choosing focused row when new set of rows is...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 14 Apr 2011 14:09:46 +0000 (14:09 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 14 Apr 2011 14:09:46 +0000 (14:09 +0000)
svn changeset:18300/svn branch:6.5

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

index c8feb6262c36946f8ea3b0c602701d4f88a843cb..9b0a80afaa2a1b6deca1c1ab696abcc234b7c155 100644 (file)
@@ -1002,7 +1002,7 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             String selectedRowKey = selectedRowKeys.iterator().next();
             if (selectedRowKey != null) {
                 VScrollTableRow renderedRow = getRenderedRowByKey(selectedRowKey);
-                if (renderedRow == null) {
+                if (renderedRow == null || !renderedRow.isInViewPort()) {
                     setRowFocus(scrollBody.getRowByRowIndex(firstRowInViewPort));
                 } else {
                     setRowFocus(renderedRow);
@@ -3815,6 +3815,25 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                         | Event.ONDBLCLICK | Event.ONCONTEXTMENU);
             }
 
+            /**
+             * Detects whether row is visible in tables viewport.
+             * 
+             * @return
+             */
+            public boolean isInViewPort() {
+                int absoluteTop = getAbsoluteTop();
+                int scrollPosition = scrollBodyPanel.getScrollPosition();
+                if (absoluteTop < scrollPosition) {
+                    return false;
+                }
+                int maxVisible = scrollPosition
+                        + scrollBodyPanel.getOffsetHeight() - getOffsetHeight();
+                if (absoluteTop > maxVisible) {
+                    return false;
+                }
+                return true;
+            }
+
             /**
              * Makes a check based on indexes whether the row is before the
              * compared row.