]> source.dussan.org Git - gwtquery.git/commitdiff
call RootPanel.detachOnWindowClose only when the widget is not in another widget...
authorManolo Carrasco <manolo@apache.org>
Wed, 9 Mar 2011 18:47:12 +0000 (18:47 +0000)
committerManolo Carrasco <manolo@apache.org>
Wed, 9 Mar 2011 18:47:12 +0000 (18:47 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/main/java/com/google/gwt/user/client/ui/GqUi.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java

index 86623df4a10615863fc11168d4d82cf78e53ed42..542bfd96ad2676a18381965781e3b7d106ccaeca 100644 (file)
@@ -26,7 +26,6 @@ import com.google.gwt.dom.client.BodyElement;
 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
@@ -377,7 +376,6 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    */\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
@@ -386,15 +384,13 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
       // 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
@@ -1072,13 +1068,10 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
         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
index 15755f83b5d0600a554e823f0dabd77617c63a03..be5699a692d5091377a88d7415521fe0cfb2ef88 100644 (file)
@@ -1,16 +1,37 @@
 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();
     }
   }
   
index 21a278a4ad50e7e347881ee1ab12296a72eed747..75addc888e236c20355b1b1a9e9dd468598cd63a 100644 (file)
@@ -885,11 +885,12 @@ public class GQueryCoreTest extends GWTTestCase {
     $("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());
     
   }