aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorArtur <artur@vaadin.com>2017-01-12 09:11:11 +0200
committerPekka Hyvönen <pekka@vaadin.com>2017-01-12 09:11:11 +0200
commit6897f6dcef2aa7b352529a3c34b86c69985ba788 (patch)
tree0fed4dd0251a17fea9b8efb08bdf13c08a57dd3f /client
parent62c0d733b77fc9ad8ab3a6f5f6bb632a5afdc299 (diff)
downloadvaadin-framework-6897f6dcef2aa7b352529a3c34b86c69985ba788.tar.gz
vaadin-framework-6897f6dcef2aa7b352529a3c34b86c69985ba788.zip
Reset selected icon when blurring a ComboBox (#8082)
* Reset selected icon when blurring a ComboBox Fixes #8073 * Merge branch '7.7' into _combobox-icon-reset-selection * Merge branch '7.7' into _combobox-icon-reset-selection
Diffstat (limited to 'client')
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VFilterSelect.java48
1 files changed, 43 insertions, 5 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java b/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
index 38e067658b..e407aaafe4 100644
--- a/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
+++ b/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
@@ -1445,7 +1445,10 @@ public class VFilterSelect extends Composite
};
private class IconWidget extends Widget {
+ private Icon icon;
+
IconWidget(Icon icon) {
+ this.icon = icon;
setElement(icon.getElement());
addDomHandler(VFilterSelect.this, ClickEvent.getType());
}
@@ -1903,25 +1906,59 @@ public class VFilterSelect extends Composite
afterSelectedItemIconChange();
}
} else {
+ IconWidget newIcon = new IconWidget(client.getIcon(iconUri));
+ if (iconEquals(newIcon, selectedItemIcon)) {
+ /*
+ * Do not update the icon if nothing has changed. Otherwise we
+ * can cause problems such as not being able to click in the
+ * icon to open the popup (blur might occur and call this
+ * method, icon is replaced and the click event is not delivered
+ * to the new icon)
+ */
+ return;
+ }
+
if (selectedItemIcon != null) {
panel.remove(selectedItemIcon);
}
- selectedItemIcon = new IconWidget(client.getIcon(iconUri));
+
// Older IE versions don't scale icon correctly if DOM
// contains height and width attributes.
- selectedItemIcon.getElement().removeAttribute("height");
- selectedItemIcon.getElement().removeAttribute("width");
- selectedItemIcon.addDomHandler(new LoadHandler() {
+ newIcon.getElement().removeAttribute("height");
+ newIcon.getElement().removeAttribute("width");
+ newIcon.addDomHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
afterSelectedItemIconChange();
}
}, LoadEvent.getType());
- panel.insert(selectedItemIcon, 0);
+ panel.insert(newIcon, 0);
+ selectedItemIcon = newIcon;
afterSelectedItemIconChange();
}
}
+ /**
+ * Checks if the icon widgets show the same icon.
+ *
+ * @param icon1
+ * the first widget
+ * @param icon2
+ * the second widget
+ * @return <code>true</code> if they show the same icon, <code>false</code>
+ * otherwise
+ */
+ private static boolean iconEquals(IconWidget icon1, IconWidget icon2) {
+ if (icon1 == null) {
+ return icon2 == null;
+ } else if (icon2 == null) {
+ return false;
+ } else {
+ return icon1.icon.getUri().equals(icon2.icon.getUri());
+ }
+
+ }
+
private void afterSelectedItemIconChange() {
if (BrowserInfo.get().isWebkit() || BrowserInfo.get().isIE8()) {
// Some browsers need a nudge to reposition the text field
@@ -2387,6 +2424,7 @@ public class VFilterSelect extends Composite
}
} else if (currentSuggestion != null) {
setPromptingOff(currentSuggestion.caption);
+ setSelectedItemIcon(currentSuggestion.getIconUri());
}
}
removeStyleDependentName("focus");