Add mouse position information to ClickEvent and DoubleClickEvent. Manually verified that this
information is indeed available on some older and some more modern browsers, sampling Mac/Linux/Win
where possible:
- Chrome 5, Chrome 6
- FF 2.0.0.20, FF 3.0.19, FF 3.6.3
- Opera 10.60
- Safari 3.2.2, Safari 5.0.1
- IE6, IE7.

Also, a few relevent classes now implement HasDoubleClickHandlers
- com/google/gwt/user/client/ui/FocusPanel.java
- com/google/gwt/user/client/ui/FocusWidget.java
- com/google/gwt/user/client/ui/HTMLTable.java
- com/google/gwt/user/client/ui/Hyperlink.java
- com/google/gwt/user/client/ui/Image.java
- com/google/gwt/user/client/ui/Label.java
- com/google/gwt/user/client/ui/TabBar.java

Review at http://gwt-code-reviews.appspot.com/763801

Review by: jgw@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8542 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/event/dom/client/ClickEvent.java b/user/src/com/google/gwt/event/dom/client/ClickEvent.java
index 63e17c2..d0da72b 100644
--- a/user/src/com/google/gwt/event/dom/client/ClickEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ClickEvent.java
@@ -18,7 +18,7 @@
 /**
  * Represents a native click event.
  */
