RFR: 8296387: [Tooltip, CSS] -fx-show-delay is only applied to the first tooltip that is shown before it is displayed [v10]

Andy Goryachev angorya at openjdk.org
Wed Jul 10 20:26:04 UTC 2024


On Wed, 10 Jul 2024 09:42:57 GMT, Marius Hanl <mhanl at openjdk.org> wrote:

>> This PR fixes a long standing issue where the `Tooltip` will always wait one second until it appears the very first time, even if the 
>> `-fx-show-delay` was set to another value.
>> 
>> The culprit is, that the `cssForced` flag is not inside `Tooltip`, but inside the `TooltipBehaviour`. So the very first `Tooltip` gets processed correctly, but after no `Tooltip` will be processed by CSS before showing, resulting in the set `-fx-show-delay` to not be applied immediately.
>> 
>> Added a bunch of headful and headless tests for the behaviour since there were none before.
>
> Marius Hanl has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:
> 
>  - Merge branch 'master' of https://github.com/openjdk/jfx into 8296387-tooltip-css
>  - Use Base64 encoder in tests
>  - Improve time measurement and simplify test diff code
>  - add many more unit tests for Tooltip
>  - Use Helper class instead
>  - Doc
>  - Add a test for changing the stylesheet and always process CSS for that matter
>  - Add more documentation and improve css stylesheet test threshold
>  - Implement applyStylesheetFromOwner(..) and use it instead to ensure correct CSS processing for the Tooltip Node.
>  - Merge branch 'master' of https://github.com/openjdk/jfx into 8296387-tooltip-css
>  - ... and 2 more: https://git.openjdk.org/jfx/compare/5c7c8bae...f917d18e

modules/javafx.controls/src/test/java/test/javafx/scene/control/TooltipTest.java line 709:

> 707:     }
> 708: 
> 709:     private String toBase64(String css) {

suggestion:

private static String encode(String css) {
  return "data:base64," + Base64.getUrlEncoder().encodeToString(css.getBytes(StandardCharsets.UTF_8));
}

tests/system/src/test/java/test/robot/javafx/scene/TooltipTest.java line 233:

> 231:                     window.getX() + scene.getX() + button.getLayoutX() + button.getLayoutBounds().getWidth() / 2,
> 232:                     window.getY() + scene.getY() + button.getLayoutY() + button.getLayoutBounds().getHeight() / 2);
> 233:             tooltipStartTime = System.currentTimeMillis();

it is better to use `System.nanoTime()` instead of `currentTimeMillis()` for this kind of measurements because it is not affected by the updates to the current time (such as time sync).

(since there are plenty of other places where we use `currentTimeMillis()` it's probably ok - very unlikely for the test to hit this scenario)

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1394#discussion_r1672411983
PR Review Comment: https://git.openjdk.org/jfx/pull/1394#discussion_r1672429228


More information about the openjfx-dev mailing list