diff --git a/include/base.css b/include/base.css index f69e64b7..2769357e 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 0d9ad82c..2e9d731a 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); } } },