On Fri, 31 Jul 2026 19:59:46 GMT, Marius Hanl <[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 462: > 460: private void showImpl(final Window owner) { > 461: Window rootWindow = getRootWindow(owner); > 462: if (rootWindow == null) { not equivalent change: the old code set this.ownerWindow (to null in this case, see L467) modules/javafx.graphics/src/main/java/javafx/stage/PopupWindow.java line 463: > 461: Window rootWindow = getRootWindow(owner); > 462: if (rootWindow == null) { > 463: return; I am just a bit confused here. Referring to old version' line numbers, it looks like we should not have a null value returned from `getRootWindow(owner)`: it's being dereferenced in L477 and also L485. modules/javafx.graphics/src/main/java/javafx/stage/PopupWindow.java line 506: > 504: // JDK-8116444 > 505: Window rootWindow = getRootWindow(owner); > 506: if (rootWindow == null) { same thing - is it even possible for the `rootWindow` to be `null`? ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/2236#discussion_r3693188902 PR Review Comment: https://git.openjdk.org/jfx/pull/2236#discussion_r3693222507 PR Review Comment: https://git.openjdk.org/jfx/pull/2236#discussion_r3693228917
