Proper workaround for Chrome's scrollbar bug
Avoid applying this workaround more than necessary. Also comment a bit more why this hack is needed.
This commit is contained in:
parent
b56772ec43
commit
e677b66cc7
26
app/ui.js
26
app/ui.js
|
|
@ -1241,6 +1241,7 @@ var UI;
|
||||||
} else if (resizeMode === 'scale' || resizeMode === 'downscale') {
|
} else if (resizeMode === 'scale' || resizeMode === 'downscale') {
|
||||||
var downscaleOnly = resizeMode === 'downscale';
|
var downscaleOnly = resizeMode === 'downscale';
|
||||||
display.autoscale(screen.w, screen.h, downscaleOnly);
|
display.autoscale(screen.w, screen.h, downscaleOnly);
|
||||||
|
UI.fixScrollbars();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -1248,16 +1249,7 @@ var UI;
|
||||||
// Gets the the size of the available viewport in the browser window
|
// Gets the the size of the available viewport in the browser window
|
||||||
screenSize: function() {
|
screenSize: function() {
|
||||||
var screen = document.getElementById('noVNC_screen');
|
var screen = document.getElementById('noVNC_screen');
|
||||||
var width, height;
|
return {w: screen.offsetWidth, h: screen.offsetHeight};
|
||||||
|
|
||||||
screen.style.overflow = "hidden";
|
|
||||||
|
|
||||||
width = screen.offsetWidth;
|
|
||||||
height = screen.offsetHeight;
|
|
||||||
|
|
||||||
screen.style.overflow = "auto";
|
|
||||||
|
|
||||||
return {w: width, h: height};
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Normally we only apply the current resize mode after a window resize
|
// Normally we only apply the current resize mode after a window resize
|
||||||
|
|
@ -1311,6 +1303,7 @@ var UI;
|
||||||
// When clipping is enabled, the screen is limited to
|
// When clipping is enabled, the screen is limited to
|
||||||
// the size of the browser window.
|
// the size of the browser window.
|
||||||
display.viewportChangeSize(size.w, size.h);
|
display.viewportChangeSize(size.w, size.h);
|
||||||
|
UI.fixScrollbars();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Changing the viewport may change the state of
|
// Changing the viewport may change the state of
|
||||||
|
|
@ -1667,6 +1660,19 @@ var UI;
|
||||||
|
|
||||||
updateSessionSize: function(rfb, width, height) {
|
updateSessionSize: function(rfb, width, height) {
|
||||||
UI.updateViewClip();
|
UI.updateViewClip();
|
||||||
|
UI.fixScrollbars();
|
||||||
|
},
|
||||||
|
|
||||||
|
fixScrollbars: function() {
|
||||||
|
// This is a hack because Chrome screws up the calculation
|
||||||
|
// for when scrollbars are needed. So to fix it we temporarily
|
||||||
|
// toggle them off and on.
|
||||||
|
var screen = document.getElementById('noVNC_screen');
|
||||||
|
screen.style.overflow = 'hidden';
|
||||||
|
// Force Chrome to recalculate the layout by asking for
|
||||||
|
// an element's dimensions
|
||||||
|
screen.getBoundingClientRect();
|
||||||
|
screen.style.overflow = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
updateDesktopName: function(rfb, name) {
|
updateDesktopName: function(rfb, name) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue