DeckPanel now calls setVisible(true) on the Widget that is currently being displayed so users can implement delayed rendering techniques in their widgets. This supports a legacy use case where users relied on setVisible being called. Patch by: jlabanca Review by: ecc (desk review, branch-info.txt not reviewed) Issue: 2510 git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.5@3056 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/branch-info.txt b/branch-info.txt index 4cd6dd9..39be48d 100644 --- a/branch-info.txt +++ b/branch-info.txt
@@ -47,3 +47,5 @@ - RPC bugfix related to implementing a parameterized interface (r3044) - MenuBar animation exception when page refreshed while menus open (r3045) - Showcase textual tweaks (r3046) +- Add TabPanel.setAnimationEnabled method (r3054) +- New Showcase locale icon (r3055)
diff --git a/user/src/com/google/gwt/user/client/ui/DeckPanel.java b/user/src/com/google/gwt/user/client/ui/DeckPanel.java index 4ee7274..273edb5 100644 --- a/user/src/com/google/gwt/user/client/ui/DeckPanel.java +++ b/user/src/com/google/gwt/user/client/ui/DeckPanel.java
@@ -33,10 +33,10 @@ */ public class DeckPanel extends ComplexPanel implements HasAnimation { /** - * The duration of the animation. + * The duration of the animation. */ private static final int ANIMATION_DURATION = 350; - + /** * An {@link Animation} used to slide in the new content. */ @@ -81,6 +81,7 @@ // If we aren't showing anything, don't bother with the animation if (oldWidget == null) { UIObject.setVisible(newContainer, true); + newWidget.setVisible(true); return; } @@ -106,6 +107,12 @@ } else { onInstantaneousRun(); } + + // We call newWidget.setVisible(true) immediately after showing the + // widget's container so users can delay render their widget. Ultimately, + // we should have a better way of handling this, but we need to call + // setVisible for legacy support. + newWidget.setVisible(true); } @Override
diff --git a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java index c3f32e9..f9c1889 100644 --- a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java +++ b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
@@ -28,6 +28,61 @@ } /** + * Test that the {@link DeckPanel} calls widget.setVisible(true) on the + * visible widget, but does NOT call widget.setVisible(false) when a widget is + * hidden. + */ + public void testSetWidgetVisible() { + // Show a widget with animations disabled + { + DeckPanel deck = new DeckPanel(); + deck.setAnimationEnabled(false); + Label[] labels = new Label[3]; + for (int i = 0; i < labels.length; i++) { + labels[i] = new Label("content" + i); + labels[i].setVisible(false); + deck.add(labels[i]); + } + + // Show widget at index 1, make sure it becomes visible + deck.showWidget(1); + assertFalse(labels[0].isVisible()); + assertTrue(labels[1].isVisible()); + assertFalse(labels[2].isVisible()); + + // Show widget at index 0, make sure widget 1 is still visible + deck.showWidget(0); + assertTrue(labels[0].isVisible()); + assertTrue(labels[1].isVisible()); + assertFalse(labels[2].isVisible()); + } + + // Show a widget with animations enabled + { + DeckPanel deck = new DeckPanel(); + deck.setAnimationEnabled(true); + Label[] labels = new Label[3]; + for (int i = 0; i < labels.length; i++) { + labels[i] = new Label("content" + i); + labels[i].setVisible(false); + deck.add(labels[i]); + } + + // Show widget at index 1, make sure it becomes visible + deck.showWidget(1); + assertFalse(labels[0].isVisible()); + assertTrue(labels[1].isVisible()); + assertFalse(labels[2].isVisible()); + + // Show widget at index 0, make sure widget 1 is still visible + deck.showWidget(0); + assertTrue(labels[0].isVisible()); + assertTrue(labels[1].isVisible()); + assertFalse(labels[2].isVisible()); + } + } + + /** * Test that the offsetHeight/Width of a widget are defined when the widget is * added to the DeckPanel. */