<AWT Dev> Request for review: 7154048 [macosx] At least drag twice, the toolbar can be dragged to the left side.

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Wed Apr 18 08:40:54 PDT 2012

Please review a fix for CR 7154048.

webrev: http://cr.openjdk.java.net/~alexsch/7154048/webrev.00/

Let's see the following test case:
- Frame contains two components JLabel and JButton
- The JLabel component has a mouse listener
    mousePressed: create a Window under the mouse click
    mouseDragged: drag the created window
    mouseReleased: close the Window
- A user clicks on the JLabel component, drags the mouse to the JButton 
component and releases the mouse button

The current JDK 8 implementation shows the following events on Mac OS X:
mouse pressed: javax.swing.JLabel
mouse exited: javax.swing.JLabel
mouse entered: javax.swing.JLabel
mouse dragged: javax.swing.JLabel
mouse exited: javax.swing.JLabel
mouse entered: javax.swing.JButton
mouse dragged: javax.swing.JLabel
mouse exited: javax.swing.JButton
mouse entered: Drag Window
mouse exited: Drag Window
mouse entered: javax.swing.JButton
mouse released: javax.swing.JButton

There are several issues:
1) The window does not receive the mouse entered event when it is 
created under the mouse
2) There are JLabel exited/JButton entered events during the window dragging
3) JLabel does not receive the mouse released event

The fix synthesizes the mouse entered/exited events manually if they are 
not received.

The entered/exited events synthesizing is added to setFrame, toFront, 
toBack, and zoom methods of the AWTWindow and CWrapper classes.

There is an option to add the events synthesizing to the windowDidResize 
notification. However this notification is sent when a window size is 
changed in both cases, programmatically and when user is resized the 
window. So in a lot of case there is no need for the our use case events 

The LWWindowPeer class is updated to not generate extra mouse enter/exit 
events during the mouse dragging.

Tho automated tests are added.


More information about the awt-dev mailing list