Author: [EMAIL PROTECTED]
Date: Thu Nov  6 13:26:13 2008
New Revision: 3970

Modified:
     
branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java

Log:
Revised DomEvent.

Modified:  
branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java
==============================================================================
---  
branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java
         
(original)
+++  
branches/1_6_clean_events/user/src/com/google/gwt/event/dom/client/DomEvent.java
         
Thu Nov  6 13:26:13 2008
@@ -16,8 +16,8 @@
  package com.google.gwt.event.dom.client;

  import com.google.gwt.core.client.impl.PrivateMap;
-import com.google.gwt.event.shared.GwtEvent;
  import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.GwtEvent;
  import com.google.gwt.event.shared.HandlerManager;
  import com.google.gwt.user.client.Event;

@@ -32,54 +32,55 @@
   */
  public abstract class DomEvent<H extends EventHandler> extends GwtEvent<H>  
{
    /**
-   * Type class used by dom event subclasses.
+   * Type class used by dom event subclasses. Type is specialized for dom  
in
+   * order to carry information about the native event.
     *
-   * @param <HandlerType> handler type
+   * @param <H> handler type
     */
-  public static class Type<HandlerType extends EventHandler> extends
-      GwtEvent.Type<HandlerType> {
-    private final int nativeEventTypeInt;
-    private DomEvent<HandlerType> cached;
+  public static class Type<H extends EventHandler> extends  
GwtEvent.Type<H> {
+    private final int eventToSink;
+    private DomEvent<H> flyweight;

      /**
       * Constructor.
       *
-     * @param nativeEventTypeInt the native event type
+     * @param eventToSink the native event type to sink
+     *
       */
-    public Type(int nativeEventTypeInt) {
-      this.nativeEventTypeInt = nativeEventTypeInt;
+    public Type(int eventToSink) {
+      this.eventToSink = eventToSink;
      }

      /**
-     * This is a highly dangerous method that allows dom event types to be
-     * triggered by the [EMAIL PROTECTED] DomEvent#fireNativeEvent(Event,  
HandlerManager)}
-     * method. It should only be used by implementors supporting new dom  
events.
+     * This constructor allows dom event types to be triggered by the
+     * [EMAIL PROTECTED] DomEvent#fireNativeEvent(Event, HandlerManager)} 
method. It  
should
+     * only be used by implementors supporting new dom events.
       * <p>
       * Any such dom event type must act as a flyweight around a native  
event
       * object.
       * </p>
       *
       *
-     * @param nativeEventTypeInt the integer value used by sink events to  
set up
-     *          event handling for this dom type
-     * @param eventName the raw js event name
-     * @param cached the cached object instance that will be used as a  
flyweight
+     * @param eventToSink the integer value used by sink events to set up  
event
+     *          handling for this dom type
+     * @param eventName the raw native event name
+     * @param flyweight the instance that will be used as a flyweight
       *          to wrap a native event
       */
-    protected Type(int nativeEventTypeInt, String eventName,
-        DomEvent<HandlerType> cached) {
-      this.cached = cached;
-      // All clinit activity should take place here for DomEvent.
-      this.nativeEventTypeInt = nativeEventTypeInt;
+    protected Type(int eventToSink, String eventName, DomEvent<H>  
flyweight) {
+      this.flyweight = flyweight;
+      this.eventToSink = eventToSink;
+
+      // Until we have eager clinits implemented, we are manually  
initializing
+      // DomEvent here.
        if (registered == null) {
          init();
        }
        registered.unsafePut(eventName, this);
-      reverseRegistered.unsafePut(nativeEventTypeInt + "", this);
+      reverseRegistered.put(eventToSink, this);
      }

-    Type(int nativeEventTypeInt, String[] eventNames,
-        DomEvent<HandlerType> cached) {
+    Type(int nativeEventTypeInt, String[] eventNames, DomEvent<H> cached) {
        this(nativeEventTypeInt, eventNames[0], cached);
        for (int i = 1; i < eventNames.length; i++) {
          registered.unsafePut(eventNames[i], this);
@@ -87,13 +88,15 @@
      }

      /**
-     * Gets the native [EMAIL PROTECTED] Event} type integer corresponding to 
the  
native
-     * event.
+     * Gets the integer defined by the native [EMAIL PROTECTED] Event} type 
needed to  
hook
+     * up event handling when the user calls
+     * [EMAIL PROTECTED]  
com.google.gwt.user.client.DOM#sinkEvents(com.google.gwt.user.client.Element,  
int)}
+     * .
       *
       * @return the native event type
       */
-    public int getNativeEventTypeInt() {
-      return nativeEventTypeInt;
+    public int getEventToSink() {
+      return eventToSink;
      }
    }

@@ -102,22 +105,20 @@
    private static PrivateMap<Type<?>> reverseRegistered;

    /**
-   * Fires the given native event on the manager.
+   * Fires the given native event on the specified handlers.
     *
     * @param nativeEvent the native event
-   * @param manager the event manager
+   * @param handlers the event manager containing the handlers to fire
     */
-  public static void fireNativeEvent(Event nativeEvent, HandlerManager  
manager) {
+  public static void fireNativeEvent(Event nativeEvent, HandlerManager  
handlers) {
      final DomEvent.Type<?> typeKey =  
registered.unsafeGet(nativeEvent.getType());
-    if (typeKey != null) {
-      if (manager != null) {
-        // Store and restore native event just in case we are in recursive
-        // loop.
-        Event currentNative = typeKey.cached.nativeEvent;
-        typeKey.cached.setNativeEvent(nativeEvent);
-        manager.fireEvent(typeKey.cached);
-        typeKey.cached.setNativeEvent(currentNative);
-      }
+    if (typeKey != null && handlers != null) {
+      // Store and restore native event just in case we are in recursive
+      // loop.
+      Event currentNative = typeKey.flyweight.nativeEvent;
+      typeKey.flyweight.setNativeEvent(nativeEvent);
+      handlers.fireEvent(typeKey.flyweight);
+      typeKey.flyweight.setNativeEvent(currentNative);
      }
    }

@@ -139,20 +140,18 @@
    public static void unsafeFireNativeEvent(int eventType,
        HandlerManager handlers) {
      if (registered != null) {
-      final DomEvent.Type<?> typeKey =  
reverseRegistered.unsafeGet(eventType + "");
-      if (typeKey != null) {
-        if (handlers != null) {
-          // Store and restore native event just in case we are in  
recursive
-          // loop.
-          Event currentNative = null;
-          if (typeKey.cached.isLive()) {
-            currentNative = typeKey.cached.nativeEvent;
-          }
-          typeKey.cached.setNativeEvent(null);
-          handlers.fireEvent(typeKey.cached);
-          if (currentNative != null) {
-            typeKey.cached.setNativeEvent(currentNative);
-          }
+      final DomEvent.Type<?> typeKey = reverseRegistered.get(eventType);
+      if (typeKey != null && handlers != null) {
+        // Store and restore native event just in case we are in recursive
+        // loop.
+        Event currentNative = null;
+        if (typeKey.flyweight.isLive()) {
+          currentNative = typeKey.flyweight.nativeEvent;
+        }
+        typeKey.flyweight.setNativeEvent(null);
+        handlers.fireEvent(typeKey.flyweight);
+        if (currentNative != null) {
+          typeKey.flyweight.setNativeEvent(currentNative);
          }
        }
      }
@@ -162,7 +161,6 @@
    static void init() {
      registered = new PrivateMap<Type<?>>();
      reverseRegistered = new PrivateMap<Type<?>>();
-    // At the cost of a bit extra constanct
    }

    private Event nativeEvent;

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to