<AWT Dev> [9] Review Request: 8027324 The spec for Toolkit.setDynamicLayout() and Toolkit.isDynamicLayoutActive() needs to be clarified

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Tue Mar 22 19:45:01 UTC 2016


On 22.03.16 22:21, Phil Race wrote:
> I don't get how JCK detected this problem unless there is a
> manual test that was verified visually

This is the automated test, which sets the flag to false and expects 
that on OSX isDynamicLayoutActive() will also return false.

> but here is what I
> think you want the spec. to say :-
>
>     /**
>       * Returns whether dynamic layout of Containers on resize is currently
>       * enabled on the underlying operating system and/or window manager).
>       * If the platform supports it, {@code setDynamicLayout(boolean)} may
>       * be used to programmatically enable or disable platform dynamic
> layout.
>       * Regardless of whether that toggling is supported, or whether
> {@code true}
>       * or {@code false} is specified as an argument, or has never been
> called at
>       * all, this method will return the active current platform
> behavior and which
>       * will be followed by the JDK in determining layout policy during
> resizing.

This is a similar text to the specification of setDynamicLayout(), 
should we copy it to isDynamicLayoutActive() or can I add a link?
Or I can remove this text in braces:
"(both set in program
      *( {@code isDynamicLayoutSet()} )
      *, and supported
      * by the underlying operating system and/or window manager)"

It seems that "Returns whether dynamic layout of Containers on resize is 
currently active or not" should be enough. All other information already 
provided in other methods.

>       * <p>
>       * If dynamic layout is currently inactive then Containers
>       * re-layout their components when resizing is completed. As a result
>       * the {@code Component.validate()} method will be invoked only
>       * once per resize.
>       * If dynamic layout is currently active then Containers
>       * re-layout their components on every native resize event and
>       * the {@code validate()} method will be invoked each time.
>       * The OS/WM support can be queried using
>       * the getDesktopProperty("awt.dynamicLayoutSupported") method.
>       * This property will reflect the platform capability but is
>       * not sufficient to tell if it is presently enabled.
> ...
>
> If this sounds right then we would need to make sure the other docs
> clearly support this interpretation.
>
> And it seems messy that if you want to find out if you can
> change the behaviour programmatically, you need to
> call setDynamicLayout(true) and setDynamicLayout(false) and
> after each then call isDynamicLayoutActive() and
> compare results to see if it made any difference ..

true.

>
> -phil.
>
>
> On 03/22/2016 11:50 AM, Sergey Bylokhov wrote:
>> On 22.03.16 21:12, Phil Race wrote:
>>> On 03/22/2016 11:01 AM, Sergey Bylokhov wrote:
>>>>>
>>>>> That flag is used to determine the behaviour of
>>>>> isDynamicLayoutActive()
>>>>> If it is set to "false" then isDynamicLayoutActive() will always
>>>>> return
>>>>> false,
>>>>> (regardless of what the underlying platform is doing)
>>>>> If it is set to "true" then isDynamicLayoutActive() will will consult
>>>>> the desktop property which is *supposed* to reflect the platform
>>>>> support
>>>>> and so should agree with what the desktop property says.
>>>>
>>>> Nope, the isDynamicLayoutActive() always returns the current status.
>>>> It cannot return true if this feature is unsupported by the OS, but it
>>>> can return true if the user sets the flag to false, but the OS cannot
>>>> disable the feature.
>>>
>>> In that case I don't think the old wording or your current re-wording is
>>> correct.
>>
>> That's actually a problem how to describe it.
>>
>>> The latter looks like this :-
>>>
>>> 11 * Returns whether dynamic layout of Containers on resize is currently
>>> 212 * active (both set in program ({@code isDynamicLayoutSet()}), and
>>> supported
>>> ^^^^^^
>>>   213 * by the underlying operating system and/or window manager). That
>>> "and" means *both* conditions must be true for this to return true,
>>
>> Both conditions(flag + os_support) must be true if the OS can change
>> the current status. But if the native system cannot change the status
>> then the flag will be skipped.
>>
>>> whereas you are telling me that even if I call setDynamicLayout(false)
>>> it might return true. -phil. -
>>>
>>>
>>
>>
>


-- 
Best regards, Sergey.


More information about the awt-dev mailing list