diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2015-09-28 11:40:57 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-10-01 09:43:16 +0000 |
commit | 00dc7ab85e8fd533854ccc50b788012cf1450342 (patch) | |
tree | fb8204bbf18476be0af486dbd11faeff6651c518 /client/src | |
parent | cc4f755a6c9cf996442f9c5356f6f0fbdcf41a8f (diff) | |
download | vaadin-framework-00dc7ab85e8fd533854ccc50b788012cf1450342.tar.gz vaadin-framework-00dc7ab85e8fd533854ccc50b788012cf1450342.zip |
Add support for ContextClickEvent in AbstractComponent (#19015)
Change-Id: I93d5d20925b8ac9b4b108ccc6deec2090e68aa0d
Diffstat (limited to 'client/src')
7 files changed, 45 insertions, 40 deletions
diff --git a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java index 1f09c14fb0..643adffe12 100644 --- a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java +++ b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java @@ -18,12 +18,16 @@ package com.vaadin.client.ui; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArrayString; import com.google.gwt.dom.client.Element; +import com.google.gwt.event.dom.client.ContextMenuEvent; +import com.google.gwt.event.dom.client.ContextMenuHandler; +import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Focusable; import com.google.gwt.user.client.ui.HasEnabled; import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ComponentConnector; import com.vaadin.client.HasComponentsConnector; import com.vaadin.client.LayoutManager; +import com.vaadin.client.MouseEventDetailsBuilder; import com.vaadin.client.Profiler; import com.vaadin.client.ServerConnector; import com.vaadin.client.StyleConstants; @@ -31,6 +35,7 @@ import com.vaadin.client.TooltipInfo; import com.vaadin.client.UIDL; import com.vaadin.client.Util; import com.vaadin.client.VConsole; +import com.vaadin.client.annotations.OnStateChange; import com.vaadin.client.communication.StateChangeEvent; import com.vaadin.client.metadata.NoDataException; import com.vaadin.client.metadata.Type; @@ -39,12 +44,16 @@ import com.vaadin.client.ui.ui.UIConnector; import com.vaadin.shared.AbstractComponentState; import com.vaadin.shared.ComponentConstants; import com.vaadin.shared.Connector; +import com.vaadin.shared.ContextClickRpc; +import com.vaadin.shared.EventId; import com.vaadin.shared.ui.ComponentStateUtil; import com.vaadin.shared.ui.TabIndexState; public abstract class AbstractComponentConnector extends AbstractConnector implements ComponentConnector { + private HandlerRegistration contextHandler = null; + private Widget widget; private String lastKnownWidth = ""; @@ -64,6 +73,42 @@ public abstract class AbstractComponentConnector extends AbstractConnector public AbstractComponentConnector() { } + @OnStateChange("registeredEventListeners") + void handleContextClickListenerChange() { + if (contextHandler == null && hasEventListener(EventId.CONTEXT_CLICK)) { + contextHandler = getWidget().addDomHandler( + new ContextMenuHandler() { + @Override + public void onContextMenu(ContextMenuEvent event) { + sendContextClickEvent(event); + } + }, ContextMenuEvent.getType()); + } else if (contextHandler != null + && !hasEventListener(EventId.CONTEXT_CLICK)) { + contextHandler.removeHandler(); + contextHandler = null; + } + } + + /** + * This method sends the context menu event to the server-side. Can be + * overridden to provide extra information through an alternative RPC + * interface. + * + * @since + * @param event + */ + protected void sendContextClickEvent(ContextMenuEvent event) { + event.preventDefault(); + event.stopPropagation(); + + // The default context click implementation only provides the mouse + // coordinates relative to root element of widget. + getRpcProxy(ContextClickRpc.class).contextClick( + MouseEventDetailsBuilder.buildMouseEventDetails( + event.getNativeEvent(), getWidget().getElement())); + } + /** * Creates and returns the widget for this VPaintableWidget. This method * should only be called once when initializing the paintable. diff --git a/client/src/com/vaadin/client/ui/absolutelayout/AbsoluteLayoutConnector.java b/client/src/com/vaadin/client/ui/absolutelayout/AbsoluteLayoutConnector.java index e1234d436a..19b66fb72f 100644 --- a/client/src/com/vaadin/client/ui/absolutelayout/AbsoluteLayoutConnector.java +++ b/client/src/com/vaadin/client/ui/absolutelayout/AbsoluteLayoutConnector.java @@ -74,16 +74,6 @@ public class AbsoluteLayoutConnector extends } }; - /* - * (non-Javadoc) - * - * @see com.vaadin.client.ui.AbstractComponentConnector#init() - */ - @Override - protected void init() { - super.init(); - } - /** * Returns the deepest nested child component which contains "element". The * child component is also returned if "element" is part of its caption. diff --git a/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java b/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java index 8ff8a0b72d..95d64b61d0 100644 --- a/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java +++ b/client/src/com/vaadin/client/ui/browserframe/BrowserFrameConnector.java @@ -26,11 +26,6 @@ import com.vaadin.shared.ui.browserframe.BrowserFrameState; public class BrowserFrameConnector extends AbstractComponentConnector { @Override - protected void init() { - super.init(); - } - - @Override public VBrowserFrame getWidget() { return (VBrowserFrame) super.getWidget(); } diff --git a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java index bef506b492..1ec395280d 100644 --- a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java +++ b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java @@ -64,16 +64,6 @@ public class CssLayoutConnector extends AbstractLayoutConnector { /* * (non-Javadoc) * - * @see com.vaadin.client.ui.AbstractComponentConnector#init() - */ - @Override - protected void init() { - super.init(); - } - - /* - * (non-Javadoc) - * * @see com.vaadin.client.ui.AbstractLayoutConnector#getState() */ @Override diff --git a/client/src/com/vaadin/client/ui/embedded/EmbeddedConnector.java b/client/src/com/vaadin/client/ui/embedded/EmbeddedConnector.java index 38995cf800..7b837726a7 100644 --- a/client/src/com/vaadin/client/ui/embedded/EmbeddedConnector.java +++ b/client/src/com/vaadin/client/ui/embedded/EmbeddedConnector.java @@ -52,11 +52,6 @@ public class EmbeddedConnector extends AbstractComponentConnector implements private String resourceUrl; @Override - protected void init() { - super.init(); - } - - @Override public void onStateChanged(StateChangeEvent stateChangeEvent) { super.onStateChanged(stateChangeEvent); // if theme has changed the resourceUrl may need to be updated diff --git a/client/src/com/vaadin/client/ui/flash/FlashConnector.java b/client/src/com/vaadin/client/ui/flash/FlashConnector.java index 7d01f6f560..e859e9cbf1 100644 --- a/client/src/com/vaadin/client/ui/flash/FlashConnector.java +++ b/client/src/com/vaadin/client/ui/flash/FlashConnector.java @@ -26,11 +26,6 @@ import com.vaadin.shared.ui.flash.FlashState; public class FlashConnector extends AbstractComponentConnector { @Override - protected void init() { - super.init(); - } - - @Override public VFlash getWidget() { return (VFlash) super.getWidget(); } diff --git a/client/src/com/vaadin/client/ui/link/LinkConnector.java b/client/src/com/vaadin/client/ui/link/LinkConnector.java index 5a12445655..1e77fb51b4 100644 --- a/client/src/com/vaadin/client/ui/link/LinkConnector.java +++ b/client/src/com/vaadin/client/ui/link/LinkConnector.java @@ -32,11 +32,6 @@ import com.vaadin.ui.Link; public class LinkConnector extends AbstractComponentConnector { @Override - protected void init() { - super.init(); - } - - @Override public LinkState getState() { return (LinkState) super.getState(); } |