Merging trunk c4889 into this branch.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4892 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/FlowPanel.java b/user/src/com/google/gwt/user/client/ui/FlowPanel.java
index 44f2153..eab2cfa 100644
--- a/user/src/com/google/gwt/user/client/ui/FlowPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/FlowPanel.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.dom.client.Node;
 import com.google.gwt.user.client.DOM;
 
 /**
@@ -47,7 +48,13 @@
   @Override
   public void clear() {
     super.doLogicalClear();
-    this.getElement().setInnerHTML("");
+
+    // Remove all existing child nodes.
+    Node child = getElement().getFirstChild();
+    while (child != null) {
+      getElement().removeChild(child);
+      child = getElement().getFirstChild();
+    }
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/client/ui/FlowPanelTest.java b/user/test/com/google/gwt/user/client/ui/FlowPanelTest.java
index 441ac03..5db2691 100644
--- a/user/test/com/google/gwt/user/client/ui/FlowPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/FlowPanelTest.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.dom.client.Element;
 import com.google.gwt.junit.client.GWTTestCase;
 
 import java.util.ArrayList;
@@ -58,4 +59,22 @@
       assertNull(child.getElement().getPropertyString("__listener") == null);
     }
   }
+
+  public void testClearWithNestedChildren() {
+    FlowPanel target = new FlowPanel();
+    FlowPanel child0 = new FlowPanel();
+    HTML child1 = new HTML();
+    target.add(child0);
+    child0.add(child1);
+
+    Element child0Elem = child0.getElement();
+    Element child1Elem = child1.getElement();
+
+    assertEquals(child0Elem, target.getElement().getFirstChild());
+    assertEquals(child1Elem, child0Elem.getFirstChild());
+
+    target.clear();
+
+    assertEquals(child1Elem, child0Elem.getFirstChildElement());
+  }
 }