<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