From 6cc773fb7c717328fbce7255fa419581b7609a92 Mon Sep 17 00:00:00 2001 From: Anastasia Smirnova Date: Mon, 25 Feb 2019 11:49:20 +0200 Subject: Ensure pop-up is not opened, when tabbing out fast from Combobox (#11436) Checking that no prior Combobox behavior is broken * Cleaning-up the code Adding UI test * Adding TestBench test --- .../main/java/com/vaadin/client/ui/VComboBox.java | 13 +++++-- .../combobox/ComboboxFastTabbingOut.java | 43 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 uitest/src/main/java/com/vaadin/tests/components/combobox/ComboboxFastTabbingOut.java diff --git a/client/src/main/java/com/vaadin/client/ui/VComboBox.java b/client/src/main/java/com/vaadin/client/ui/VComboBox.java index f80927ec1d..6ddb2cd29a 100644 --- a/client/src/main/java/com/vaadin/client/ui/VComboBox.java +++ b/client/src/main/java/com/vaadin/client/ui/VComboBox.java @@ -1454,7 +1454,8 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, if (!waitingForFilteringResponse && suggestionPopup.isAttached()) { showPopup = true; } - if (showPopup) { + // Don't show popup, if is not focused + if (showPopup && focused) { suggestionPopup.showSuggestions(currentPage); } @@ -1750,7 +1751,8 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, /** For internal use only. May be removed or replaced in the future. */ public boolean focused = false; - + /** For internal use only. May be removed or replaced in the future. */ + public boolean noKeyDownEvents = true; /** * If set to false, the component should not allow entering text to the * field even for filtering. @@ -2198,6 +2200,7 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, return; } + noKeyDownEvents = false; if (suggestionPopup.isAttached()) { if (enableDebug) { debug("Keycode " + keyCode + " target is popup"); @@ -2307,7 +2310,8 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, // queue this, may be cancelled by selection int selectedIndex = suggestionPopup.menu.getSelectedIndex(); - if (!allowNewItems && selectedIndex != -1) { + if (!allowNewItems && selectedIndex != -1 + && !currentSuggestions.isEmpty()) { onSuggestionSelected(currentSuggestions.get(selectedIndex)); } else { dataReceivedHandler.reactOnInputWhenReady(tb.getText()); @@ -2371,7 +2375,7 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, // NOP break; default: - if (textInputEnabled) { + if (textInputEnabled && !noKeyDownEvents) { // when filtering, we always want to see the results on the // first page first. filterOptions(0); @@ -2514,6 +2518,7 @@ public class VComboBox extends Composite implements Field, KeyDownHandler, return; } + noKeyDownEvents = true; focused = true; updatePlaceholder(); addStyleDependentName("focus"); diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboboxFastTabbingOut.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboboxFastTabbingOut.java new file mode 100644 index 0000000000..1789f3ba85 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboboxFastTabbingOut.java @@ -0,0 +1,43 @@ +package com.vaadin.tests.components.combobox; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.ComboBox; + +import java.util.ArrayList; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class ComboboxFastTabbingOut extends AbstractTestUI { + @Override + protected void setup(VaadinRequest request) { + ComboBox combobox = new ComboBox<>( + "Press any letter and tab out fast. The pop-up should stay closed"); + ArrayList values = new ArrayList<>(); + values.add("AMERICAN SAMOA"); + values.add("ANTIGUA AND BARBUDA"); + values.add("Bali"); + combobox.setId("firstCombobox"); + combobox.setItems(values); + + ComboBox combobox2 = new ComboBox<>( + "Focusing after tabbing from another CB should not open the pop-up"); + + combobox2.setItems("AMERICAN SAMOA", "ANTIGUA AND BARBUDA", "Lake 1", + "Lake 2"); + combobox2.setId("secondCombobox"); + addComponent(combobox); + addComponent(combobox2); + } + + @Override + protected String getTestDescription() { + return "On tabbing out fast, the popup window stays closed"; + } + + @Override + protected Integer getTicketNumber() { + return 11354; + } + +} -- cgit v1.2.3