<AWT Dev> [9] Review Request: JDK-8032872: [macosx] Cannot select from JComboBox in a JWindow

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Mon Mar 3 04:49:48 PST 2014


On 3/3/14 2:22 PM, dmitry markov wrote:
> If I get it right, getOwnerFrameDialog() is designed for another 
> purpose. Also it is NOT only used in notifyMouseEvent() and 
> notifyNCMouseDown().
Probably other places don't work also? I see that these usages are 
related to the focus staff. Anton do you know why 
LWWindowPeer.getOwnerFrameDialog() checks Frame and Dialog only?
> 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.markov at 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
>>>>
>


-- 
Best regards, Sergey.



More information about the awt-dev mailing list