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

Leonid Romanov leonid.romanov at oracle.com
Wed Apr 18 09:22:58 PDT 2012


Hi,
A quick question to help me better understand what is going on in your webrev.  The common way to track mouse enter/exit events in OS X is to use NSView's tracking rectangle or (newer than tracking rectangle) NSTrackingArea class.  In our port, we set a tracking rectangle in -viewDidMoveToWindow method of AWTView class. So, my question is: have you investigated what is wrong with our current approach? That is, why it doesn't work and for what cases?

Thanks,
Leonid.  

On 18.04.2012, at 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