-public class ClickEvent extends DomEvent<ClickHandler> {
+public class ClickEvent extends MouseEvent<ClickHandler> {
 
   /**
    * Event type for click events. Represents the meta-data associated with this
diff --git a/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java b/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
index 258cb68..0a042fc 100644
--- a/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
@@ -18,7 +18,7 @@
 /**
  * Represents a native double click event.
  */
-public class DoubleClickEvent extends DomEvent<DoubleClickHandler> {
+public class DoubleClickEvent extends MouseEvent<DoubleClickHandler> {
 
   /**
    * Event type for double click events. Represents the meta-data associated
diff --git a/user/src/com/google/gwt/user/client/ui/FocusPanel.java b/user/src/com/google/gwt/user/client/ui/FocusPanel.java
index 80ca488..f0a2c84 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusPanel.java
@@ -19,12 +19,15 @@
 import com.google.gwt.event.dom.client.BlurHandler;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.dom.client.HasAllFocusHandlers;
 import com.google.gwt.event.dom.client.HasAllKeyHandlers;
 import com.google.gwt.event.dom.client.HasAllMouseHandlers;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.dom.client.KeyDownEvent;
 import com.google.gwt.event.dom.client.KeyDownHandler;
 import com.google.gwt.event.dom.client.KeyPressEvent;
@@ -53,8 +56,8 @@
 @SuppressWarnings("deprecation")
 public class FocusPanel extends SimplePanel implements HasFocus,
     SourcesClickEvents, SourcesMouseEvents, SourcesMouseWheelEvents,
-    HasAllMouseHandlers, HasClickHandlers, HasAllKeyHandlers,
-    HasAllFocusHandlers {
+    HasAllMouseHandlers, HasClickHandlers, HasDoubleClickHandlers,
+    HasAllKeyHandlers, HasAllFocusHandlers {
 
   static final FocusImpl impl = FocusImpl.getFocusImplForPanel();
 
@@ -83,6 +86,10 @@
     ListenerWrapper.WrappedClickListener.add(this, listener);
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addDomHandler(handler, DoubleClickEvent.getType());
+  }
+
   public HandlerRegistration addFocusHandler(FocusHandler handler) {
     return addDomHandler(handler, FocusEvent.getType());
   }
diff --git a/user/src/com/google/gwt/user/client/ui/FocusWidget.java b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
index 3ed68e9..12bc85d 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusWidget.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
@@ -20,12 +20,15 @@
 import com.google.gwt.event.dom.client.BlurHandler;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.dom.client.HasAllFocusHandlers;
 import com.google.gwt.event.dom.client.HasAllKeyHandlers;
 import com.google.gwt.event.dom.client.HasAllMouseHandlers;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.dom.client.KeyDownEvent;
 import com.google.gwt.event.dom.client.KeyDownHandler;
 import com.google.gwt.event.dom.client.KeyPressEvent;
@@ -53,8 +56,8 @@
  */
 @SuppressWarnings("deprecation")
 public abstract class FocusWidget extends Widget implements SourcesClickEvents,
-    HasClickHandlers, HasFocus, HasAllFocusHandlers, HasAllKeyHandlers,
-    HasAllMouseHandlers, SourcesMouseEvents {
+    HasClickHandlers, HasDoubleClickHandlers, HasFocus, HasAllFocusHandlers,
+    HasAllKeyHandlers, HasAllMouseHandlers, SourcesMouseEvents {
 
   private static final FocusImpl impl = FocusImpl.getFocusImplForWidget();
 
@@ -99,6 +102,10 @@
     ListenerWrapper.WrappedClickListener.add(this, listener);
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addHandler(handler, DoubleClickEvent.getType());
+  }
+
   public HandlerRegistration addFocusHandler(FocusHandler handler) {
     return addDomHandler(handler, FocusEvent.getType());
   }
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index 0199cff..0c366dd 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -20,7 +20,10 @@
 import com.google.gwt.dom.client.TableRowElement;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
@@ -43,7 +46,7 @@
  */
 @SuppressWarnings("deprecation")
 public abstract class HTMLTable extends Panel implements SourcesTableEvents,
-    HasClickHandlers {
+    HasClickHandlers, HasDoubleClickHandlers {
 
   /**
    * Return value for {@link HTMLTable#getCellForEvent}.
@@ -721,6 +724,10 @@
     return addDomHandler(handler, ClickEvent.getType());
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addHandler(handler, DoubleClickEvent.getType());
+  }
+
   /**
    * Adds a listener to the current table.
    * 
diff --git a/user/src/com/google/gwt/user/client/ui/Hyperlink.java b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
index 4e72200..9a322d6 100644
--- a/user/src/com/google/gwt/user/client/ui/Hyperlink.java
+++ b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
@@ -18,7 +18,10 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
@@ -60,7 +63,7 @@
  */
 @SuppressWarnings("deprecation")
 public class Hyperlink extends Widget implements HasHTML, SourcesClickEvents,
-    HasClickHandlers {
+    HasClickHandlers, HasDoubleClickHandlers {
 
   private static HyperlinkImpl impl = GWT.create(HyperlinkImpl.class);
   
@@ -138,6 +141,10 @@
     ListenerWrapper.WrappedClickListener.add(this, listener);
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addHandler(handler, DoubleClickEvent.getType());
+  }
+
   public String getHTML() {
     return DOM.getInnerHTML(anchorElem);
   }
diff --git a/user/src/com/google/gwt/user/client/ui/Image.java b/user/src/com/google/gwt/user/client/ui/Image.java
index 8d85c76..a4343e5 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -22,10 +22,13 @@
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.ErrorEvent;
 import com.google.gwt.event.dom.client.ErrorHandler;
 import com.google.gwt.event.dom.client.HasAllMouseHandlers;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.dom.client.HasErrorHandlers;
 import com.google.gwt.event.dom.client.HasLoadHandlers;
 import com.google.gwt.event.dom.client.LoadEvent;
@@ -89,9 +92,9 @@
  * </p>
  */
 @SuppressWarnings("deprecation")
-public class Image extends Widget implements SourcesLoadEvents,
-    HasLoadHandlers, HasErrorHandlers, SourcesClickEvents, HasClickHandlers,
-    HasAllMouseHandlers, SourcesMouseEvents {
+public class Image extends Widget implements SourcesLoadEvents, HasLoadHandlers,
+    HasErrorHandlers, SourcesClickEvents, HasClickHandlers,
+    HasDoubleClickHandlers, HasAllMouseHandlers, SourcesMouseEvents {
 
   /**
    * The attribute that is set when an image fires a native load or error event
@@ -474,6 +477,10 @@
     ListenerWrapper.WrappedClickListener.add(this, listener);
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addHandler(handler, DoubleClickEvent.getType());
+  }
+
   public HandlerRegistration addErrorHandler(ErrorHandler handler) {
     return addHandler(handler, ErrorEvent.getType());
   }
diff --git a/user/src/com/google/gwt/user/client/ui/Label.java b/user/src/com/google/gwt/user/client/ui/Label.java
index c9e46a8..c9b2f1b 100644
--- a/user/src/com/google/gwt/user/client/ui/Label.java
+++ b/user/src/com/google/gwt/user/client/ui/Label.java
@@ -19,8 +19,11 @@
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.DoubleClickEvent;
+import com.google.gwt.event.dom.client.DoubleClickHandler;
 import com.google.gwt.event.dom.client.HasAllMouseHandlers;
 import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
 import com.google.gwt.event.dom.client.MouseDownEvent;
 import com.google.gwt.event.dom.client.MouseDownHandler;
 import com.google.gwt.event.dom.client.MouseMoveEvent;
@@ -59,8 +62,9 @@
  */
 @SuppressWarnings("deprecation")
 public class Label extends Widget implements HasText, HasWordWrap, HasDirection,
-    HasClickHandlers, SourcesClickEvents, SourcesMouseEvents,
-    HasAllMouseHandlers, HasDirectionEstimator, HasAutoHorizontalAlignment {
+    HasClickHandlers, HasDoubleClickHandlers, SourcesClickEvents,
+    SourcesMouseEvents, HasAllMouseHandlers, HasDirectionEstimator,
+    HasAutoHorizontalAlignment {
 
   /**
    * Creates a Label widget that wraps an existing &lt;div&gt; or &lt;span&gt;
@@ -211,6 +215,10 @@
     ListenerWrapper.WrappedClickListener.add(this, listener);
   }
 
+  public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) {
+    return addHandler(handler, DoubleClickEvent.getType());
+  }
+
   public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
     return addDomHandler(handler, MouseDownEvent.getType());
   }