Hi Anthony,
Anthony Petrov wrote:
The fix looks fine (taking into account the changes suggested by Artem).
I would also ask to remove the unneeded comment lines from the test
code. The printout's, however, may safely be uncommented - this would be
a useful information should the test ever fail.
Please send the clean version of the latest patch to this mailing list
for final reviewing.
Patch is attached. It was diffed against jdk7 but should apply (with a
fuzz) to jdk6 as well.
Cheers,
Omair
diff -r 63d087cacbf9 src/solaris/classes/sun/awt/X11/WindowDimensions.java
--- a/src/solaris/classes/sun/awt/X11/WindowDimensions.java Tue Jan 13
20:04:05 2009 +0100
+++ b/src/solaris/classes/sun/awt/X11/WindowDimensions.java Mon Jan 19
11:51:39 2009 -0500
@@ -32,10 +32,18 @@
private Insets insets;
private boolean isClientSizeSet;
+ /**
+ * If isClient is true, the bounds represent the client window area.
+ * Otherwise, they represent the entire window area, with the insets
included
+ */
public WindowDimensions(int x, int y, int width, int height, boolean
isClient) {
this(new Rectangle(x, y, width, height), null, isClient);
}
+ /**
+ * If isClient is true, then rec is treated as the client window rectangle.
+ * Otherwise rec is treated as the whole window rectangle with the insets
included.
+ */
public WindowDimensions(Rectangle rec, Insets ins, boolean isClient) {
if (rec == null) {
throw new IllegalArgumentException("Client bounds can't be null");
@@ -46,10 +54,18 @@
setInsets(ins);
}
+ /**
+ * If isClient is true, then size represents the client window size.
+ * Otherwise, size represents the whole window size with the insets
included.
+ */
public WindowDimensions(Point loc, Dimension size, Insets in, boolean
isClient) {
this(new Rectangle(loc, size), in, isClient);
}
+ /**
+ * If isClient is true, the bounds represent the client window area.
+ * Otherwise, they represent the entire window area, with the insets
included
+ */
public WindowDimensions(Rectangle bounds, boolean isClient) {
this(bounds, null, isClient);
}
diff -r 63d087cacbf9 src/solaris/classes/sun/awt/X11/XDecoratedPeer.java
--- a/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Tue Jan 13
20:04:05 2009 +0100
+++ b/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Mon Jan 19
11:51:39 2009 -0500
@@ -492,7 +492,11 @@
// do nothing but accept it.
Rectangle reqBounds = newDimensions.getBounds();
Rectangle newBounds = constrainBounds(reqBounds.x, reqBounds.y,
reqBounds.width, reqBounds.height);
- newDimensions = new WindowDimensions(newBounds,
newDimensions.getInsets(), newDimensions.isClientSizeSet());
+ Insets insets = newDimensions.getInsets();
+ Rectangle clientBounds = new Rectangle(newBounds.x, newBounds.y,
newBounds.width - insets.left - insets.right,
+ newBounds.height - insets.top - insets.bottom);
+ newDimensions = new
WindowDimensions(newDimensions.isClientSizeSet() ? clientBounds : newBounds,
+ insets,
newDimensions.isClientSizeSet());
}
XToolkit.awtLock();
try {
diff -r 63d087cacbf9 test/java/awt/Frame/FrameSize/TestFrameSize.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/Frame/FrameSize/TestFrameSize.java Mon Jan 19 11:51:39
2009 -0500
@@ -0,0 +1,49 @@
+/*
+ @test
+ @bug 6721088
+ @summary X11 Window sizes should be what we set them to
+ @author Omair Majid <oma...@redhat.com>
+ @run main TestFrameSize
+ */
+
+import java.awt.Dimension;
+import java.awt.Frame;
+
+/**
+ * TestFrameSize.java
+ *
+ * Summary: test that X11 Awt windows are drawn with correct sizes
+ *
+ * Test fails if size of window is wrong
+ */
+
+public class TestFrameSize {
+
+ static Dimension desiredDimensions = new Dimension(200, 200);
+ static int ERROR_MARGIN = 15;
+ static Frame mainWindow;
+
+ public static void drawGui() {
+ mainWindow = new Frame("");
+ mainWindow.setPreferredSize(desiredDimensions);
+ mainWindow.pack();
+
+ Dimension actualDimensions = mainWindow.getSize();
+ System.out.println("Desired dimensions: " +
desiredDimensions.toString());
+ System.out.println("Actual dimensiosn: " +
actualDimensions.toString());
+ if (Math.abs(actualDimensions.height -
desiredDimensions.height) > ERROR_MARGIN) {
+ throw new RuntimeException("Incorrect widow size");
+ }
+
+ }
+
+ public static void main(String[] args) {
+ try {
+ drawGui();
+ } finally {
+ if (mainWindow != null) {
+ mainWindow.dispose();
+ }
+ }
+ }
+}