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);
+ }
}
});
panel.remove(selectedItemIcon);
updateRootWidth();
} else {
- selectedItemIcon.setUrl(iconUri);
panel.insert(selectedItemIcon, 0);
+ selectedItemIcon.setUrl(iconUri);
updateRootWidth();
updateSelectedIconPosition();
}
--- /dev/null
+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;
+ }
+
+}