diff options
author | Brian P. Hinz <bphinz@users.sf.net> | 2016-02-10 23:23:02 -0500 |
---|---|---|
committer | Brian P. Hinz <bphinz@users.sf.net> | 2016-02-10 23:30:30 -0500 |
commit | 668873aed01ec990d4f16539e041d38abde6fb57 (patch) | |
tree | 5163ec8e40d4c1865d992b7a80a5424332278446 /java/com/tigervnc | |
parent | c1cbc705c245e4fe9463ce33ddd2e0734d41c8f9 (diff) | |
download | tigervnc-668873aed01ec990d4f16539e041d38abde6fb57.tar.gz tigervnc-668873aed01ec990d4f16539e041d38abde6fb57.zip |
Regression fix for Java window size
6262bac introduced a regression that resulted in a 1 pixel border
around the window on some platforms. The underlying issue was
actually caused by overriding the getPreferredSize() method in
DesktopWindow and returning the scaled width & height, which
might not have been set to valid values.
Diffstat (limited to 'java/com/tigervnc')
-rw-r--r-- | java/com/tigervnc/vncviewer/CConn.java | 23 | ||||
-rw-r--r-- | java/com/tigervnc/vncviewer/DesktopWindow.java | 12 | ||||
-rw-r--r-- | java/com/tigervnc/vncviewer/Viewport.java | 16 |
3 files changed, 20 insertions, 31 deletions
diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java index f592cb54..9128b210 100644 --- a/java/com/tigervnc/vncviewer/CConn.java +++ b/java/com/tigervnc/vncviewer/CConn.java @@ -266,7 +266,6 @@ public class CConn extends CConnection implements pendingPFChange = false; if (viewer.embed.getValue()) { - desktop.setScaledSize(); setupEmbeddedFrame(); } else { recreateViewport(); @@ -301,7 +300,7 @@ public class CConn extends CConnection implements } sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); - sp.getViewport().setView(desktop); + desktop.setViewport(sp.getViewport()); viewer.getContentPane().removeAll(); viewer.add(sp); viewer.addFocusListener(new FocusAdapter() { @@ -537,7 +536,6 @@ public class CConn extends CConnection implements desktop.resize(); if (viewer.embed.getValue()) { - desktop.setScaledSize(); setupEmbeddedFrame(); } else { recreateViewport(); @@ -565,7 +563,7 @@ public class CConn extends CConnection implements if (viewport != null) viewport.dispose(); viewport = new Viewport(cp.name(), this); viewport.setUndecorated(fullScreen); - desktop.setViewport(viewport); + desktop.setViewport(viewport.getViewport()); reconfigureViewport(); if ((cp.width > 0) && (cp.height > 0)) viewport.setVisible(true); @@ -573,9 +571,7 @@ public class CConn extends CConnection implements } private void reconfigureViewport() { - boolean pack = true; Dimension dpySize = viewport.getScreenSize(); - desktop.setScaledSize(); int w = desktop.scaledWidth; int h = desktop.scaledHeight; if (fullScreen) { @@ -587,26 +583,21 @@ public class CConn extends CConnection implements } else { int wmDecorationWidth = viewport.getInsets().left + viewport.getInsets().right; int wmDecorationHeight = viewport.getInsets().top + viewport.getInsets().bottom; - if (w + wmDecorationWidth >= dpySize.width) { + if (w + wmDecorationWidth >= dpySize.width) w = dpySize.width - wmDecorationWidth; - pack = false; - } - if (h + wmDecorationHeight >= dpySize.height) { + if (h + wmDecorationHeight >= dpySize.height) h = dpySize.height - wmDecorationHeight; - pack = false; - } - if (viewport.getExtendedState() == JFrame.MAXIMIZED_BOTH) { w = viewport.getSize().width; h = viewport.getSize().height; int x = viewport.getLocation().x; int y = viewport.getLocation().y; - viewport.setGeometry(x, y, w, h, pack); + viewport.setGeometry(x, y, w, h); } else { int x = (dpySize.width - w - wmDecorationWidth) / 2; int y = (dpySize.height - h - wmDecorationHeight)/2; viewport.setExtendedState(JFrame.NORMAL); - viewport.setGeometry(x, y, w, h, pack); + viewport.setGeometry(x, y, w, h); } Viewport.setFullScreenWindow(null); } @@ -1005,8 +996,6 @@ public class CConn extends CConnection implements } int scaleFactor = Integer.parseInt(scaleString.substring(0, scaleString.length())); - if (desktop != null) - desktop.setScaledSize(); } if (viewer.desktopSize.getValue() != null && viewer.desktopSize.getValue().split("x").length == 2) { diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java index 10d158c4..ff48fc1c 100644 --- a/java/com/tigervnc/vncviewer/DesktopWindow.java +++ b/java/com/tigervnc/vncviewer/DesktopWindow.java @@ -53,6 +53,7 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener, CConn cc_) { cc = cc_; setSize(width, height); + setScaledSize(); setOpaque(false); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); @@ -105,8 +106,14 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener, public final PixelFormat getPF() { return im.getPF(); } - public void setViewport(Viewport viewport) { - viewport.setChild(this); + public void setViewport(JViewport viewport) { + setScaledSize(); + viewport.setView(this); + // pack() must be called on a JFrame before getInsets() + // will return anything other than 0. + if (viewport.getRootPane() != null) + if (getRootPane().getParent() instanceof JFrame) + ((JFrame)getRootPane().getParent()).pack(); } // Methods called from the RFB thread - these need to be synchronized @@ -244,6 +251,7 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener, int h = cc.cp.height; hideLocalCursor(); setSize(w, h); + setScaledSize(); im.resize(w, h); } diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java index f509901f..3d01b258 100644 --- a/java/com/tigervnc/vncviewer/Viewport.java +++ b/java/com/tigervnc/vncviewer/Viewport.java @@ -155,16 +155,12 @@ public class Viewport extends JFrame } } - public void setChild(DesktopWindow child) { - sp.getViewport().setView(child); + public JViewport getViewport() { + return sp.getViewport(); } - public void setGeometry(int x, int y, int w, int h, boolean pack) { - if (pack) { - pack(); - } else { - setSize(w, h); - } + public void setGeometry(int x, int y, int w, int h) { + pack(); if (!cc.fullScreen) setLocation(x, y); } @@ -182,10 +178,6 @@ public class Viewport extends JFrame for (GraphicsDevice gd : ge.getScreenDevices()) for (GraphicsConfiguration gc : gd.getConfigurations()) r = r.union(gc.getBounds()); - Dimension d = getPreferredSize(); - if (!cc.fullScreen) - if ((d.width > 0) && (d.height > 0)) - pack(); Rectangle mb = new Rectangle(r); mb.grow(getInsets().left, getInsets().bottom); setMaximizedBounds(mb); |