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); + } } });