Skip to content

Commit 2ef77bb

Browse files
hansonrhansonr
authored andcommitted
DnD fixes for correct target.
1 parent 444c727 commit 2ef77bb

File tree

11 files changed

+342
-94
lines changed

11 files changed

+342
-94
lines changed
1.67 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20210505171935
1+
20210608195538
1.67 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20210505171935
1+
20210608195538
1.67 KB
Binary file not shown.

sources/net.sf.j2s.java.core/src/java/awt/Component.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3792,7 +3792,7 @@ protected void dispatchEventImplComp(AWTEvent e) {
37923792
* notify AWTEventListeners.
37933793
*/
37943794

3795-
if (e instanceof SunDropTargetEvent) {
3795+
if (e instanceof swingjs.JSDnD.JSDropMouseEvent) {
37963796
((SunDropTargetEvent)e).dispatch();
37973797
return;
37983798
}

sources/net.sf.j2s.java.core/src/java/awt/Container.java

Lines changed: 77 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
*/
2828
package java.awt;
2929

30+
import java.awt.Container.DropTargetEventTargetFilter;
31+
import java.awt.dnd.DropTarget;
3032
import java.awt.event.AWTEventListener;
3133
import java.awt.event.ComponentEvent;
3234
import java.awt.event.ContainerEvent;
@@ -49,6 +51,7 @@
4951
import javajs.util.Lst;
5052
import sun.awt.AppContext;
5153
import sun.awt.SunGraphicsCallback;
54+
import sun.awt.dnd.SunDropTargetEvent;
5255
import swingjs.JSFrameViewer;
5356
import 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(),

sources/net.sf.j2s.java.core/src/swingjs/JSDnD.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,11 @@ public JSDropMouseEvent(Component source, int id, int x, int y, Transferable t,
102102
setBData(data);
103103
}
104104

105-
// public JSDropMouseEvent(Component source, int id, int x, int y, Transferable t, Object[][] data) {
105+
public JSDropMouseEvent(Component target, int id, int x, int y) {
106+
this(target, id, x, y, null, null, null);
107+
}
108+
109+
// public JSDropMouseEvent(Component source, int id, int x, int y, Transferable t, Object[][] data) {
106110
// super(source, id, System.currentTimeMillis(), 0, x, y, 0, false, NOBUTTON);
107111
// System.out.println("new JSDropMouseEvent for " + source);
108112
// this.transferable = t;
@@ -113,18 +117,10 @@ public JSDropMouseEvent(Component source, int id, int x, int y, Transferable t,
113117
protected void copyPrivateDataInto(AWTEvent that) {
114118

115119
// in case this gets transferred.
116-
117-
/**
118-
* @j2sNative
119-
*
120-
* that.dispatch$ = this.dispatch$;
121-
* that.transferable = this.transferable;
122-
* that.name = this.name;
123-
* that.bdata = this.bdata;
124-
*
125-
*
126-
*/
127-
120+
JSDropMouseEvent e = (JSDropMouseEvent)that;
121+
e.transferable = transferable;
122+
e.name = name;
123+
e.bdata = bdata;
128124
}
129125

130126
/**
@@ -163,6 +159,11 @@ public String paramString() {
163159
return typeStr + ",(" + getX() + "," + getY() + ")";
164160
}
165161

162+
public Transferable getDispatcher() {
163+
// TODO Auto-generated method stub
164+
return null;
165+
}
166+
166167
}
167168

168169
static DropTargetDropEvent createDropEvent(DropTarget target, Transferable t, Object[][] data, int x, int y) {

0 commit comments

Comments
 (0)