--- old/src/solaris/classes/sun/awt/X11/XComponentPeer.java 2013-04-19 13:51:51.340674500 +0400 +++ new/src/solaris/classes/sun/awt/X11/XComponentPeer.java 2013-04-19 13:51:51.133648200 +0400 @@ -52,7 +52,6 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.PaintEvent; import java.awt.event.WindowEvent; -import java.awt.event.InvocationEvent; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; import java.awt.image.VolatileImage; @@ -392,9 +391,9 @@ boolean status = value; // If any of our heavyweight ancestors are disable, we should be too // See 6176875 for more information - final Container cp = SunToolkit.getNativeContainer(target); + final XComponentPeer cp = getContainerPeer(); if (cp != null) { - status &= ((XComponentPeer) cp.getPeer()).isEnabled(); + status &= cp.isEnabled(); } synchronized (getStateLock()) { if (enabled == status) { @@ -496,6 +495,16 @@ } } + /** + * Returns the peer of the nearest heavyweight container. + * + * @return XComponentPeer or null if there is no container. + */ + XComponentPeer getContainerPeer() { + final Container container = SunToolkit.getNativeContainer(target); + return (XComponentPeer) XToolkit.targetToPeer(container); + } + /* This method is intended to be over-ridden by peers to perform user interaction */ void handleJavaMouseEvent(MouseEvent e) { switch (e.getID()) { --- old/src/solaris/classes/sun/awt/X11/XWindowPeer.java 2013-04-19 13:51:53.341428600 +0400 +++ new/src/solaris/classes/sun/awt/X11/XWindowPeer.java 2013-04-19 13:51:53.124401000 +0400 @@ -987,6 +987,12 @@ return ret; } + @Override + final XComponentPeer getContainerPeer() { + // A window has a parent, but it does NOT have a container. + return null; + } + private static boolean isDesktopWindow( long wi ) { return XWM.getWM().isDesktopWindow( wi ); }