From a915f6fd1f03efcf7c04dc383d1a076ca46f4b3d Mon Sep 17 00:00:00 2001 From: Anna Koskinen Date: Fri, 1 Feb 2013 13:07:20 +0200 Subject: [PATCH] Merge of (#10766) to Vaadin 7. Fix case where ComboBox suggestion menu selects a wrong item if there are duplicate captions. Change-Id: Ia2e6502f328f5f6daca74e6b60bd3b6ffb7ad977 --- .../com/vaadin/client/ui/VFilterSelect.java | 4 +- .../combobox/ComboBoxDuplicateCaption.java | 66 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java index d493386beb..cea3489b42 100644 --- a/client/src/com/vaadin/client/ui/VFilterSelect.java +++ b/client/src/com/vaadin/client/ui/VFilterSelect.java @@ -1663,8 +1663,10 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, tabPressedWhenPopupOpen = false; suggestionPopup.menu.doSelectedItemAction(); suggestionPopup.hide(); - } else if (!suggestionPopup.isAttached() + } else if ((!suggestionPopup.isAttached() && waitingForFilteringResponse) || suggestionPopup.isJustClosed()) { + // typing so fast the popup was never opened, or it's just + // closed suggestionPopup.menu.doSelectedItemAction(); } if (selectedOptionKey == null) { diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java new file mode 100644 index 0000000000..3c1e8a27d6 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java @@ -0,0 +1,66 @@ +package com.vaadin.tests.components.combobox; + +import java.util.ArrayList; +import java.util.List; + +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.data.util.BeanItemContainer; +import com.vaadin.tests.components.TestBase; +import com.vaadin.tests.util.Log; +import com.vaadin.tests.util.Person; +import com.vaadin.ui.AbstractSelect.ItemCaptionMode; +import com.vaadin.ui.Button; +import com.vaadin.ui.ComboBox; + +public class ComboBoxDuplicateCaption extends TestBase { + + private Log log = new Log(5); + + @Override + protected void setup() { + List list = new ArrayList(); + Person p1 = new Person(); + p1.setFirstName("John"); + p1.setLastName("Doe"); + list.add(p1); + + Person p2 = new Person(); + p2.setFirstName("Jane"); + p2.setLastName("Doe"); + list.add(p2); + + BeanItemContainer container = new BeanItemContainer( + Person.class); + container.addAll(list); + + ComboBox box = new ComboBox("Duplicate captions test Box"); + box.setId("ComboBox"); + box.setImmediate(true); + box.addValueChangeListener(new ValueChangeListener() { + + public void valueChange( + com.vaadin.data.Property.ValueChangeEvent event) { + Person p = (Person) event.getProperty().getValue(); + log.log("Person = " + p.getFirstName() + " " + p.getLastName()); + } + }); + box.setContainerDataSource(container); + box.setItemCaptionMode(ItemCaptionMode.PROPERTY); + box.setItemCaptionPropertyId("lastName"); + + addComponent(log); + + addComponent(box); + addComponent(new Button("Focus this")); + } + + @Override + protected String getDescription() { + return "VFilterSelects with duplicate item captions should not try to do a select (exact match search) for onBlur if not waitingForFilteringResponse"; + } + + @Override + protected Integer getTicketNumber() { + return 10766; + } +} -- 2.39.5