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

Anthony Petrov anthony.petrov at oracle.com
Thu Apr 19 06:14:23 PDT 2012

Hi Alexander,

1. I don't think that it's a good idea to add 
synthesizeMouseEnteredExitedEvents calls to CWrapper methods. These 
methods are supposed to perform direct calls to Cocoa API w/o any 
side-effects. They may be used for windows that even aren't AWT windows, 
and as such sending them the synthesizeMouseEnteredExitedEvents message 
is useless, and just doesn't seem right from CWrapper's purpose 
perspective. You may want to introduce 
CPlatformWindow._synthesizeMouseEnteredExitedEvents() native method that 
would call this native method, and then add a call to it where needed in 
Java code.

2. Please follow formatting guidelines and reformat lines like this:

> if(id != MouseEvent.MOUSE_DRAGGED){

to read as

if (id != MouseEvent.MOUSE_DRAGGED) {

instead. I see lots of such mis-formatted if() statements all over your 

3. In LWWindowPeer.java you are now setting the lastMouseEventPeer after 
sending the MOUSE_ENTERED event. Before your fix it's been set earlier. 
Can this change affect some logic in the peer code while processing 
ENTERED events at a user event handler?

best regards,

On 04/18/12 19:40, Alexander Scherbatiy wrote:
> Please review a fix for CR 7154048.
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=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
> generation.
> The LWWindowPeer class is updated to not generate extra mouse enter/exit
> events during the mouse dragging.
> Tho automated tests are added.
> Thanks,
> Alexandr.

More information about the awt-dev mailing list