2727 */
2828package java .awt ;
2929
30+ import java .awt .Container .DropTargetEventTargetFilter ;
31+ import java .awt .dnd .DropTarget ;
3032import java .awt .event .AWTEventListener ;
3133import java .awt .event .ComponentEvent ;
3234import java .awt .event .ContainerEvent ;
4951import javajs .util .Lst ;
5052import sun .awt .AppContext ;
5153import sun .awt .SunGraphicsCallback ;
54+ import sun .awt .dnd .SunDropTargetEvent ;
5255import swingjs .JSFrameViewer ;
5356import swingjs .JSMouse ;
5457
@@ -2268,14 +2271,14 @@ void dispatchEventImpl(AWTEvent e) {
22682271 }
22692272 }
22702273
2271- // /**
2272- // * Fetches the top-most (deepest) component to receive SunDropTargetEvents.
2273- // */
2274- // Component getDropTargetEventTarget(int x, int y, boolean includeSelf) {
2275- // return getMouseEventTarget(x, y, includeSelf,
2276- // DropTargetEventTargetFilter.FILTER,
2277- // SEARCH_HEAVYWEIGHTS);
2278- // }
2274+ /**
2275+ * Fetches the top-most (deepest) component to receive SunDropTargetEvents.
2276+ */
2277+ Component getDropTargetEventTarget (int x , int y , boolean includeSelf ) {
2278+ return getMouseEventTarget (x , y , includeSelf ,
2279+ DropTargetEventTargetFilter .FILTER ,
2280+ SEARCH_HEAVYWEIGHTS );
2281+ }
22792282
22802283
22812284 /*
@@ -2435,17 +2438,17 @@ public boolean accept(final Component comp) {
24352438 }
24362439 }
24372440
2438- // static class DropTargetEventTargetFilter implements EventTargetFilter {
2439- // static final EventTargetFilter FILTER = new DropTargetEventTargetFilter();
2440- //
2441- // private DropTargetEventTargetFilter() {}
2442- //
2443- // public boolean accept(final Component comp) {
2444- //// DropTarget dt = comp.getDropTarget();
2445- //// return dt != null && dt.isActive();
2446- // }
2447- // }
2448- //
2441+ static class DropTargetEventTargetFilter implements EventTargetFilter {
2442+ static final EventTargetFilter FILTER = new DropTargetEventTargetFilter ();
2443+
2444+ private DropTargetEventTargetFilter () {}
2445+
2446+ public boolean accept (final Component comp ) {
2447+ DropTarget dt = comp .getDropTarget ();
2448+ return dt != null && dt .isActive ();
2449+ }
2450+ }
2451+
24492452 /**
24502453 * This is called by lightweight components that want the containing
24512454 * windowed parent to enable some kind of events on their behalf.
@@ -4283,12 +4286,13 @@ boolean dispatchEvent(AWTEvent e) {
42834286 * Dispatch SunDropTargetEvents regardless of eventMask value.
42844287 * Do not update cursor on dispatching SunDropTargetEvents.
42854288 */
4286- // if (e instanceof SunDropTargetEvent) {
4287- //
4288- // SunDropTargetEvent sdde = (SunDropTargetEvent) e;
4289- // ret = processDropTargetEvent(sdde);
4290- //
4291- // } else {
4289+
4290+ if (e instanceof swingjs .JSDnD .JSDropMouseEvent ) {
4291+
4292+ SunDropTargetEvent sdde = (SunDropTargetEvent ) e ;
4293+ ret = processDropTargetEvent (sdde );
4294+
4295+ } else {
42924296 if (e instanceof MouseEvent && (eventMask & MOUSE_MASK ) != 0 ) {
42934297 MouseEvent me = (MouseEvent ) e ;
42944298 ret = processMouseEvent (me );
@@ -4297,7 +4301,7 @@ boolean dispatchEvent(AWTEvent e) {
42974301// if (e.getID() == MouseEvent.MOUSE_MOVED) {
42984302// nativeContainer.updateCursorImmediately();
42994303// }
4300- // }
4304+ }
43014305
43024306 return ret ;
43034307 }
@@ -4426,47 +4430,47 @@ else if (!isMouseGrab(e) && id != MouseEvent.MOUSE_CLICKED) {
44264430 return e .isConsumed ();
44274431 }
44284432
4429- // private boolean processDropTargetEvent(SunDropTargetEvent e) {
4430- // int id = e.getID();
4431- // int x = e.getX();
4432- // int y = e.getY();
4433- //
4434- // /*
4435- // * Fix for BugTraq ID 4395290.
4436- // * It is possible that SunDropTargetEvent's Point is outside of the
4437- // * native container bounds. In this case we truncate coordinates.
4438- // */
4439- // if (!nativeContainer.contains(x, y)) {
4440- // final Dimension d = nativeContainer.getSize();
4441- // if (d.width <= x) {
4442- // x = d.width - 1;
4443- // } else if (x < 0) {
4444- // x = 0;
4445- // }
4446- // if (d.height <= y) {
4447- // y = d.height - 1;
4448- // } else if (y < 0) {
4449- // y = 0;
4450- // }
4451- // }
4452- // Component mouseOver = // not necessarily sensitive to mouse events
4453- // nativeContainer.getDropTargetEventTarget(x, y,
4454- // Container.INCLUDE_SELF);
4455- // trackMouseEnterExit(mouseOver, e);
4456- //
4457- // if (mouseOver != nativeContainer && mouseOver != null) {
4458- // switch (id) {
4459- // case SunDropTargetEvent.MOUSE_ENTERED:
4460- // case SunDropTargetEvent.MOUSE_EXITED:
4461- // break;
4462- // default:
4463- // retargetMouseEvent(mouseOver, id, e);
4464- // e.consume();
4465- // break;
4466- // }
4467- // }
4468- // return e.isConsumed();
4469- // }
4433+ private boolean processDropTargetEvent (SunDropTargetEvent e ) {
4434+ int id = e .getID ();
4435+ int x = e .getX ();
4436+ int y = e .getY ();
4437+
4438+ /*
4439+ * Fix for BugTraq ID 4395290.
4440+ * It is possible that SunDropTargetEvent's Point is outside of the
4441+ * native container bounds. In this case we truncate coordinates.
4442+ */
4443+ if (!nativeContainer .contains (x , y )) {
4444+ final Dimension d = nativeContainer .getSize ();
4445+ if (d .width <= x ) {
4446+ x = d .width - 1 ;
4447+ } else if (x < 0 ) {
4448+ x = 0 ;
4449+ }
4450+ if (d .height <= y ) {
4451+ y = d .height - 1 ;
4452+ } else if (y < 0 ) {
4453+ y = 0 ;
4454+ }
4455+ }
4456+ Component mouseOver = // not necessarily sensitive to mouse events
4457+ nativeContainer .getDropTargetEventTarget (x , y ,
4458+ Container .INCLUDE_SELF );
4459+ trackMouseEnterExit (mouseOver , e );
4460+
4461+ if (mouseOver != nativeContainer && mouseOver != null ) {
4462+ switch (id ) {
4463+ case SunDropTargetEvent .MOUSE_ENTERED :
4464+ case SunDropTargetEvent .MOUSE_EXITED :
4465+ break ;
4466+ default :
4467+ retargetMouseEvent (mouseOver , id , e );
4468+ e .consume ();
4469+ break ;
4470+ }
4471+ }
4472+ return e .isConsumed ();
4473+ }
44704474
44714475 public void checkInternalFrameMouseDown (JSComponent c ) {
44724476 JSFrameViewer fv = c .getFrameViewer ();
@@ -4696,15 +4700,12 @@ void retargetMouseEvent(Component target, int id, MouseEvent e) {
46964700 }
46974701 MouseEvent retargeted ;
46984702 if (component != null ) {
4699- // if (e instanceof SunDropTargetEvent) {
4700- // retargeted = new SunDropTargetEvent(target,
4701- // id,
4702- // x,
4703- // y,
4704- // ((SunDropTargetEvent)e).getDispatcher());
4705- // } else
4706- //
4707- if (id == MouseEvent .MOUSE_WHEEL ) {
4703+ if (e instanceof swingjs .JSDnD .JSDropMouseEvent ) {
4704+ retargeted = new swingjs .JSDnD .JSDropMouseEvent (target ,
4705+ id ,
4706+ x ,
4707+ y );
4708+ } else if (id == MouseEvent .MOUSE_WHEEL ) {
47084709 retargeted = new MouseWheelEvent (target ,
47094710 id ,
47104711 e .getWhen (),
0 commit comments