Revision: 9804
Author: jlaba...@google.com
Date: Thu Mar  3 09:02:50 2011
Log: Fixing a bug in TabLayoutPanel where calling setTabText() removes the tab from the panel. r9689 fixed some edge cases in TabLayoutPanel such as calling tabContents.removeFromParent(), but it introduced this bug.

Issue: 6034

Review at http://gwt-code-reviews.appspot.com/1368806

Review by: sbruba...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=9804

Modified:
 /trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
 /trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java

=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java Tue Feb 8 07:19:49 2011 +++ /trunk/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java Thu Mar 3 09:02:50 2011
@@ -100,6 +100,7 @@

   private class Tab extends SimplePanel {
     private Element inner;
+    private boolean replacingWidget;

     public Tab(Widget child) {
       super(Document.get().createDivElement());
@@ -123,8 +124,11 @@
        * ensure consistency.
        */
       int index = tabs.indexOf(this);
-      if (index < 0) {
-        // This tab is no longer in the panel, so just remove the widget.
+      if (replacingWidget || index < 0) {
+        /*
+ * The tab contents are being replaced, or this tab is no longer in the
+         * panel, so just remove the widget.
+         */
         return super.remove(w);
       } else {
         // Delegate to the TabLayoutPanel.
@@ -139,6 +143,13 @@
         removeStyleDependentName("selected");
       }
     }
+
+    @Override
+    public void setWidget(Widget w) {
+      replacingWidget = true;
+      super.setWidget(w);
+      replacingWidget = false;
+    }

     @Override
     protected com.google.gwt.user.client.Element getContainerElement() {
=======================================
--- /trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java Tue Feb 8 07:19:49 2011 +++ /trunk/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java Thu Mar 3 09:02:50 2011
@@ -399,6 +399,23 @@
     handler.assertOnBeforeSelectionFired(false);
     handler.assertOnSelectionFired(false);
   }
+
+  /**
+   * Issue 6034: setTabText() removes the tab.
+   */
+  public void testSetTabText() {
+    TabLayoutPanel p = new TabLayoutPanel(1, Unit.EM);
+    Label[] labels = new Label[3];
+    for (int i = 0; i < labels.length; i++) {
+      labels[i] = new Label("content" + i);
+      p.add(labels[i]);
+    }
+
+    // Set the text of tab 1.
+    p.setTabText(1, "new text");
+    assertEquals(3, p.getWidgetCount());
+    assertEquals("new text", ((HasText) p.getTabWidget(1)).getText());
+  }

   /**
* Test that {@link TabLayoutPanel} calls widget.setVisible(true/false) on

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to