]> source.dussan.org Git - vaadin-framework.git/commitdiff
maybe fixes #6834 (can't reproduce as described, but this fixes an other related...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 2 May 2011 15:12:40 +0000 (15:12 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 2 May 2011 15:12:40 +0000 (15:12 +0000)
svn changeset:18588/svn branch:6.6

src/com/vaadin/terminal/gwt/client/Util.java
src/com/vaadin/terminal/gwt/client/ui/VTextField.java

index e6819efc448a7f7418c9c52460dd1220e31d785d..70af13bd4bf3a689f176ecab73736507c263c058 100644 (file)
@@ -1202,4 +1202,39 @@ public class Util {
        return null;
      }-*/
     ;
+
+    /**
+     * Kind of stronger version of isAttached(). In addition to std isAttached,
+     * this method checks that this widget nor any of its parents is hidden. Can
+     * be e.g used to check whether component should react to some events or
+     * not.
+     * 
+     * @param widget
+     * @return true if attached and displayed
+     */
+    public static boolean isAttachedAndDisplayed(Widget widget) {
+        if (widget.isAttached()) {
+            /*
+             * Failfast using offset size, then by iterating the widget tree
+             */
+            boolean notZeroSized = widget.getOffsetHeight() > 0
+                    || widget.getOffsetWidth() > 0;
+            return notZeroSized || checkVisibilityRecursively(widget);
+        } else {
+            return false;
+        }
+    }
+
+    private static boolean checkVisibilityRecursively(Widget widget) {
+        if (widget.isVisible()) {
+            Widget parent = widget.getParent();
+            if (parent == null) {
+                return true; // root panel
+            } else {
+                return checkVisibilityRecursively(parent);
+            }
+        } else {
+            return false;
+        }
+    }
 }
index e275d7a9ac2123f37910189c8e53a4b3679edcd5..3df2e356d15204cc3305f9337fc93d4f5c04275f 100644 (file)
@@ -24,6 +24,7 @@ import com.vaadin.terminal.gwt.client.EventId;
 import com.vaadin.terminal.gwt.client.Paintable;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.VConsole;
 import com.vaadin.terminal.gwt.client.VTooltip;
 import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
 
@@ -419,14 +420,15 @@ public class VTextField extends TextBoxBase implements Paintable, Field,
      * @return true iff the value was updated
      */
     protected boolean updateCursorPosition() {
-        int cursorPos = getCursorPos();
-        if (lastCursorPos != cursorPos) {
-            client.updateVariable(id, VAR_CURSOR, cursorPos, false);
-            lastCursorPos = cursorPos;
-            return true;
-        } else {
-            return false;
+        if (Util.isAttachedAndDisplayed(this)) {
+            int cursorPos = getCursorPos();
+            if (lastCursorPos != cursorPos) {
+                client.updateVariable(id, VAR_CURSOR, cursorPos, false);
+                lastCursorPos = cursorPos;
+                return true;
+            }
         }
+        return false;
     }
 
     private static VTextField focusedTextField;