<AWT Dev> [9] Review Request: JDK-8032872: [macosx] Cannot select from JComboBox in a JWindow
Anton V. Tarasov
anton.tarasov at oracle.com
Wed Mar 5 01:13:53 PST 2014
Hi Dmitry,
Actually, I meant to add a _simple_ case to the test, or otherwise it becomes overly complicated.
Sorry, if I didn't make that clear.
So, the simple case is to have a hierarchy: frame -> window-1 -> window-2, where window-1 is
grabbed. Then you click in window-2 and check if it doesn't cause ungrab event. Right?
Thanks,
Anton.
On 05.03.2014 12:55, dmitry markov wrote:
> Hi Anton,
>
> I updated java/awt/Window/Grab/GrabTest.java as you requested. Please find new webrev here:
> http://cr.openjdk.java.net/~dmarkov/8032872/jdk9/webrev.02/
>
> Thanks,
> Dmitry
>
> On 04/03/2014 19:49, Anton V. Tarasov wrote:
>> Hi Dmitry,
>>
>> The fix looks fine for me, but I'm still voting for adding this case to
>> java/awt/Window/Grab/GrabTest.java
>>
>> Thanks,
>> Anton.
>>
>> On 04.03.2014 17:26, dmitry markov wrote:
>>> 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