Request for review: RT-28347 - DnD between two JFXPanels

Anthony Petrov anthony.petrov at oracle.com
Tue Nov 5 07:19:34 PST 2013


Hi Artem,

There's a lot of code changes and I'm not sure if I see the complete 
picture of how DnD works with embedded scenes (and not that I'm a great 
expert in DnD anyway.) It would be nice to have a short overview of the 
embedded DnD architecture (put in a class javadoc for, say, the 
EmbeddedSceneDnD class.)
However, generally all the changes look good. I have a few questions:

1. src/main/java/com/sun/javafx/tk/quantum/EmbeddedSceneDnD.java
>  67         dragStartListener.dragStarted(fxDragSource, TransferMode.COPY);

Why do we hard-code the transfer mode?


2.
>   94     // can be implemented using AWT nested event loop, however it just
>   95     // blocks the current thread. This is done by intention, because
>   99     <T> T executeOnFXThread(final Callable<T> r) {

I'm not sure I'm happy with this method. Could you provide more details 
on where and how exactly it is used? Also, could you please convert this 
comment into a javadoc?


3. src/main/java/javafx/embed/swing/JFXPanel.java
>  799         public void setEmbeddedScene(EmbeddedSceneInterface embeddedScene) {
>  804             if (scenePeer == null) {
>  805                 dnd.removeNotify();
>  806                 dnd = null;

Above we manipulate the dnd object directly on the current thread, while 
at lines 817-818:
>  814             SwingUtilities.invokeLater(new Runnable() {
>  817                     dnd = new SwingDnD(JFXPanel.this, scenePeer);
>  818                     dnd.addNotify();

... we do this on the EDT. This asymmetry looks a bit suspicious. Could 
you elaborate on that?


4. src/main/java/javafx/embed/swing/SwingDnD.java
>  183                 // Don't call updateContents() from drop(). In AWT, it is possible to
>  184                 // get data from the Transferable object in drop() only after the drop
>  185                 // has been accepted. Here we first let FX handle drop(), then accep

This looks like not the best solution from performance perspective. 
Also, I still don't understand why exactly we can't get the data when 
drop() occurs. Could you please explain this?

--
best regards,
Anthony

On 11/01/2013 07:37 PM, Artem Ananiev wrote:
> Hi,
>
> could you take a look at the following fix, please:
>
> http://cr.openjdk.java.net/~art/javafx/RT-28347/
>
> Some information about the changes is available in bug comments:
>
> https://javafx-jira.kenai.com/browse/RT-28347
>
> Thanks,
>
> Artem


More information about the openjfx-dev mailing list