Allow to keep size of Widget on DeckPanel.
Review: http://gwt-code-reviews.appspot.com/732802

Review by: jlabanca@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8596 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 0126171..7975f2f 100644
--- a/user/src/com/google/gwt/user/client/ui/DeckPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DeckPanel.java
@@ -341,7 +341,15 @@
   private void finishWidgetInitialization(Element container, Widget w) {
     UIObject.setVisible(container, false);
     DOM.setStyleAttribute(container, "height", "100%");
-    w.setSize("100%", "100%");
+    
+    // Set 100% by default.
+    Element element = w.getElement();
+    if (DOM.getStyleAttribute(element, "width").equals("")) {
+      w.setWidth("100%");
+    }
+    if (DOM.getStyleAttribute(element, "height").equals("")) {
+      w.setHeight("100%");
+    }
 
     // Issue 2510: Hiding the widget isn't necessary because we hide its
     // wrapper, but it's in here for legacy support.
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 562957e..b37d6bb 100644
--- a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
@@ -16,6 +16,8 @@
 
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.user.client.DOM;
+
 /**
  * Test for {@link DeckPanel}.
  */
@@ -99,6 +101,46 @@
     // Verify content.onLoad was actually called
     assertEquals("attached", content.getText());
   }
+  
+  /**
+   * Test that style width/height is set to 100% by default.
+   */
+  public void testWidgetDefaultSizeOnAdd() {
+    DeckPanel deck = new DeckPanel();
+    RootPanel.get().add(deck);
+    
+    // Prepare widget, no width/height initially
+    Label content = new Label("content");
+    assertEquals("", content.getElement().getStyle().getWidth());
+    assertEquals("", content.getElement().getStyle().getHeight());
+    
+    // Add a widget to the DeckPanel
+    deck.add(content);
+    
+    // Verify width/height
+    assertEquals("100%", content.getElement().getStyle().getWidth());
+    assertEquals("100%", content.getElement().getStyle().getHeight());
+  }
+  
+  /**
+   * Test that existing width/height is kept as is during add.
+   */
+  public void testWidgetKeepSizeOnAdd() {
+    DeckPanel deck = new DeckPanel();
+    RootPanel.get().add(deck);
+    
+    // Prepare widget, with width/height
+    Label content = new Label("content");
+    DOM.setStyleAttribute(content.getElement(), "width", "5cm");
+    DOM.setStyleAttribute(content.getElement(), "height", "30mm");
+    
+    // Add a widget to the DeckPanel
+    deck.add(content);
+    
+    // Verify width/height
+    assertEquals("5cm", DOM.getStyleAttribute(content.getElement(), "width"));
+    assertEquals("30mm", DOM.getStyleAttribute(content.getElement(), "height"));
+  }
 
   @Override
   protected DeckPanel createPanel() {