This is pretty close to how getScreenInsets() is implemented in JDK7, so it should work fine for JDK6 and earlier JDK versions.

Thanks,

Artem

On 1/10/2010 5:07 AM, Paulo Levi wrote:
Found a workaround - i think this should be fixed on awt really:

     //workaround for java X11 issue (Toolkit.getScreenInsets) wrong values
     *private*  *static*  ProcessBuilder panelWorkaround =*new*  
ProcessBuilder("xprop","-root","-notype","_NET_WORKAREA");


     *private*  *static*  *final*  *boolean*  isX11 = 
GraphicsEnvironment.getLocalGraphicsEnvironment()*instanceof*  
X11GraphicsEnvironment;



     *private*  Rectangle getAdequateFullSize()*throws*  HeadlessException{
         //bug in linux x11 binding (getScreenInsets not counting panels)...


         *if*  (isX11){
             *try*  {
                 Process proc = panelWorkaround.start();


                 String output = IoUtils.toString(proc.getInputStream(),*true*);
                 String[] results = output.split("=");
                 *if*  (proc.waitFor() == 0&&  results.length == 2){



                     //first window
                     String[] firstWindowProperties = results[1].split(",");
                     *int*  x = 
Integer.parseInt(firstWindowProperties[0].trim());


                     *int*  y = 
Integer.parseInt(firstWindowProperties[1].trim());
                     *int*  width = 
Integer.parseInt(firstWindowProperties[2].trim());


                     *int*  height = 
Integer.parseInt(firstWindowProperties[3].trim());
                     *return*  *new*  Rectangle(x, y, width, height);


                 }
             }  *catch*  (Exception ex){
                 ex.printStackTrace();
                 *return*  getNormalAdequateSize();


             }
         }
         *return*  getNormalAdequateSize();
     }

     *private*  Rectangle getNormalAdequateSize()*throws*  HeadlessException{


         Insets i = getToolkit().getScreenInsets(getGraphicsConfiguration());
         Rectangle max =*new*  Rectangle(getToolkit().getScreenSize());
         max.x += i.left;
         max.y += i.top;


         max.width -= (i.left + i.right);
         max.height -= (i.top + i.bottom);
         *return*  max;


     }


Reply via email to