diff --git a/NewWindow.html b/NewWindow.html new file mode 100644 index 000000000..ddbfa4928 --- /dev/null +++ b/NewWindow.html @@ -0,0 +1,67 @@ + + + + noVNC + + + +
+ +
+ + + + \ No newline at end of file diff --git a/app/ui.js b/app/ui.js index 71933af63..5e7f389d0 100644 --- a/app/ui.js +++ b/app/ui.js @@ -42,6 +42,10 @@ const UI = { reconnectCallback: null, reconnectPassword: null, + // Old browser resolution + bodyWidthBrowserResize: 0, + bodyHeightBrowserResize: 0, + prime() { return WebUtil.initSettings().then(() => { if (document.readyState === "interactive" || document.readyState === "complete") { @@ -988,6 +992,28 @@ const UI = { .classList.remove("noVNC_open"); }, + _updateBrowserWindows(width, height) { + let bodyWidth = document.body.clientWidth; + let bodyHeight = document.body.clientHeight; + + let OldResolutionEqual = false; + if (UI.bodyWidthBrowserResize === document.body.clientWidth && + UI.bodyHeightBrowserResize === document.body.clientHeight) { + OldResolutionEqual = true; + } + if (UI.bodyHeightBrowserResize === 0 || + OldResolutionEqual) { + if ((width != 0) && (height != 0)) { + window.resizeBy(width - bodyWidth, height - bodyHeight); + UI.bodyWidthBrowserResize = width; + UI.bodyHeightBrowserResize = height; + } + } else { + // disabled + UI.bodyWidthBrowserResize = 0; + } + }, + connect(event, password) { // Ignore when rfb already exists @@ -1058,6 +1084,12 @@ const UI = { UI.rfb.clipViewport = UI.getSetting('view_clip'); UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale'; UI.rfb.resizeSession = UI.getSetting('resize') === 'remote'; + if (UI.getSetting('resize') === 'off') { + UI.bodyHeightBrowserResize = 0; + UI.rfb.resizeBrowser = UI._updateBrowserWindows; + } else { + UI.rfb.resizeBrowser = false; + } UI.rfb.qualityLevel = parseInt(UI.getSetting('quality')); UI.rfb.compressionLevel = parseInt(UI.getSetting('compression')); UI.rfb.showDotCursor = UI.getSetting('show_dot'); @@ -1311,6 +1343,12 @@ const UI = { UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale'; UI.rfb.resizeSession = UI.getSetting('resize') === 'remote'; + if (UI.getSetting('resize') === 'off') { + UI.bodyHeightBrowserResize = 0; + UI.rfb.resizeBrowser = UI._updateBrowserWindows; + } else { + UI.rfb.resizeBrowser = false; + } }, /* ------^------- diff --git a/core/rfb.js b/core/rfb.js index 0007bed86..422657be0 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -294,6 +294,7 @@ export default class RFB extends EventTargetMixin { this._clippingViewport = false; this._scaleViewport = false; this._resizeSession = false; + this._resizeBrowser = false; this._showDotCursor = false; if (options.showDotCursor !== undefined) { @@ -364,6 +365,14 @@ export default class RFB extends EventTargetMixin { } } + get resizeBrowser() { return this._resizeBrowser; } + set resizeBrowser(void_) { + this._resizeBrowser = void_; + if (this._resizeBrowser && (this._rfbConnectionState === 'connected')) { + this._resizeBrowser(this._fbWidth, this._fbHeight); + } + } + get showDotCursor() { return this._showDotCursor; } set showDotCursor(show) { this._showDotCursor = show; @@ -2875,6 +2884,10 @@ export default class RFB extends EventTargetMixin { this._fbWidth = width; this._fbHeight = height; + if (this._resizeBrowser) { + this._resizeBrowser(width, height); + } + this._display.resize(this._fbWidth, this._fbHeight); // Adjust the visible viewport based on the new dimensions