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