]> source.dussan.org Git - vaadin-framework.git/commitdiff
Added test case and fix for #3991
authorJohn Alhroos <john.ahlroos@itmill.com>
Tue, 2 Mar 2010 09:51:16 +0000 (09:51 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Tue, 2 Mar 2010 09:51:16 +0000 (09:51 +0000)
svn changeset:11582/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java
tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java [new file with mode: 0644]

index 2dcf7562ae7b0d55b1ff3d79056d7c32a8041b2c..669b5b90ea8f6f84b0ba13f13c4f1ff3e46e8a38 100644 (file)
@@ -631,6 +631,23 @@ public class VFilterSelect extends Composite implements Paintable, Field,
             public void onLoad(LoadEvent event) {
                 updateRootWidth();
                 updateSelectedIconPosition();
+
+                /*
+                 * We need to re-calculate the widths in IE at load time to
+                 * ensure that the text is not placed behind the icon. #3991
+                 */
+                if (BrowserInfo.get().isIE()) {
+                    int tbWidth = Util.getRequiredWidth(tb);
+                    int openerWidth = Util.getRequiredWidth(popupOpener);
+                    int iconWidth = selectedItemIcon.isAttached() ? Util
+                            .measureMarginLeft(tb.getElement())
+                            - Util.measureMarginLeft(selectedItemIcon
+                                    .getElement()) : 0;
+
+                    int w = tbWidth + openerWidth + iconWidth;
+                    tb.setWidth((tbWidth - getTextboxPadding()) + "px");
+                    setTextboxWidth(w);
+                }
             }
         });
 
@@ -883,8 +900,8 @@ public class VFilterSelect extends Composite implements Paintable, Field,
             panel.remove(selectedItemIcon);
             updateRootWidth();
         } else {
-            selectedItemIcon.setUrl(iconUri);
             panel.insert(selectedItemIcon, 0);
+            selectedItemIcon.setUrl(iconUri);
             updateRootWidth();
             updateSelectedIconPosition();
         }
diff --git a/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java b/tests/src/com/vaadin/tests/components/select/SelectIconPlacement.java
new file mode 100644 (file)
index 0000000..2fcf730
--- /dev/null
@@ -0,0 +1,33 @@
+package com.vaadin.tests.components.select;
+
+import com.vaadin.terminal.ThemeResource;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Select;
+
+public class SelectIconPlacement extends TestBase {
+    private static final long serialVersionUID = 1L;
+
+    private Select mySelect;
+
+    @Override
+    protected void setup() {
+        mySelect = new Select("Foo");
+        String bar = "FooBarBaz";
+        mySelect.addItem(bar);
+        mySelect.setItemIcon(bar, new ThemeResource("common/icons/error.png"));
+        mySelect.select(bar);
+        addComponent(mySelect);
+    }
+
+    @Override
+    protected String getDescription() {
+        return "A select with item icons pushes the caption of that item to the right to make room for the icon. It works fine in all browsers except IE8.<br/>"+
+        "Upon component render the icon and caption is on top of each others, and it corrects itself when you open the dropdown. ";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 3991;
+    }
+
+}