Hi, Omair,

thank you for the patch. It seems that the bug was closed by mistake, so I have just reopened it against AWT.

As for proposed changes, there is a single question:

--- jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java.orig 2009-01-08 16:53:54.000000000 -0500 +++ jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java 2009-01-08 16:54:08.000000000 -0500
@@ -478,7 +478,10 @@
             // 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 fixedBounds = new Rectangle(newBounds.x, newBounds.y, newBounds.width - insets.left - insets.right,
+                    newBounds.height - insets.top - insets.bottom);
+ newDimensions = new WindowDimensions(fixedBounds, insets, newDimensions.isClientSizeSet());
         }
         XToolkit.awtLock();
         try {

WindowDimensions class contains either client size or full size of the window, depending on 'isClientSizeSet' flag. fixedBounds from your patch is always a client rect, however isClientSizeSet is used from newDimensions... I'd rewrite the last changed line this way:

+ newDimensions = new WindowDimensions(fixedBounds, insets, true);

or, even better, this this one:

+ newDimensions = new WindowDimensions(newDimensions.isClientSizeSet() ? fixedBounds : newBounds, insets, newDimensions.isClientSizeSet());

Your comments?

Thanks,

Artem

Omair Majid wrote:
Hi,

This patch fixes an error in the calculation of an X11 window size. The inset size was being included in the calculation of the client area size for a window. A jtreg test is included. This was tested with openjdk6 but seems to be present in openjdk7 too.

Bug:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6721088

Cheers,

Omair

Reply via email to