6945178: SecurityException upon drag-and-drop

A flag added to distinguish drop action handling.

Reviewed-by: uta, art
This commit is contained in:
Denis Fokin 2010-12-01 17:25:12 +03:00
parent 92db57255d
commit fe02e1f7c1

View File

@ -94,6 +94,11 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
protected int dropStatus = STATUS_NONE;
protected boolean dropComplete = false;
// The flag is used to monitor whether the drop action is
// handled by a user. That allows to distinct during
// which operation getTransferData() method is invoked.
boolean dropInProcess = false;
/*
* global lock
*/
@ -220,7 +225,7 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
SecurityManager sm = System.getSecurityManager();
try {
if (!dropComplete && sm != null) {
if (!dropInProcess && sm != null) {
sm.checkSystemClipboardAccess();
}
} catch (Exception e) {
@ -526,6 +531,8 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
setCurrentJVMLocalSourceTransferable(null);
}
dropInProcess = true;
try {
((DropTargetListener)dt).drop(new DropTargetDropEvent(dtc,
hots,
@ -538,6 +545,7 @@ public abstract class SunDropTargetContextPeer implements DropTargetContextPeer,
} else if (dropComplete == false) {
dropComplete(false);
}
dropInProcess = false;
}
} else {
rejectDrop();