Reviewers: sbrubaker,
Description:
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
Please review this at http://gwt-code-reviews.appspot.com/1368806/
Affected files:
M user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
M user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
Index: user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
===================================================================
--- user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java (revision
9792)
+++ user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java (working
copy)
@@ -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.
@@ -138,6 +142,13 @@
} else {
removeStyleDependentName("selected");
}
+ }
+
+ @Override
+ public void setWidget(Widget w) {
+ replacingWidget = true;
+ super.setWidget(w);
+ replacingWidget = false;
}
@Override
Index: user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
===================================================================
--- user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
(revision 9792)
+++ user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
(working copy)
@@ -401,6 +401,23 @@
}
/**
+ * 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
* each widget, when it is shown/hidden.
*/
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors