Hello, AWT Team.

Please, review the fix for 2 issues:
http://bugs.sun.com/view_bug.do?bug_id=7199783  Setting cursor on 
DragSourceContext does not work on OSX 
http://bugs.sun.com/view_bug.do?bug_id=8006941  Deadlock in drag and drop
The fix is available at:
http://cr.openjdk.java.net/~pchelko/8006941/webrev.02/

I have made a single fix for these 2 issues, because they are quite closely 
related, and the same methods need to be changed. And they depend on one 
another quite a bit.

1. The deadlock occurred because in CDragSourceContextPeer.dragMouseMoved 
methods on components were invoke on the Appkit thread. They blocked on an 
AWTTreeLock if EDT had already took it. EDT trying to perform a sync selector 
on the Appkit thread lead to a deadlock. So the logic of working with 
components are moved to the EDT now.
2. DragSource events were dispatched absolutely incorrectly. Now we dispatch 
them the same way as on other platforms. 
3. CCursorManager contained a workaround for the issue that we were not able to 
perform sync selectors during the dnd. Now sync selectors are processed during 
drag, so this workaround is not needed any more.
4. The functionality to set a cursor in DragSourceListeners is implemented. It 
works, however it still has a couple of issues:
        a. Sometimes mouse events are dispatched during the dnd, which might 
reset a cursor. That is wrong, mouse events should not be dispatched. It is a 
separate issue, so this problem will disappear as mouseEvent dispatching would 
be fixed.
        b. If the DropTarget supports NSDragOperationCopy cocoa sets an 
NSDragCopyCursor. There is no API to disable this and I have found no suitable 
workaround.
        c. On the first drag in the lifetime of the application cursor is not 
set. This is due to a bug in cocoa. They reset a cursor in some setter which 
looks absolutely unrelated and called when the first dragging session is 
initialized. I am thinking about filing a bug against apple.
5. Some cleanup: removed unused variables.

With best regards. Petr.

Reply via email to