RFR: 8227371: Drag&Drop while holding the CMD key does not work on macOS
Kevin Rushforth
kcr at openjdk.java.net
Sat Nov 13 14:05:38 UTC 2021
On Sat, 23 Oct 2021 18:20:38 GMT, Martin Fox <duke at openjdk.java.net> wrote:
>> During a drag-and-drop operation on the Mac the Command key will filter out every drag source operation except `NSDragOperationGeneric` (this behavior is provided by the OS). JavaFX drag sources only set the Move, Copy, and Link drag operation bits so the Command key reduces the set of available operations to nothing.
>>
>> This PR changes nothing about how JavaFX behaves when the dnd operation involves an external application. As a drag source the same set of operations will be broadcast and as a drag destination the operations will be interpreted as they have always been.
>>
>> For internal dnd within the JavaFX app `NSDragOperationMove` and `NSDragOperationGeneric` will both be set if the drag source specifies `TransferMode.MOVE`. On the other end a drag destination will interpret `NSDragOperationGeneric` and `NSDragOperationMove` as synonyms.
>>
>> As part of this PR it was necessary to verify that `NSDragOperationGeneric` was not already being used during an internal drag operation. There's a clause in `mapJavaMaskToNsOperation:` which translates `com_sun_glass_ui_Clipboard_ACTION_ANY` to `NSDragOperationEvery` and this includes the Generic bit. I believe this is a red herring, the Java dnd code converts `TransferMode.ANY` to a bitwise-OR of COPY, MOVE, and REFERENCE so `com_sun_glass_ui_Clipboard_ACTION_ANY` will never be passed down to the platform level.
>
> No, my changes won’t fix JDK-8264172. Anything that changes the way JavaFX interacts with external applications like Finder has to go through the Java CSR review process and I wanted to avoid that. I did look into this bug and determined there’s nothing much we can fix.
>
> When it comes to using the Command key to select Move I discovered that Finder doesn’t respond to Move from another app anyway. Drags from the Finder complete successfully on the drop end but the Finder just ignores the Move. I’m pretty sure this is by design since it conforms with the Apple user interface guidelines.
>
> You have to use the Control modifier key to select Link when dragging files from the Finder to a JavaFX app. There’s nothing we can do about that, modifier key filtering between applications is handled by the OS and it uses obsolete conventions carried over from NeXTSTEP. And unfortunately given the weird way the OS filters the modifier keys there’s no good work-around.
>
> By the way, Apple’s online API documentation (in NSDraggingInfo draggingSourceOperationMask) isn’t accurate, it seems to be describing how Finder works internally. There are older documents which describe the OS behavior correctly. I’ve entered a bug against the online docs which I’m sure Apple will ignore.
>
> Let me know if you want further details on any of this.
>
>> On Oct 23, 2021, at 3:56 AM, Christoph ***@***.***> wrote:
>>
>>
>> Thanks for tackling this issue, much appreciated. I reported a similar one a while ago https://bugs.openjdk.java.net/browse/JDK-8264172 <https://bugs.openjdk.java.net/browse/JDK-8264172> Can you confirm this will also be fixed if you drag a file?
>>
>> —
>> You are receiving this because you authored the thread.
>> Reply to this email directly, view it on GitHub <https://github.com/openjdk/jfx/pull/651#issuecomment-950134569>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AC4G54BWPBFUQKE33NCT323UIKIFHANCNFSM5GRBIDPA>.
>> Triage notifications on the go with GitHub Mobile for iOS <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675> or Android <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
>>
@beldenfox this is ready for you to integrate.
-------------
PR: https://git.openjdk.java.net/jfx/pull/651
More information about the openjfx-dev
mailing list