<Swing Dev> getToolkit().getScreenInsets Ubuntu bug

Artem Ananiev Artem.Ananiev at Sun.COM
Mon Jan 11 09:33:49 UTC 2010


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;
>
>
>      }
>
>



More information about the swing-dev mailing list