Fixes a number of issues related to fullscreen mode. When switching out of fullscreen mode via the options dialog, setFullScreenWindow was being applied to the old reference, causing the whole screen to be blanked and unresponsive. The checkmark in the F8 menu could sometimes get out of sync with the state of the option. Cursor wasn't always being re-scaled when scale factor was changed. It seems that setCursor can still sometimes be passed a null pointer for the hotspot, so add back in a check that was removed in r5025
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5034 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index 63db1ab..fd07b27 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -995,28 +995,18 @@
String scaleString =
options.scalingFactor.getSelectedItem().toString();
String oldScaleFactor = viewer.scalingFactor.getValue();
- if (scaleString.equalsIgnoreCase("Auto")) {
- if (!oldScaleFactor.equals(scaleString)) {
- viewer.scalingFactor.setParam("Auto");
- if (desktop != null && !(options.fullScreen.isSelected() && fullScreen))
- reconfigureViewport();
- }
- } else if(scaleString.equalsIgnoreCase("Fixed Aspect Ratio")) {
- if (!oldScaleFactor.equalsIgnoreCase("FixedRatio")) {
- viewer.scalingFactor.setParam("FixedRatio");
- if (desktop != null && !(options.fullScreen.isSelected() && fullScreen))
- reconfigureViewport();
- }
- } else {
+ if (scaleString.equalsIgnoreCase("Fixed Aspect Ratio")) {
+ scaleString = new String("FixedRatio");
+ } else if (scaleString.equalsIgnoreCase("Auto")) {
+ scaleString = new String("Auto");
+ } else {
scaleString=scaleString.substring(0, scaleString.length()-1);
- if (!oldScaleFactor.equals(scaleString)) {
- viewer.scalingFactor.setParam(scaleString);
- if ((desktop != null) && (!oldScaleFactor.equalsIgnoreCase("Auto") ||
- !oldScaleFactor.equalsIgnoreCase("FixedRatio"))) {
- if (!(options.fullScreen.isSelected() && fullScreen))
- reconfigureViewport();
- }
- }
+ }
+ if (oldScaleFactor != scaleString) {
+ viewer.scalingFactor.setParam(scaleString);
+ if ((options.fullScreen.isSelected() == fullScreen) &&
+ (desktop != null))
+ recreateViewport();
}
clipboardDialog.setSendingEnabled(viewer.sendClipboard.getValue());
@@ -1148,7 +1138,7 @@
public void toggleFullScreen() {
fullScreen = !fullScreen;
- if (!fullScreen) menu.fullScreen.setSelected(false);
+ menu.fullScreen.setSelected(fullScreen);
if (viewport != null)
recreateViewport();
}
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index d7a734f..7254a0b 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -125,7 +125,7 @@
hideLocalCursor();
- cursor.hotspot = hotspot;
+ cursor.hotspot = (hotspot != null) ? hotspot : new Point(0, 0);
cursor.setSize(w, h);
cursor.setPF(getPF());
@@ -171,8 +171,8 @@
g2.dispose();
srcImage.flush();
- int x = (int)Math.floor((float)hotspot.x * scaleWidthRatio);
- int y = (int)Math.floor((float)hotspot.y * scaleHeightRatio);
+ int x = (int)Math.floor((float)cursor.hotspot.x * scaleWidthRatio);
+ int y = (int)Math.floor((float)cursor.hotspot.y * scaleHeightRatio);
x = (int)Math.min(x, Math.max(bestSize.width-1, 0));
y = (int)Math.min(y, Math.max(bestSize.height-1, 0));
java.awt.Point hs = new java.awt.Point(x, y);
diff --git a/java/com/tigervnc/vncviewer/Dialog.java b/java/com/tigervnc/vncviewer/Dialog.java
index 5e6790f..c478d4a 100644
--- a/java/com/tigervnc/vncviewer/Dialog.java
+++ b/java/com/tigervnc/vncviewer/Dialog.java
@@ -74,6 +74,7 @@
setVisible(false);
setFocusable(false);
setAlwaysOnTop(false);
+ fullScreenWindow = Viewport.getFullScreenWindow();
if (fullScreenWindow != null)
Viewport.setFullScreenWindow(fullScreenWindow);
}
diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java
index 95489fa..bc19b64 100644
--- a/java/com/tigervnc/vncviewer/Viewport.java
+++ b/java/com/tigervnc/vncviewer/Viewport.java
@@ -62,10 +62,6 @@
});
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
- if ((getExtendedState() != JFrame.MAXIMIZED_BOTH) &&
- cc.fullScreen) {
- cc.toggleFullScreen();
- }
String scaleString = cc.viewer.scalingFactor.getValue();
if (scaleString.equalsIgnoreCase("Auto") ||
scaleString.equalsIgnoreCase("FixedRatio")) {
@@ -78,22 +74,23 @@
cc.desktop.scaledHeight));
sp.validate();
if (getExtendedState() != JFrame.MAXIMIZED_BOTH &&
- scaleString.equalsIgnoreCase("FixedRatio")) {
+ scaleString.equalsIgnoreCase("FixedRatio") &&
+ !cc.fullScreen) {
int w = cc.desktop.scaledWidth + getInsets().left + getInsets().right;
int h = cc.desktop.scaledHeight + getInsets().top + getInsets().bottom;
setSize(w, h);
}
- if (cc.desktop.cursor != null) {
- Cursor cursor = cc.desktop.cursor;
- cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot,
- cursor.data, cursor.mask);
- }
}
} else {
int policy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
sp.setHorizontalScrollBarPolicy(policy);
sp.validate();
}
+ if (cc.desktop.cursor != null) {
+ Cursor cursor = cc.desktop.cursor;
+ cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot,
+ cursor.data, cursor.mask);
+ }
}
});
}