// iOS & Android touch events:
private final static String TOUCHSTART = "touchstart";
private final static String TOUCHMOVE = "touchmove";
private final static String TOUCHEND = "touchend";
private final static String TOUCHCANCEL = "touchcancel";
private final static int TOUCHTIMER = 550;
private Timer touchTimer = null;
private boolean cancelClickEvent = false;
private void addTouchListeners(Element element)
{
if (TouchHandler.supportsTouch())
{
sinkEvents(Event.ONCLICK);
addEventListener(element, TOUCHSTART, this, false);
addEventListener(element, TOUCHMOVE, this, false);
addEventListener(element, TOUCHEND, this, false);
addEventListener(element, TOUCHCANCEL, this, false);
}
}
private static native void addEventListener(Element element,
String event,
EventListener
listener,
boolean capture)
/*-{
element.addEventListener(
event,
function(e)
{
listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/
google/gwt/user/client/Event;)(e);
},
capture);
}-*/;
@Override
public void onBrowserEvent(Event event)
{
String type = event.getType();
if (TOUCHSTART.equals(type))
{
TouchEvent touchEvent = event.cast();
if (touchEvent.getTouches().length() == 1)
startTouchTimer(event);
else
cancelTouchTimer();
}
else if (TOUCHMOVE.equals(type))
{
cancelTouchTimer();
}
else if (TOUCHEND.equals(type))
{
cancelTouchTimer();
}
else if (TOUCHCANCEL.equals(type))
{
cancelTouchTimer();
}
else if ("click".equals(type))
{
if (cancelClickEvent)
{
event.preventDefault();
event.stopPropagation();
}
else
{
super.onBrowserEvent(event);
}
}
}
On Mar 1, 1:48 am, Christopher <hunt...@gmail.com> wrote:
> Hi there,
>
> I've got a custom event fired by some JS code in an iframe. If I add
> an event listener to the iframe via JS then the event is captured.
> However I'm having difficulty capturing the same event within GWT;
> indeed is it possible to capture custom events in GWT?
>
> The event is constructed and fired in JS like so:
>
> var event = document.createEvent("Event");
> event.initEvent("hideWithMessage", true, true);
> event.message = "This message to be reported.";
>
> window.parent.document.getElementById("hatsPopup").dispatchEvent(event);
>
> (executes within an iframe hence the window.parent.document business).
>
> Here's how I attach my handler:
>
> frame.addDomHandler(new HideWithMessageHandler() {
> @Override
> public void onHideWithMessage(String message) {
> Window.alert("Yippee! " + message);
> }
>
> }, HideWithMessageEvent.getType());
>
> The event is defined as:
>
> public class HideWithMessageEvent extends
> DomEvent<HideWithMessageHandler> {
>
> private static final Type<HideWithMessageHandler> TYPE = new
> Type<HideWithMessageHandler>(
> "hideWithMessage", new HideWithMessageEvent());
>
> public static Type<HideWithMessageHandler> getType() {
> return TYPE;
> }
>
> @Override
> public Type<HideWithMessageHandler> getAssociatedType() {
> return TYPE;
> }
>
> @Override
> protected void dispatch(HideWithMessageHandler handler) {
> handler.onHideWithMessage(null);
> }
>
> }
>
> ...and the handler:
>
> public interface HideWithMessageHandler extends EventHandler {
> void onHideWithMessage(String message);
>
> }
>
> Incidentally if I try the same sort of thing using a clickEvent then
> all is well i.e. I'm able to fire a click event at the iframe from JS
> and capture it in GWT. The difficulty is with custom events.
>
> Help and guidance very much appreciated.
>
> Kind regards,
> Christopher
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment