From 07292fe8fb7b9d9cf94dd3a57cfab4e6e31bd639 Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Thu, 5 Nov 2015 13:29:15 +0200 Subject: Send ComboBox focus/blur with RPC (#19929) Send focus and blur events using RPC instead of in UIDL. This change does not use ConnectorFocusAndBlurHandler to preserve old timings. Change-Id: I02a86dcc3959388ca835798a33cb600898b19ab9 --- .../java/com/vaadin/client/ui/VFilterSelect.java | 15 +++---- .../client/ui/combobox/ComboBoxConnector.java | 47 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) (limited to 'client') 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 3ec1c4d1d0..677e6f846e 100644 --- a/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java +++ b/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java @@ -2217,9 +2217,8 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, // If a focus event is not going to be sent, send the options // request immediately; otherwise queue in the same burst as the // focus event. Fixes #8321. - ApplicationConnection client = connector.getConnection(); boolean immediate = focused - || !client.hasEventListeners(this, EventId.FOCUS); + || !connector.hasEventListener(EventId.FOCUS); filterOptions(-1, "", immediate); popupOpenerClicked = true; lastFilter = ""; @@ -2314,14 +2313,12 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, } addStyleDependentName("focus"); - ApplicationConnection client = connector.getConnection(); - if (client.hasEventListeners(this, EventId.FOCUS)) { - client.updateVariable(paintableId, EventId.FOCUS, "", true); + if (connector.sendFocusEvent()) { afterUpdateClientVariables(); } - client.getVTooltip().showAssistive( - connector.getTooltipInfo(getElement())); + connector.getConnection().getVTooltip() + .showAssistive(connector.getTooltipInfo(getElement())); } /** @@ -2383,9 +2380,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, } removeStyleDependentName("focus"); - ApplicationConnection client = connector.getConnection(); - if (client.hasEventListeners(this, EventId.BLUR)) { - client.updateVariable(paintableId, EventId.BLUR, "", true); + if (connector.sendBlurEvent()) { afterUpdateClientVariables(); } } diff --git a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java index f66a115313..c4a9856311 100644 --- a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java @@ -31,6 +31,8 @@ import com.vaadin.client.ui.AbstractFieldConnector; import com.vaadin.client.ui.SimpleManagedLayout; import com.vaadin.client.ui.VFilterSelect; import com.vaadin.client.ui.VFilterSelect.FilterSelectSuggestion; +import com.vaadin.shared.EventId; +import com.vaadin.shared.communication.FieldRpc.FocusAndBlurServerRpc; import com.vaadin.shared.ui.Connect; import com.vaadin.shared.ui.combobox.ComboBoxConstants; import com.vaadin.shared.ui.combobox.ComboBoxServerRpc; @@ -45,6 +47,9 @@ public class ComboBoxConnector extends AbstractFieldConnector implements protected ComboBoxServerRpc rpc = RpcProxy.create(ComboBoxServerRpc.class, this); + protected FocusAndBlurServerRpc focusAndBlurRpc = RpcProxy.create( + FocusAndBlurServerRpc.class, this); + // oldSuggestionTextMatchTheOldSelection is used to detect when it's safe to // update textbox text by a changed item caption. private boolean oldSuggestionTextMatchTheOldSelection; @@ -453,4 +458,46 @@ public class ComboBoxConnector extends AbstractFieldConnector implements immediate); } + /** + * Notify the server that the combo box received focus. + * + * For timing reasons, ConnectorFocusAndBlurHandler is not used at the + * moment. + * + * This method is for internal use only and may be removed in future + * versions. + * + * @since + * @return true if an event was sent (there are registered listeners), false + * otherwise + */ + public boolean sendFocusEvent() { + boolean registeredListeners = hasEventListener(EventId.FOCUS); + if (registeredListeners) { + focusAndBlurRpc.focus(); + } + return registeredListeners; + } + + /** + * Notify the server that the combo box lost focus. + * + * For timing reasons, ConnectorFocusAndBlurHandler is not used at the + * moment. + * + * This method is for internal use only and may be removed in future + * versions. + * + * @since + * @return true if an event was sent (there are registered listeners), false + * otherwise + */ + public boolean sendBlurEvent() { + boolean registeredListeners = hasEventListener(EventId.BLUR); + if (registeredListeners) { + focusAndBlurRpc.blur(); + } + return registeredListeners; + } + } -- cgit v1.2.3