On Tue, 4 Aug 2026 19:09:55 GMT, Andy Goryachev <[email protected]> wrote:

>> `PopupWindow` will always overwrite its `Scene` (user agent) stylesheets 
>> when an owner was set and `show` is called.
>> Code like this:
>> 
>> 
>>         final Popup popup = new Popup();
>>         popup.getScene().setUserAgentStylesheet(popupUserAgentStylesheet);
>>         popup.getScene().getStylesheets().add(popupStylesheet);
>> 
>> 
>> will do nothing, because your added stylesheets will be later overwritten 
>> when `show` is called. 
>> Andy and I were already wondering about this behavior two years ago: 
>> https://github.com/openjdk/jfx/pull/1394#discussion_r1617620949
>> 
>> ---
>> 
>> I can't see any reason why we should do that. Instead, this PR will only add 
>> the stylesheets of the owner if they do not exist already. 
>> Additionally, we will not overwrite the user agent stylesheet if it was 
>> already set.
>> 
>> Added tests for all combinations I can think of. This PR also fixes NPEs 
>> that can happen when the owner window has no 'root window'.
>> 
>> There is already a test for the `Cursor` behavior, but there was none that 
>> verifies that the `Cursor` is not overwritten, so added one as well.
>> 
>> https://github.com/openjdk/jfx/blob/05a7b6d0db5e799395da27ab43a93d4337001e11/modules/javafx.graphics/src/main/java/javafx/stage/PopupWindow.java#L479-L481
>> 
>> Now, we will never overwrite anything that the developer set (before 
>> `show`ing). And as we can see above, this was already done this way with the 
>> `Cursor`.
>> 
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> modules/javafx.graphics/src/main/java/javafx/stage/PopupWindow.java line 527:
> 
>> 525:         for (String stylesheet : ownerScene.getStylesheets()) {
>> 526:             if (!scene.getStylesheets().contains(stylesheet)) {
>> 527:                 newStylesheets.add(stylesheet);
> 
> can a PopupWindow be reused?  if so, the stylesheets might accumulate from 
> the earlier cycles.  is this ok?  should we keep track of the stylesheets 
> added here and remove them on `hide()`?

Does not happen as we will check with `contains`. There is also a test for this 
scenario.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2236#discussion_r3741351581

Reply via email to