summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsamhed <samuel@cendio.se>2015-06-25 22:28:04 +0200
committersamhed <samuel@cendio.se>2015-06-25 22:37:05 +0200
commita6357e827611aa5b0f2a6082372ab4e06af8cfe9 (patch)
tree39d6fc2e3b7a05284235b34cd2d1495d2fe8d6a8
parent6e296bfa8acbc19d8fd0d5ba5836f902e48ce09f (diff)
downloadnovnc-a6357e827611aa5b0f2a6082372ab4e06af8cfe9.tar.gz
* Hide the fullscreen toggle button on Safari since alphanumerical
keyboard input doesn't work in fullscreen. * Force clipping mode in Internet Explorer while in fullscreen since scrollbars doesn't work in fullscreen.
-rw-r--r--include/base.css3
-rw-r--r--include/ui.js51
2 files changed, 38 insertions, 16 deletions
diff --git a/include/base.css b/include/base.css
index f69e64b..2769357 100644
--- a/include/base.css
+++ b/include/base.css
@@ -59,6 +59,9 @@ html {
#sendCtrlAltDelButton {
display: none;
}
+#fullscreenButton {
+ display: none;
+}
#noVNC_xvp_buttons {
display: none;
}
diff --git a/include/ui.js b/include/ui.js
index 0d9ad82..2e9d731 100644
--- a/include/ui.js
+++ b/include/ui.js
@@ -38,6 +38,7 @@ var UI;
ctrlOn: false,
altOn: false,
isTouchDevice: false,
+ rememberedClipSetting: null,
// Setup rfb object, load settings from browser storage, then call
// UI.init to setup the UI/menus
@@ -131,13 +132,17 @@ var UI;
UI.setBarPosition();
} );
- // Hide the button if fullscreen isn't supported
- if (!document.documentElement.requestFullscreen &&
- !document.documentElement.mozRequestFullScreen &&
- !document.documentElement.webkitRequestFullscreen &&
- !document.body.msRequestFullscreen) {
- $D('fullscreenButton').style.display = "none";
- } else {
+ var isSafari = (navigator.userAgent.indexOf('Safari') != -1 &&
+ navigator.userAgent.indexOf('Chrome') == -1);
+
+ // Only show the button if fullscreen is properly supported
+ // * Safari doesn't support alphanumerical input while in fullscreen
+ if (!isSafari &&
+ (document.documentElement.requestFullscreen ||
+ document.documentElement.mozRequestFullScreen ||
+ document.documentElement.webkitRequestFullscreen ||
+ document.body.msRequestFullscreen)) {
+ $D('fullscreenButton').style.display = "inline";
Util.addEvent(window, 'fullscreenchange', UI.updateFullscreenButton);
Util.addEvent(window, 'mozfullscreenchange', UI.updateFullscreenButton);
Util.addEvent(window, 'webkitfullscreenchange', UI.updateFullscreenButton);
@@ -231,10 +236,7 @@ var UI;
$D("noVNC_connect_button").onclick = UI.connect;
- $D("noVNC_resize").onchange = function () {
- var connected = UI.rfb && UI.rfb_state === 'normal';
- UI.enableDisableViewClip(connected);
- };
+ $D("noVNC_resize").onchange = UI.enableDisableViewClip;
},
onresize: function (callback) {
@@ -456,7 +458,7 @@ var UI;
if (document.fullscreenElement || // alternative standard method
document.mozFullScreenElement || // currently working methods
document.webkitFullscreenElement ||
- document.msFullscreenElement ) {
+ document.msFullscreenElement) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
@@ -477,6 +479,7 @@ var UI;
document.body.msRequestFullscreen();
}
}
+ UI.enableDisableViewClip();
UI.updateFullscreenButton();
},
@@ -718,7 +721,7 @@ var UI;
$D('noVNC_cursor').disabled = true;
}
- UI.enableDisableViewClip(connected);
+ UI.enableDisableViewClip();
$D('noVNC_resize').disabled = connected;
$D('noVNC_shared').disabled = connected;
$D('noVNC_view_only').disabled = connected;
@@ -875,6 +878,7 @@ var UI;
if (UI.rfb) {
display = UI.rfb.get_display();
} else {
+ UI.forceSetting('clip', clip);
return;
}
@@ -921,15 +925,30 @@ var UI;
},
// Handle special cases where clipping is forced on/off or locked
- enableDisableViewClip: function (connected) {
+ enableDisableViewClip: function () {
var resizeElem = $D('noVNC_resize');
+ var connected = UI.rfb && UI.rfb_state === 'normal';
+
if (resizeElem.value === 'downscale' || resizeElem.value === 'scale') {
- UI.forceSetting('clip', false);
+ // Disable clipping if we are scaling
+ UI.setViewClip(false);
+ $D('noVNC_clip').disabled = true;
+ } else if (document.msFullscreenElement) {
+ // The browser is IE and we are in fullscreen mode.
+ // - We need to force clipping while in fullscreen since
+ // scrollbars doesn't work.
+ UI.togglePopupStatus("Forcing clipping mode since scrollbars aren't supported by IE in fullscreen");
+ UI.rememberedClipSetting = UI.getSetting('clip');
+ UI.setViewClip(true);
$D('noVNC_clip').disabled = true;
+ } else if (document.body.msRequestFullscreen && UI.rememberedClip !== null) {
+ // Restore view clip to what it was before fullscreen on IE
+ UI.setViewClip(UI.rememberedClipSetting);
+ $D('noVNC_clip').disabled = connected || UI.isTouchDevice;
} else {
$D('noVNC_clip').disabled = connected || UI.isTouchDevice;
if (UI.isTouchDevice) {
- UI.forceSetting('clip', true);
+ UI.setViewClip(true);
}
}
},