Hello, Dmitry. Thank you for the clarifications, the fix looks good to me.
> I have looked through JDK-8029686, it will be fixed by these changes. So I will reassign it to you. Please close is as you see appropriate. With best regards. Petr. On 03.03.2014, at 14:22, dmitry markov <dmitry.mar...@oracle.com> wrote: > Hello Petr, > > I have looked through JDK-8029686, it will be fixed by these changes. > > If I get it right, getOwnerFrameDialog() is designed for another purpose. > Also it is NOT only used in notifyMouseEvent() and notifyNCMouseDown(). So I > think we should stay this method as is to avoid any problems in future. > > It is really necessary to add new method isOneOfOwnersOf(). BTW this approach > is already used on Windows platform, see awt_Window.cpp for details. > > Thanks, > Dmitry > > On 03/03/2014 13:54, Petr Pchelko wrote: >> Hello, Dmitry. >> >> I've investigated a similar issue a while ago >> (https://bugs.openjdk.java.net/browse/JDK-8029686), could you please check >> if this issue is also resolved by your fix? >> >>> In other words the current implementation assumes that the grabbingWindow >>> must be an instance of Frame or Dialog and does not handle the case when >>> the grabbingWindow is JWindow. >> When I was investigating this I did not understand why that was done that >> way. Do you know the reason? >> May be it's better not in introduce a new function but replace the >> getOwnerFrameDialog with your new implementation? >> >> Thank you. >> With best regards. Petr. >> >> On 03.03.2014, at 13:45, dmitry markov <dmitry.mar...@oracle.com> wrote: >> >>> Hi Sergey, >>> >>> The current implementation of LWWindowPeer.getOwnerFrameDialog() may return >>> an instance of Frame or Dialog. The returned value used to check whether >>> the grabbingWindow is owner of mouse event target or not. >>> >>> If JComboBox is added to JFrame, the grabbingWindow is JFrame and >>> getOwnerFrameDialog() returns the same JFrame object, (i.e. the check >>> passes). >>> If JCombobox is added to JWindow which is owned by JFrame, the >>> grabbingWindow is JWindow but getOwnerFrameDialog() returns the JFrame, >>> (i.e. the check fails). >>> >>> In other words the current implementation assumes that the grabbingWindow >>> must be an instance of Frame or Dialog and does not handle the case when >>> the grabbingWindow is JWindow. >>> >>> Thanks, >>> Dmitry >>> >>> On 03/03/2014 13:01, Sergey Bylokhov wrote: >>>> Hi, Dmitry. >>>> Why the problem is reproduced in JWindow? Why it works in JFrame? >>>> >>>> On 3/3/14 10:40 AM, dmitry markov wrote: >>>>> Hello, >>>>> >>>>> Could you review the fix for jdk9, please? >>>>> >>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8032872 >>>>> webrev: http://cr.openjdk.java.net/~dmarkov/8032872/jdk9/webrev.00/ >>>>> >>>>> Problem description: It is impossible to make a selection in JComboBox >>>>> added to JWindow via the mouse. The problem is caused by incorrect mouse >>>>> events handling in LWWindowPeer class. When LWWindowPeer receives a mouse >>>>> event intended for a popup window, it checks whether the current >>>>> grabbingWindow is owner of the popup using getOwnerFrameDialog() method. >>>>> This approach always fails for the JComboBox added to JWindow. As a >>>>> result an UngrabEvent is send to the popup window. >>>>> >>>>> Fix: Introduce new private method >>>>> LWWindowPeer.isOneOfOwnersOf(LWWindowPeer peer). The method will be >>>>> invoked on grabbingWindow object to test whether it is owner of current >>>>> mouse event target or not. The usage of getOwnerFrameDialog() should be >>>>> replaced by isOneOfOwnersOf() in LWWindowPeer.notifyMouseEvent() and >>>>> LWWindowPeer.NotifyNCMouseDown(). >>>>> >>>>> Thanks, >>>>> Dmitry >>>> >