Hi,
I can't find where you set initial value of mouseIsOver variable. Does 
Objective-C guarantee that it gets some defined default value?  

On 23.04.2012, at 15:08, Alexander Scherbatiy wrote:

> 
> Thank you for the review.
> 
> Here is the new version:
>  http://cr.openjdk.java.net/~alexsch/7154048/webrev.01/
> 
> 1. The synthesizeMouseEnteredExitedEvents method is added as a native method 
> to the CPlatformWindow class.
>   Now it is invoked only in places that programmatically  change a window 
> size:
>     - nativeSetNSWindowBounds method from the AWTWindow
>     - setVisible and setWindowState methods from the CPlatformWindow
> 
> 2. The objective-c code is formatted.
> 
> 3.  I do not think that setting the lastMouseEventPeer after sending the 
> MOUSE_ENTERED event in the LWWindowPeer class  can affect some logic in the 
> peer.
>    The postEvent method just post the MOUSE_ENTERED events to the queue. It 
> does not use the lastMouseEventPeer variable and there is no a recursion that 
> invokes the dispatchMouseEvent method again.
> 
> 4. Dragging a window under a panel should not generate mouse entered/exited 
> events for components. However the events should be generated if the window 
> is moved out of the frame or moved in to the frame. So one more condition 
> that checks is the mouse crosess the frame borders are added to the  
> dispatchMouseEvent method from the LWWindowPeer class.
> The DragWindowOutOfFrameTest test is added that  these events are properly 
> generated.
> 
> Thanks,
> Alexandr.
> 
> On 4/19/2012 5:14 PM, Anthony Petrov wrote:
>> 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 code.
>> 
>> 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,
>> Anthony
>> 
>> 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.
> 

Reply via email to