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();
+                       }
+               }
+       }
+}

Reply via email to