/* @VaadinApache2LicenseForJavaFiles@ */ package com.vaadin.terminal.gwt.client; import static com.vaadin.terminal.gwt.client.EventId.BLUR; import static com.vaadin.terminal.gwt.client.EventId.FOCUS; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.HasBlurHandlers; import com.google.gwt.event.dom.client.HasFocusHandlers; import com.google.gwt.event.shared.HandlerRegistration; /** * Helper class for attaching/detaching handlers for Vaadin client side * components, based on identifiers in UIDL. Helpers expect Paintables to be * both listeners and sources for events. This helper cannot be used for more * complex widgets. *
* Possible current registration is given as parameter. The returned * registration (possibly the same as given, should be store for next update. *
* Pseudocode what helpers do: * *
* * if paintable has event listener in UIDL * if registration is null * register paintable as as handler for event * return the registration * else * if registration is not null * remove the handler from paintable * return null * * ** */ public class EventHelper { public static HandlerRegistration updateFocusHandler(Paintable paintable, ApplicationConnection client, HandlerRegistration handlerRegistration) { if (client.hasEventListeners(paintable, FOCUS)) { if (handlerRegistration == null) { handlerRegistration = ((HasFocusHandlers) paintable) .addFocusHandler((FocusHandler) paintable); } return handlerRegistration; } else if (handlerRegistration != null) { handlerRegistration.removeHandler(); handlerRegistration = null; } return null; } public static HandlerRegistration updateBlurHandler(Paintable paintable, ApplicationConnection client, HandlerRegistration handlerRegistration) { if (client.hasEventListeners(paintable, BLUR)) { if (handlerRegistration == null) { handlerRegistration = ((HasBlurHandlers) paintable) .addBlurHandler((BlurHandler) paintable); } return handlerRegistration; } else if (handlerRegistration != null) { handlerRegistration.removeHandler(); handlerRegistration = null; } return null; } }