Change-Id: Id7ec7013bcff446cdf3ce0f2088cb20b0708a56btags/7.6.0.rc1
} | } | ||||
}-*/; | }-*/; | ||||
/** | |||||
* JavaScript hack to clear text selection in various browsers. | |||||
* | |||||
* @since 7.6 | |||||
*/ | |||||
public native static void clearTextSelection() | |||||
/*-{ | |||||
if ($wnd.getSelection) { | |||||
$wnd.getSelection().removeAllRanges(); | |||||
} | |||||
}-*/; | |||||
/** | /** | ||||
* The allowed value inaccuracy when comparing two double-typed pixel | * The allowed value inaccuracy when comparing two double-typed pixel | ||||
* values. | * values. |
import com.vaadin.client.MouseEventDetailsBuilder; | import com.vaadin.client.MouseEventDetailsBuilder; | ||||
import com.vaadin.client.ServerConnector; | import com.vaadin.client.ServerConnector; | ||||
import com.vaadin.client.TooltipInfo; | import com.vaadin.client.TooltipInfo; | ||||
import com.vaadin.client.WidgetUtil; | |||||
import com.vaadin.client.communication.StateChangeEvent; | import com.vaadin.client.communication.StateChangeEvent; | ||||
import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler; | import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler; | ||||
import com.vaadin.client.connectors.RpcDataSourceConnector.DetailsListener; | import com.vaadin.client.connectors.RpcDataSourceConnector.DetailsListener; | ||||
getRpcProxy(GridServerRpc.class).contextClick(eventCell.getRowIndex(), | getRpcProxy(GridServerRpc.class).contextClick(eventCell.getRowIndex(), | ||||
rowKey, columnId, section, details); | rowKey, columnId, section, details); | ||||
WidgetUtil.clearTextSelection(); | |||||
} | } | ||||
/** | /** |
import com.vaadin.client.UIDL; | import com.vaadin.client.UIDL; | ||||
import com.vaadin.client.Util; | import com.vaadin.client.Util; | ||||
import com.vaadin.client.VConsole; | import com.vaadin.client.VConsole; | ||||
import com.vaadin.client.WidgetUtil; | |||||
import com.vaadin.client.annotations.OnStateChange; | import com.vaadin.client.annotations.OnStateChange; | ||||
import com.vaadin.client.communication.StateChangeEvent; | import com.vaadin.client.communication.StateChangeEvent; | ||||
import com.vaadin.client.metadata.NoDataException; | import com.vaadin.client.metadata.NoDataException; | ||||
// remove the touch handlers as well | // remove the touch handlers as well | ||||
unregisterTouchHandlers(); | unregisterTouchHandlers(); | ||||
} | } | ||||
} | } | ||||
// The default context click implementation only provides the mouse | // The default context click implementation only provides the mouse | ||||
// coordinates relative to root element of widget. | // coordinates relative to root element of widget. | ||||
getRpcProxy(ContextClickRpc.class).contextClick(details); | getRpcProxy(ContextClickRpc.class).contextClick(details); | ||||
WidgetUtil.clearTextSelection(); | |||||
} | } | ||||
/** | /** |
import com.google.gwt.user.client.ui.Widget; | import com.google.gwt.user.client.ui.Widget; | ||||
import com.vaadin.client.ApplicationConnection; | import com.vaadin.client.ApplicationConnection; | ||||
import com.vaadin.client.BrowserInfo; | import com.vaadin.client.BrowserInfo; | ||||
import com.vaadin.client.HasChildMeasurementHintConnector; | |||||
import com.vaadin.client.ComponentConnector; | import com.vaadin.client.ComponentConnector; | ||||
import com.vaadin.client.ConnectorHierarchyChangeEvent; | import com.vaadin.client.ConnectorHierarchyChangeEvent; | ||||
import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler; | import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler; | ||||
import com.vaadin.client.DirectionalManagedLayout; | import com.vaadin.client.DirectionalManagedLayout; | ||||
import com.vaadin.client.HasChildMeasurementHintConnector; | |||||
import com.vaadin.client.HasComponentsConnector; | import com.vaadin.client.HasComponentsConnector; | ||||
import com.vaadin.client.Paintable; | import com.vaadin.client.Paintable; | ||||
import com.vaadin.client.ServerConnector; | import com.vaadin.client.ServerConnector; | ||||
@Connect(com.vaadin.ui.Table.class) | @Connect(com.vaadin.ui.Table.class) | ||||
public class TableConnector extends AbstractFieldConnector implements | public class TableConnector extends AbstractFieldConnector implements | ||||
HasComponentsConnector, ConnectorHierarchyChangeHandler, Paintable, | HasComponentsConnector, ConnectorHierarchyChangeHandler, Paintable, | ||||
DirectionalManagedLayout, PostLayoutListener, HasChildMeasurementHintConnector { | |||||
DirectionalManagedLayout, PostLayoutListener, | |||||
HasChildMeasurementHintConnector { | |||||
private List<ComponentConnector> childComponents; | private List<ComponentConnector> childComponents; | ||||
getRpcProxy(TableServerRpc.class).contextClick(rowKey, colKey, section, | getRpcProxy(TableServerRpc.class).contextClick(rowKey, colKey, section, | ||||
details); | details); | ||||
WidgetUtil.clearTextSelection(); | |||||
} | } | ||||
protected VScrollTableRow getScrollTableRow(Element e) { | protected VScrollTableRow getScrollTableRow(Element e) { |
} | } | ||||
getRpcProxy(TreeServerRpc.class).contextClick(key, details); | getRpcProxy(TreeServerRpc.class).contextClick(key, details); | ||||
WidgetUtil.clearTextSelection(); | |||||
} | } | ||||
} | } |
/* | |||||
* Copyright 2000-2014 Vaadin Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not | |||||
* use this file except in compliance with the License. You may obtain a copy of | |||||
* the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |||||
* License for the specific language governing permissions and limitations under | |||||
* the License. | |||||
*/ | |||||
package com.vaadin.tests.contextclick; | |||||
import com.vaadin.annotations.Widgetset; | |||||
import com.vaadin.event.ContextClickEvent; | |||||
import com.vaadin.event.ContextClickEvent.ContextClickListener; | |||||
import com.vaadin.server.AbstractExtension; | |||||
import com.vaadin.server.VaadinRequest; | |||||
import com.vaadin.tests.components.AbstractTestUI; | |||||
import com.vaadin.tests.widgetset.TestingWidgetSet; | |||||
import com.vaadin.ui.AbstractComponent; | |||||
import com.vaadin.ui.Button; | |||||
import com.vaadin.ui.Button.ClickEvent; | |||||
import com.vaadin.ui.Notification; | |||||
import com.vaadin.ui.Panel; | |||||
import com.vaadin.ui.TextArea; | |||||
import com.vaadin.ui.VerticalLayout; | |||||
@Widgetset(TestingWidgetSet.NAME) | |||||
public class BrowserContextMenuInSubComponent extends AbstractTestUI { | |||||
@Override | |||||
protected void setup(VaadinRequest request) { | |||||
Panel panel = new Panel(); | |||||
VerticalLayout layout = new VerticalLayout(); | |||||
final TextArea textArea = new TextArea(); | |||||
// Make TextArea show regular context menu instead of firing the | |||||
// server-side event. | |||||
BrowserContextMenuExtension.extend(textArea); | |||||
final Button button = new Button("Submit", new Button.ClickListener() { | |||||
@Override | |||||
public void buttonClick(ClickEvent event) { | |||||
Notification.show(textArea.getValue()); | |||||
} | |||||
}); | |||||
layout.addComponent(textArea); | |||||
layout.addComponent(button); | |||||
panel.setContent(layout); | |||||
panel.addContextClickListener(new ContextClickListener() { | |||||
@Override | |||||
public void contextClick(ContextClickEvent event) { | |||||
button.click(); | |||||
} | |||||
}); | |||||
addComponent(panel); | |||||
} | |||||
/** | |||||
* A simple extension for making extended component stop propagation of the | |||||
* context click events, so the browser will handle the context click and | |||||
* show its own context menu. | |||||
*/ | |||||
public static class BrowserContextMenuExtension extends AbstractExtension { | |||||
private BrowserContextMenuExtension(AbstractComponent c) { | |||||
super(c); | |||||
} | |||||
public static BrowserContextMenuExtension extend(AbstractComponent c) { | |||||
return new BrowserContextMenuExtension(c); | |||||
} | |||||
} | |||||
} |
/* | |||||
* Copyright 2000-2014 Vaadin Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not | |||||
* use this file except in compliance with the License. You may obtain a copy of | |||||
* the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |||||
* License for the specific language governing permissions and limitations under | |||||
* the License. | |||||
*/ | |||||
package com.vaadin.tests.widgetset.client.extension; | |||||
import com.google.gwt.event.dom.client.ContextMenuEvent; | |||||
import com.google.gwt.event.dom.client.ContextMenuHandler; | |||||
import com.vaadin.client.ServerConnector; | |||||
import com.vaadin.client.extensions.AbstractExtensionConnector; | |||||
import com.vaadin.client.ui.AbstractComponentConnector; | |||||
import com.vaadin.shared.ui.Connect; | |||||
import com.vaadin.tests.contextclick.BrowserContextMenuInSubComponent.BrowserContextMenuExtension; | |||||
/** | |||||
* Client-side connector of the {@link BrowserContextMenuExtension}. | |||||
*/ | |||||
@Connect(BrowserContextMenuExtension.class) | |||||
public class BrowserContextMenuExtensionConnector extends | |||||
AbstractExtensionConnector { | |||||
@Override | |||||
protected void extend(ServerConnector target) { | |||||
getParent().getWidget().addDomHandler(new ContextMenuHandler() { | |||||
@Override | |||||
public void onContextMenu(ContextMenuEvent event) { | |||||
// Stop context click events from propagating. | |||||
event.stopPropagation(); | |||||
} | |||||
}, ContextMenuEvent.getType()); | |||||
} | |||||
@Override | |||||
public AbstractComponentConnector getParent() { | |||||
return (AbstractComponentConnector) super.getParent(); | |||||
} | |||||
} |