Crashes started happening due to macOS DnD API change from macOS 10.14 onwards. 
10.14 incrodues some [DnD 
constrains](https://developer.apple.com/documentation/macos-release-notes/appkit-release-notes-for-macos-10_14#Drag-and-Drop)
 which our DnD code happened to trigger on some occasions.

Our code used deprecated `dragImage` API which since 10.14 had new requirement 
- each NSPasteboard item had to have a corresponding drag image. Not meeting 
this constraint raised an exception, which crashed the app. Since there was no 
possibility to add more drag images to `dragImage` API (it only took one 
NSImage as parameter) the code had to be rewritten - as such I upgraded it to 
new DnD API utilizing NSDraggingSession and related protocols.

One side-effect of new DnD API is that it now modifies NSPasteboard for us - 
previous behavior was more "separated" from user code perspective (write items 
to pasteboard -> initiate a drag via `dragImage`). Manually updating 
NSPasteboard before calling `beginDraggingSessionWithItems` raised another 
exception related to NSPasteboard already having DnD-ed elements inside it. 
Some system tests, however, relied on that behavior and writing to NSPasteboard 
(`MacPasteboardShim.java` used in some tests creates a `Clipboard.DND` for test 
purposes). Since this path is in tests I assumed this behavior should stay and 
tried to make it as close to working as possible. Tests (including those using 
`MacPasteboardShim`) pass after my changes.

Additionally, added a new manual test based on `DndTest.java` test which 
creates two temporary files and allows for testing faulty behavior.

-------------

Commit messages:
 - Add DnD Multiple File manual test
 - Fix preview position; cleanup code
 - Add image previews and finish DnD code
 - Migrate DnD native code to DraggingSession API

Changes: https://git.openjdk.org/jfx/pull/1089/files
 Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1089&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8233955
  Stats: 438 lines in 8 files changed: 383 ins; 17 del; 38 mod
  Patch: https://git.openjdk.org/jfx/pull/1089.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1089/head:pull/1089

PR: https://git.openjdk.org/jfx/pull/1089

Reply via email to