aboutsummaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VTree.java19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/VTree.java
index 108a68be14..22d10f13c9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VTree.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VTree.java
@@ -252,6 +252,11 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
selectedIds = uidl.getStringArrayVariableAsSet("selected");
+ if (lastSelection == null && focusedNode == null) {
+ setFocusedNode(keyToNode.get(selectedIds.iterator().next()));
+ focusedNode.setFocused(false);
+ }
+
rendering = false;
}
@@ -1012,6 +1017,13 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
}
}
+ /**
+ * Scrolls the caption into view
+ */
+ public void scrollIntoView() {
+ nodeCaptionDiv.scrollIntoView();
+ }
+
}
public VDropHandler getDropHandler() {
@@ -1413,6 +1425,7 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
if (node != null) {
node.setFocused(true);
+ node.scrollIntoView();
}
focusedNode = node;
@@ -1427,10 +1440,12 @@ public class VTree extends SimpleFocusablePanel implements Paintable,
*/
public void onFocus(FocusEvent event) {
// If no node has focus, focus the first item in the tree
- if (focusedNode == null && selectable) {
+ if (focusedNode == null && lastSelection == null && selectable) {
setFocusedNode((TreeNode) body.getWidget(0));
- } else if (selectable) {
+ } else if (focusedNode != null && selectable) {
setFocusedNode(focusedNode);
+ } else if (lastSelection != null && selectable) {
+ setFocusedNode(lastSelection);
}
}