src/macosx/classes/sun/lwawt/LWComponentPeer.java

Print this page

        

@@ -983,11 +983,17 @@
     }
 
     // DropTargetPeer Method
     @Override
     public void addDropTarget(DropTarget dt) {
-        synchronized (dropTargetLock){
+        LWWindowPeer winPeer = getWindowPeerOrSelf();
+        if (winPeer != null && winPeer != this) {
+            // We need to register the DropTarget in the
+            // peer of the window ancestor of the component
+            winPeer.addDropTarget(dt);
+        } else {
+            synchronized (dropTargetLock) {
             // 10-14-02 VL: Windows WComponentPeer would add (or remove) the drop target only
             // if it's the first (or last) one for the component. Otherwise this call is a no-op.
             if (++fNumDropTargets == 1) {
                 // Having a non-null drop target would be an error but let's check just in case:
                 if (fDropTarget != null)

@@ -996,14 +1002,21 @@
                 // Create a new drop target:
                 fDropTarget = CDropTarget.createDropTarget(dt, target, this);
             }
         }
     }
+    }
 
     // DropTargetPeer Method
     @Override
     public void removeDropTarget(DropTarget dt) {
+        LWWindowPeer winPeer = getWindowPeerOrSelf();
+        if (winPeer != null && winPeer != this) {
+            // We need to unregister the DropTarget in the
+            // peer of the window ancestor of the component
+            winPeer.removeDropTarget(dt);
+        } else {
         synchronized (dropTargetLock){
             // 10-14-02 VL: Windows WComponentPeer would add (or remove) the drop target only
             // if it's the first (or last) one for the component. Otherwise this call is a no-op.
             if (--fNumDropTargets == 0) {
                 // Having a null drop target would be an error but let's check just in case:

@@ -1014,10 +1027,11 @@
                 } else
                     System.err.println("CComponent.removeDropTarget(): current drop target is null.");
             }
         }
     }
+    }
 
     // ---- PEER NOTIFICATIONS ---- //
 
     /**
      * Called when this peer's location has been changed either as a result