summaryrefslogtreecommitdiffstats
path: root/java/com/tigervnc
diff options
context:
space:
mode:
authorBrian P. Hinz <bphinz@users.sf.net>2016-02-10 23:23:02 -0500
committerBrian P. Hinz <bphinz@users.sf.net>2016-02-10 23:30:30 -0500
commit668873aed01ec990d4f16539e041d38abde6fb57 (patch)
tree5163ec8e40d4c1865d992b7a80a5424332278446 /java/com/tigervnc
parentc1cbc705c245e4fe9463ce33ddd2e0734d41c8f9 (diff)
downloadtigervnc-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.java23
-rw-r--r--java/com/tigervnc/vncviewer/DesktopWindow.java12
-rw-r--r--java/com/tigervnc/vncviewer/Viewport.java16
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);