Change RichTextAreaImpl and subclasses to not be coupled to Widget/RichTextArea:
http://gwt-code-reviews.appspot.com/139801

Patch by: sven.brunken
Review by: jlabanca


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7551 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/RichTextArea.java b/user/src/com/google/gwt/user/client/ui/RichTextArea.java
index 68938ca..dd750c1 100644
--- a/user/src/com/google/gwt/user/client/ui/RichTextArea.java
+++ b/user/src/com/google/gwt/user/client/ui/RichTextArea.java
@@ -579,7 +579,7 @@
   public RichTextArea() {
     setElement(impl.getElement());
     setStyleName("gwt-RichTextArea");
-    impl.setWidget(this);
+    impl.setOwner(this);
   }
 
   public HandlerRegistration addInitializeHandler(InitializeHandler handler) {
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
index 2a31169..a25051b 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.ui.impl;
 
+import com.google.gwt.event.logical.shared.HasInitializeHandlers;
 import com.google.gwt.event.logical.shared.InitializeEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
@@ -32,7 +33,7 @@
 public class RichTextAreaImpl {
 
   protected Element elem;
-  protected RichTextArea richTextWidget;
+  protected HasInitializeHandlers owner;
 
   public RichTextAreaImpl() {
     elem = createElement();
@@ -74,12 +75,21 @@
     DOM.setElementProperty(elem, "value", html);
   }
 
+  public void setOwner(HasInitializeHandlers owner) {
+    this.owner = owner;
+  }
+
   public void setText(String text) {
     DOM.setElementProperty(elem, "value", text);
   }
 
+  /**
+   * @deprecated as of GWT 2.1, use {@link #setOwner(HasInitializeHandlers)}
+   *             instead
+   */
+  @Deprecated
   public void setWidget(RichTextArea richTextWidget) {
-    this.richTextWidget = richTextWidget;
+    setOwner(richTextWidget);
   }
 
   public void uninitElement() {
@@ -96,8 +106,8 @@
 
   protected void onElementInitialized() {
     hookEvents();
-    if (richTextWidget != null) {
-      InitializeEvent.fire(richTextWidget);
+    if (owner != null) {
+      InitializeEvent.fire(owner);
     }
   }
 }
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
index c1fa928..cce8d8f 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
@@ -93,10 +93,12 @@
 
     var handler = $entry(function() {
       if (elem.__listener) {
-        // Weird: this code has the context of the script frame, but we need the
-        // event from the edit iframe's window.
-        var evt = elem.contentWindow.event;
-        elem.__listener.@com.google.gwt.user.client.ui.Widget::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        if (@com.google.gwt.user.client.impl.DOMImpl::isMyListener(Ljava/lang/Object;)(elem.__listener)) {
+          // Weird: this code has the context of the script frame, but we need the
+          // event from the edit iframe's window.
+          var evt = elem.contentWindow.event;
+          elem.__listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        }
       }
     });
 
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java
index 7d94ad6..2aa2a68 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplSafari.java
@@ -39,7 +39,9 @@
 
     elem.__gwt_handler = function(evt) {
       if (elem.__listener) {
-        elem.__listener.@com.google.gwt.user.client.ui.Widget::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        if (@com.google.gwt.user.client.impl.DOMImpl::isMyListener(Ljava/lang/Object;)(elem.__listener)) {
+          elem.__listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        }
       }
     };
 
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
index a60d5a2..0f71706 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
@@ -306,7 +306,9 @@
 
     elem.__gwt_handler = $entry(function(evt) {
       if (elem.__listener) {
-        elem.__listener.@com.google.gwt.user.client.ui.Widget::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        if (@com.google.gwt.user.client.impl.DOMImpl::isMyListener(Ljava/lang/Object;)(elem.__listener)) {
+          elem.__listener.@com.google.gwt.user.client.EventListener::onBrowserEvent(Lcom/google/gwt/user/client/Event;)(evt);
+        }
       }
     });