<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