<AWT Dev> Possible fix for 6640765: Drop target management problem in XEmbeddedFramePeer

Anthony Petrov anthony.petrov at oracle.com
Wed Sep 18 05:49:53 PDT 2013

Hi Brian,

Thanks for submitting a patch for this issue. I hope Petr, who is more 
familiar with the SWT_AWT bridge, could also take a look at this fix.

Note that you should base your patch on JDK 8 sources as initially a bug 
should be fixed in a development release. Only then can we consider 
porting it to an update release.

Some comments:

1. Java Plugin uses the XEmbeddedFramePeer as well. If you substitute 
this class in the rt.jar with a copy containing your changes, how does 
it affect applets that allow users to DnD? (such applets should be 
signed, obviously, because unsigned applets can't do DnD). This needs to 
be tested thoroughly to ensure we don't introduce a regression. If there 
was a way to detect that only a specific (swt-managed) XEFP really needs 
this additional processing, this might even be better, although I don't 
see a way to implement this easily. Also, running AWT DnD regression 
tests could be useful (see jdk/test/java/awt/ in the repo).

2. You should document the newly added boolean field and new methods 
with javadocs.

3. Could you please elaborate on the root cause of the issue? What code 
does call the addDropTarget() initially for an XEmbeddedFramePeer 
instance, and why exactly does it not get called for other instances of 
the peer class? BTW, why can't this be implemented on the SWT side of 
the bridge when processing regular focus events?

4. Should we protect from multiple calls to the registerDropTarget() 
just in case, or is it safe to register the same window multiple times?

5. All debugging println's should be removed from the patch.

6. Please add @Override annotations to methods that you override.

7. Formatting issues: you should add spaces after the "if" keywords. 
Also, the statements should either be one-liners w/o a {} block, or the 
blocks should be spread over multiple lines.

best regards,

On 09/05/2013 01:00 AM, Brian de Alwis wrote:
> I'm helping with an Eclipse-based project that uses Eclipse's SWT_AWT facility to embed Swing within SWT.  SWT_AWT uses an embedded frame to host Swing/AWT content.  In this application, we frequently have several SWT_AWT-based editors open simultaneously, that support drag-and-drop, and have been hitting bug 6640765 (Eclipse bug 141893 [1]).  This is a Linux-specific bug where drops, when displaying several SWT_AWT embedded-frames, use the wrong frame.
> The original reporter on the Eclipse bug report identified the problem as something to do with XEmbeddedFramePeer.  I've tried to come up with a patch that solves the issue against JDK7 (attached).  I'm not very confident of the patch's correctness, but it seems to work in my application workflows.  I found I had to ensure that only a single embedded frame was registered as a drop target site.
> I fully admit that I am neither a proficient AWT hacker, nor with deep understanding of X11 DND.  Could someone with X11/AWT background provide some guidance as to whether this seems like a worthy fix, and pointers for how to build a unit test for this behaviour?
> Brian.
> [1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=141893

More information about the awt-dev mailing list