# HG changeset patch # User anthony # Date 1255523558 -14400 # Node ID c447aed67cec628449642920b8f874c035626113 # Parent 24d614d4764a277f58695e84efe41e15f94ec443 6885735: closed/java/awt/Component/DisablingLWDisabledHW/DisablingLWDisabledHW.html fails Summary: Use isRecursivelyVisibleUpToHeavyweightContainer() instead of isRecursivelyVisible() to determine if the peer needs to be hidden. Reviewed-by: art, dcherepanov diff -r 24d614d4764a -r c447aed67cec jdk/src/share/classes/java/awt/Component.java --- a/jdk/src/share/classes/java/awt/Component.java Wed Oct 14 16:19:46 2009 +0400 +++ b/jdk/src/share/classes/java/awt/Component.java Wed Oct 14 16:32:38 2009 +0400 @@ -6720,12 +6720,13 @@ } } } else { - // It's native. If the parent is lightweight it - // will need some help. - Container parent = this.parent; - if (parent != null && parent.peer instanceof LightweightPeer) { + // It's native. If the parent is lightweight it will need some + // help. + Container parent = getContainer(); + if (parent != null && parent.isLightweight()) { relocateComponent(); - if (!isRecursivelyVisible()) { + if (!parent.isRecursivelyVisibleUpToHeavyweightContainer()) + { peer.setVisible(false); } } diff -r 24d614d4764a -r c447aed67cec jdk/src/share/classes/java/awt/Container.java --- a/jdk/src/share/classes/java/awt/Container.java Wed Oct 14 16:19:46 2009 +0400 +++ b/jdk/src/share/classes/java/awt/Container.java Wed Oct 14 16:32:38 2009 +0400 @@ -4092,16 +4092,29 @@ } } - /* + /** + * Checks if the container and its direct lightweight containers are + * visible. + * * Consider the heavyweight container hides or shows the HW descendants * automatically. Therefore we care of LW containers' visibility only. + * + * This method MUST be invoked under the TreeLock. */ - private boolean isRecursivelyVisibleUpToHeavyweightContainer() { + final boolean isRecursivelyVisibleUpToHeavyweightContainer() { if (!isLightweight()) { return true; } - return isVisible() && (getContainer() == null || - getContainer().isRecursivelyVisibleUpToHeavyweightContainer()); + + for (Container cont = getContainer(); + cont != null && cont.isLightweight(); + cont = cont.getContainer()) + { + if (!cont.isVisible()) { + return false; + } + } + return true; } @Override