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
