diff options
author | Anastasia Smirnova <anasmi@utu.fi> | 2018-12-14 13:06:00 +0200 |
---|---|---|
committer | Sun Zhe <31067185+ZheSun88@users.noreply.github.com> | 2018-12-14 13:06:00 +0200 |
commit | 7ecd44cfb6a2d08d67f72e38cadaba8fab04962d (patch) | |
tree | b524ed84a8d3af04e4500ff2053fa5b2a68a4853 /client | |
parent | 891bb534de30ed39e463af88f67e7f5bbf94e3f1 (diff) | |
download | vaadin-framework-7ecd44cfb6a2d08d67f72e38cadaba8fab04962d.tar.gz vaadin-framework-7ecd44cfb6a2d08d67f72e38cadaba8fab04962d.zip |
Move onClick logic to the Connector (#11367)
* Move onClick logic to the Connector
Move onClick event handling from 'VNativeButton' to NativeButtonConnector. Now works as for regular button.
Also, adding propagation of the `enabled` value to the state on disableOnClick being true
Fixes https://github.com/vaadin/framework/issues/11188
Diffstat (limited to 'client')
-rw-r--r-- | client/src/main/java/com/vaadin/client/ui/VNativeButton.java | 22 | ||||
-rw-r--r-- | client/src/main/java/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java | 27 |
2 files changed, 25 insertions, 24 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VNativeButton.java b/client/src/main/java/com/vaadin/client/ui/VNativeButton.java index ac0f728ffe..3df97eb762 100644 --- a/client/src/main/java/com/vaadin/client/ui/VNativeButton.java +++ b/client/src/main/java/com/vaadin/client/ui/VNativeButton.java @@ -24,11 +24,8 @@ import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Button; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; -import com.vaadin.client.MouseEventDetailsBuilder; -import com.vaadin.client.StyleConstants; import com.vaadin.client.Util; import com.vaadin.client.WidgetUtil.ErrorUtil; -import com.vaadin.shared.MouseEventDetails; import com.vaadin.shared.ui.button.ButtonServerRpc; public class VNativeButton extends Button @@ -59,13 +56,10 @@ public class VNativeButton extends Button * mouse while clicking it. In this case mouse leaves the button without * moving. */ - private boolean clickPending; + public boolean clickPending; private boolean cancelNextClick = false; - /** For internal use only. May be removed or replaced in the future. */ - public boolean disableOnClick = false; - public VNativeButton() { setStyleName(CLASSNAME); @@ -145,20 +139,6 @@ public class VNativeButton extends Button // (#11854) setFocus(true); } - if (disableOnClick) { - setEnabled(false); - // FIXME: This should be moved to NativeButtonConnector along with - // buttonRpcProxy - addStyleName(StyleConstants.DISABLED); - buttonRpcProxy.disableOnClick(); - } - - // Add mouse details - MouseEventDetails details = MouseEventDetailsBuilder - .buildMouseEventDetails(event.getNativeEvent(), getElement()); - buttonRpcProxy.click(details); - - clickPending = false; } @Override diff --git a/client/src/main/java/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java b/client/src/main/java/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java index 2bf1829ad8..6616dc2d5f 100644 --- a/client/src/main/java/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/nativebutton/NativeButtonConnector.java @@ -15,19 +15,24 @@ */ package com.vaadin.client.ui.nativebutton; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.vaadin.client.MouseEventDetailsBuilder; import com.vaadin.client.VCaption; import com.vaadin.client.communication.StateChangeEvent; import com.vaadin.client.ui.AbstractComponentConnector; import com.vaadin.client.ui.ConnectorFocusAndBlurHandler; import com.vaadin.client.ui.Icon; import com.vaadin.client.ui.VNativeButton; +import com.vaadin.shared.MouseEventDetails; import com.vaadin.shared.ui.Connect; import com.vaadin.shared.ui.button.ButtonServerRpc; import com.vaadin.shared.ui.button.NativeButtonState; import com.vaadin.ui.NativeButton; @Connect(NativeButton.class) -public class NativeButtonConnector extends AbstractComponentConnector { +public class NativeButtonConnector extends AbstractComponentConnector + implements ClickHandler { @Override public void init() { @@ -37,6 +42,7 @@ public class NativeButtonConnector extends AbstractComponentConnector { getWidget().client = getConnection(); getWidget().paintableId = getConnectorId(); + getWidget().addClickHandler(this); ConnectorFocusAndBlurHandler.addHandlers(this); } @@ -49,8 +55,6 @@ public class NativeButtonConnector extends AbstractComponentConnector { public void onStateChanged(StateChangeEvent stateChangeEvent) { super.onStateChanged(stateChangeEvent); - getWidget().disableOnClick = getState().disableOnClick; - // Set text VCaption.setCaptionText(getWidget(), getState()); @@ -77,4 +81,21 @@ public class NativeButtonConnector extends AbstractComponentConnector { public NativeButtonState getState() { return (NativeButtonState) super.getState(); } + + @Override + public void onClick(ClickEvent event) { + if (getState().disableOnClick) { + getState().enabled = false; + super.updateEnabledState(false); + getRpcProxy(ButtonServerRpc.class).disableOnClick(); + } + + // Add mouse details + MouseEventDetails details = MouseEventDetailsBuilder + .buildMouseEventDetails(event.getNativeEvent(), + getWidget().getElement()); + getRpcProxy(ButtonServerRpc.class).click(details); + + getWidget().clickPending = false; + } } |