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 --- client/src/main/java/com/vaadin/client/ui/VComboBox.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'client') 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"); -- cgit v1.2.3