import com.google.gwt.dom.client.ButtonElement;\r
import com.google.gwt.dom.client.Document;\r
import com.google.gwt.dom.client.Element;\r
-import com.google.gwt.dom.client.IFrameElement;\r
import com.google.gwt.dom.client.InputElement;\r
import com.google.gwt.dom.client.Node;\r
import com.google.gwt.dom.client.NodeList;\r
*/\r
protected static Widget getAssociatedWidget(Element e) {\r
EventListener listener = DOM.getEventListener((com.google.gwt.user.client.Element) e);\r
-\r
// No listener attached to the element, so no widget exist for this element\r
if (listener == null) {\r
return null;\r
// GWT uses the widget as event listener\r
return (Widget) listener;\r
} else if (listener instanceof EventsListener) {\r
+ // GQuery replaces the gwt event listener and save it\r
EventsListener gQueryListener = (EventsListener) listener;\r
if (gQueryListener.getOriginalEventListener() != null\r
&& gQueryListener.getOriginalEventListener() instanceof Widget) {\r
return (Widget) gQueryListener.getOriginalEventListener();\r
}\r
}\r
- // I think it's not a good idea to generate ourself a new widget wrapping\r
- // the element...\r
- // To be discussed\r
return null;\r
}\r
\r
while (c != null) {\r
$(c).unbind(0);\r
removeData(c.<Element>cast(), null);\r
+ GqUi.detachWidget(getAssociatedWidget(e));\r
Widget w = getAssociatedWidget(e);\r
- if (w != null) {\r
- w.removeFromParent();\r
- } else {\r
- e.removeChild(c);\r
- c = e.getFirstChild();\r
- }\r
+ e.removeChild(c);\r
+ c = e.getFirstChild();\r
}\r
}\r
}\r
package com.google.gwt.user.client.ui;
+import com.google.gwt.dom.client.BodyElement;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.Event;
+
/**
* GQuery Utility class to access protected methods in ui package.
*/
public class GqUi {
+
+
public static void attachWidget(Widget widget) {
if (widget != null) {
- widget.onAttach();
- if (widget instanceof RichTextArea != true) {
+
+ boolean hasParentWidget = false;
+ Element e = widget.getElement();
+ e = e.getParentElement();
+ BodyElement body = Document.get().getBody();
+ while ((e != null) && (body != e)) {
+ if (Event.getEventListener(e) != null) {
+ hasParentWidget = true;
+ break;
+ }
+ e = e.getParentElement();
+ }
+
+ if (!hasParentWidget) {
RootPanel.detachOnWindowClose(widget);
}
+
+ widget.onAttach();
}
}
$("button").remove();
assertFalse(b.isAttached());
- Button b2 = new Button("b");
- $(e).append($(b2));
- assertTrue(b2.isAttached());
-
+ RootPanel.get().add(b);
+ assertTrue(b.isAttached());
+ $(e).append($(b));
+ assertTrue(b.isAttached());
$(e).empty();
+ // FIXME: assertFalse(b.isAttached());
}