<AWT Dev> [9] Review Request: JDK-8032872: [macosx] Cannot select from JComboBox in a JWindow
dmitry markov
dmitry.markov at oracle.com
Tue Mar 4 05:26:38 PST 2014
Hello,
Could you review the updated fix, please?
webrev: http://cr.openjdk.java.net/~dmarkov/8032872/jdk9/webrev.01/
- Fixed problem in changeFocusedWindow()
- Added description for getOwnerFrameDialog()
Thanks,
Dmitry
On 03/03/2014 20:19, Sergey Bylokhov wrote:
> On 3/3/14 6:15 PM, Anton V. Tarasov wrote:
>> Hi all,
>>
>> The fix looks fine for me. The usage of getOwnerFrameDialog() in the
>> mentioned cases indeed seems incorrect. I've looked at the rest of
>> the code and found yet another incorrect usage, in
>> LWWindowPeer.changeFocusedWindow line 1265. Please, fix it the same
>> way. All the other use cases of the method should be fine as they
>> relate to an activation (a simple window can't be an active window).
> Then it would be good to add appropriate javadoc to
> getOwnerFrameDialog to mention that it returns owner which can be
> activated(Frame or D
> ialog and not a WIndow).
>>
>> Also, I'd recommend to add a new testcase to
>> java/awt/Window/Grab/GrabTest.java
>>
>> Thanks,
>> Anton.
>>
>> On 03.03.2014 16:49, Sergey Bylokhov wrote:
>>> 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
>>>>>>>
>>>>
>>>
>>>
>>
>
>
More information about the awt-dev
mailing list