Index: modules/awt/src/main/java/common/java/awt/Container.java =================================================================== --- modules/awt/src/main/java/common/java/awt/Container.java (revision 464471) +++ modules/awt/src/main/java/common/java/awt/Container.java (working copy) @@ -33,6 +33,8 @@ import javax.accessibility.AccessibleComponent; import javax.accessibility.AccessibleContext; +import org.apache.harmony.awt.gl.MultiRectArea; + public class Container extends Component { private static final long serialVersionUID = 4613797578919906343L; @@ -1406,4 +1408,28 @@ } return (container == root) ? root : null; } + + /** + * Adds parts obscured by components which + * are above the given component + * in this container to mra + * @param mra MultiRectArea to add regions to + * @param component obscured regions of this component are added + */ + void addObscuredRegions(MultiRectArea mra, Component component) { + int z = getComponentZOrder(component); + int i; + for (i = 0; i < z; i++) { + Component comp = getComponent(i); + if (comp.isDisplayable()&& comp.isVisible()&& comp.isOpaque()) { + mra.add(comp.getBounds()); + } + } + for (i = z + 1; i < getComponentCount(); i++) { + Component comp = getComponent(i); + if (comp.isVisible() && !comp.isLightweight()) { + mra.add(comp.getBounds()); + } + } + } } Index: modules/awt/src/main/java/common/java/awt/Toolkit.java =================================================================== --- modules/awt/src/main/java/common/java/awt/Toolkit.java (revision 464471) +++ modules/awt/src/main/java/common/java/awt/Toolkit.java (working copy) @@ -367,6 +367,13 @@ public void setVisibleFlag(Component comp, boolean visible) { comp.visible = visible; } + + @Override + public void addObscuredRegions(MultiRectArea mra, Component c, Container container) { + if (container != null) { + container.addObscuredRegions(mra, c); + } + } } /* @@ -540,7 +547,7 @@ public WTK init() { wtk = createWTK(className); wtk.getNativeEventQueue().setShutdownWatchdog(shutdownWatchdog); - synchronizer.setEnvironment(wtk, nativeThread); + synchronizer.setEnvironment(wtk, dispatchThread); ContextStorage.setWTK(wtk); dtk.initDragAndDrop(); return wtk; Index: modules/awt/src/main/java/common/java/awt/Component.java =================================================================== --- modules/awt/src/main/java/common/java/awt/Component.java (revision 464471) +++ modules/awt/src/main/java/common/java/awt/Component.java (working copy) @@ -4162,7 +4162,9 @@ r.translate(x, y); MultiRectArea ret = parent.getObscuredRegion(r); if (ret != null) { + parent.addObscuredRegions(ret, this); ret.translate(-x, -y); + ret.intersect(new Rectangle(0, 0, w, h)); } return ret; } Index: modules/awt/src/main/java/common/org/apache/harmony/awt/ComponentInternals.java =================================================================== --- modules/awt/src/main/java/common/org/apache/harmony/awt/ComponentInternals.java (revision 464471) +++ modules/awt/src/main/java/common/org/apache/harmony/awt/ComponentInternals.java (working copy) @@ -21,6 +21,7 @@ package org.apache.harmony.awt; import java.awt.Component; +import java.awt.Container; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Image; @@ -180,6 +181,13 @@ public abstract MultiRectArea getObscuredRegion(Component c); /** + * An accessor to Container.addObscuredRegions() method + * @see java.awt.Container#addObscuredRegions(MultiRectArea, Component) + */ + public abstract void addObscuredRegions(MultiRectArea mra, Component c, + Container container); + + /** * Makes it possible to call protected Toolkit.setDesktopProperty() * method from any class outside of java.awt package */ Index: modules/swing/src/main/java/common/org/apache/harmony/x/swing/BlitSupport.java =================================================================== --- modules/swing/src/main/java/common/org/apache/harmony/x/swing/BlitSupport.java (revision 464471) +++ modules/swing/src/main/java/common/org/apache/harmony/x/swing/BlitSupport.java (working copy) @@ -20,6 +20,7 @@ */ package org.apache.harmony.x.swing; +import java.awt.Component; import java.awt.Container; import java.awt.EventQueue; import java.awt.Graphics; @@ -92,10 +93,6 @@ } Rectangle parentBounds = parent.getVisibleRect(); - if (Utilities.getDrawingRoot(parent, parentBounds) != parent) { - resetBlitting(); - return false; - } Graphics g = parent.getGraphics(); if (g == null) { @@ -189,7 +186,9 @@ } private boolean isObscured(final int x, final int y, final int width, final int height) { - MultiRectArea obscuredArea = ComponentInternals.getComponentInternals().getObscuredRegion(parent); + ComponentInternals ci = ComponentInternals.getComponentInternals(); + MultiRectArea obscuredArea = ci.getObscuredRegion(parent); + ci.addObscuredRegions(obscuredArea, blitingComponent, parent); if (obscuredArea == null || obscuredArea.isEmpty()) { return false; }