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
* JInternalFrame
s 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) {