diff -r db01a7f6d657 -r a139a919f645 jdk/src/share/classes/javax/swing/DefaultDesktopManager.java --- a/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Tue May 19 17:03:13 2009 +0400 +++ b/jdk/src/share/classes/javax/swing/DefaultDesktopManager.java Thu May 21 12:29:25 2009 +0400 @@ -34,6 +34,9 @@ import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; +import sun.awt.AWTAccessor; +import sun.awt.SunToolkit; + /** This is an implementation of the DesktopManager. * It currently implements the basic behaviors for managing * JInternalFrames in an arbitrary parent. @@ -361,7 +364,7 @@ g.dispose(); } } else if (dragMode == FASTER_DRAG_MODE) { - dragFrameFaster(f, newX, newY); + dragFrameFaster(f, newX, newY); } else { setBoundsForFrame(f, newX, newY, f.getWidth(), f.getHeight()); } @@ -634,13 +637,8 @@ boolean floaterCollision = isFloaterCollision(previousBounds, currentBounds); - // System.out.println(previousBounds); JComponent parent = (JComponent)f.getParent(); Rectangle visBounds = previousBounds.intersection(desktopBounds); - // System.out.println(previousBounds); - - - // System.out.println(visBounds); RepaintManager currentManager = RepaintManager.currentManager(f); @@ -682,7 +680,6 @@ } else { dirtyRects = new Rectangle[1]; dirtyRects[0] = previousBounds; - // System.out.println("no intersection"); }; // Fix the damage @@ -701,14 +698,22 @@ parent.paintImmediately(dirtyRects[i]); ((JInternalFrame)f).isDragging = true; - - // System.out.println(dirtyRects[i]); } } } finally { currentManager.endPaint(); } + + // update window if it's non-opaque + Window topLevel = SwingUtilities.getWindowAncestor(f); + Toolkit tk = Toolkit.getDefaultToolkit(); + if (!AWTAccessor.getWindowAccessor().isOpaque(topLevel) && + (tk instanceof SunToolkit) && + ((SunToolkit)tk).needUpdateWindow()) + { + AWTAccessor.getWindowAccessor().updateWindow(topLevel); + } } private boolean isFloaterCollision(Rectangle moveFrom, Rectangle moveTo) {