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.
