On Mon, 23 Aug 2021 17:57:45 GMT, Alexey Ushakov <a...@openjdk.org> wrote:
>> Update opacity only if the component is visible > > Alexey Ushakov has updated the pull request incrementally with one additional > commit since the last revision: > > 8272481: [macos] javax/swing/JFrame/NSTexturedJFrame/NSTexturedJFrame.java > fails > > Update window layer opacity to align with the peer translucency src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformView.java line 70: > 68: if (peer.isTranslucent()) { > 69: this.windowLayer.setOpaque(false); > 70: } Do we still need the " if (isVisible())" check in the LWWindowPeer.java? I would like to double-check the reason we need the code above: * All our opaque properties are true by default(this is the properties used inside isTranslucent() method) * If any of the properties are actually set to false by the user, then we will reset the property of the layer to NO * The shape property will trigger: LWWindowPeer->applyShapeImpl->updateOpaque->getPlatformWindow().setOpaque(!isTranslucent()); * The opaque property will trigger: LWWindowPeer->setOpaque->updateOpaque->getPlatformWindow().setOpaque(!isTranslucent()); And the only problematic property is textured: * During initialisation we call "peer.setTextured" from the getInitialStyleBits(), this is before we call contentView.initialize inside CPlatformWindow.initialize(). I think we should move the call "peer.setTextured" to the CPlatformWindow.java:337 after contentView.initialize() This is same as DECORATED property is used in the same method. * If the textured property is changed after initialisation we did not update the "java" textuted property. See ClientPropertyApplicator: new Property<CPlatformWindow>(WINDOW_BRUSH_METAL_LOOK) { public void applyProperty(final CPlatformWindow c, final Object value) { c.setStyleBits(TEXTURED, Boolean.parseBoolean(value.toString())); }}, ------------- PR: https://git.openjdk.java.net/jdk/pull/5172