Here's one way to support arbitrary events:

    // 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)
              {
 
[email protected]::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 <[email protected]> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to