<AWT Dev> [9] Review request for 8176490: [macosx] Sometimes NSWindow.isZoomed hangs
Alexander Zvegintsev
alexander.zvegintsev at oracle.com
Mon Mar 27 15:23:43 UTC 2017
Looks fine to me too.
Thanks,
Alexander.
On 27/03/2017 08:35, dmitry markov wrote:
> Thank you, Sergey!
> Looking for the second +1 from someone else.
>
> Thank you in advance,
> Dmitry
> On 24/03/2017 21:01, Sergey Bylokhov wrote:
>> Looks fine.
>>
>>> Hi Sergey,
>>> Thank you for the review.
>>>
>>> Actually deliverMoveResizeEvent() is always called once a window is
>>> displayed. If the window is created using max W/H of the screen, the
>>> function will be invoked and isZoomed field will contain the correct
>>> value. I have just checked that.
>>>
>>> Thanks,
>>> Dmitry
>>>> On 23 Mar 2017, at 16:36, Sergey Bylokhov
>>>> <Sergey.Bylokhov at oracle.com> wrote:
>>>>
>>>> Hi, Dmitry.
>>>> Can you please check that the fix does not break the situation when
>>>> the frame is created using max W/H of the screen. In this case the
>>>> old zoom logic return true, is it possible that the new logic will
>>>> return false since deliverMoveResizeEvent
>>>> will not be called?
>>>>
>>>>>
>>>>> Hello,
>>>>>
>>>>> Could you review a fix for jdk9, please?
>>>>>
>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8176490
>>>>> webrev: http://cr.openjdk.java.net/~dmarkov/8176490/webrev.00/
>>>>>
>>>>> Problem description:
>>>>> On OSX AppKit thread and EDT or main application thread might be
>>>>> blocked when a child window is displayed and its parent is hidden
>>>>> at the same time. AppKit thread performs windows ordering caused
>>>>> by displaying of the child window. It retrieves child windows for
>>>>> the parent window and tries to acquire the monitor inside
>>>>> Window.getOwnedWindows_NoClientCode(). However the monitor is
>>>>> already owned by EDT/main application thread which executes
>>>>> setVisible(false) on the parent window. That thread hangs on
>>>>> invocation of CWrapper.NSWindow.isZoomed() since the function must
>>>>> be executed on AppKit thread.
>>>>>
>>>>> Fix:
>>>>> Add a new field isZoomed to CPlatformWindow class. The field will
>>>>> contain information about current zoom state for the window. The
>>>>> method deliverMoveResizeEvent() will update the new field using
>>>>> data from the platform. The invocations of
>>>>> CWrapper.NSWindow.isZoomed() in CPlatformWindow should be replaced
>>>>> with isZoomed field.
>>>>>
>>>>> Note: I ran JCK tests on the build with fix and did not observe
>>>>> any new problems.
>>>>>
>>>>> Thanks,
>>>>> Dmitry
>
More information about the awt-dev
mailing list