diff --git a/guacamole/src/main/webapp/client.xhtml b/guacamole/src/main/webapp/client.xhtml
index 1f4329601..21a837fb3 100644
--- a/guacamole/src/main/webapp/client.xhtml
+++ b/guacamole/src/main/webapp/client.xhtml
@@ -65,6 +65,9 @@
diff --git a/guacamole/src/main/webapp/scripts/interface.js b/guacamole/src/main/webapp/scripts/interface.js
index c42f39a81..527fd77da 100644
--- a/guacamole/src/main/webapp/scripts/interface.js
+++ b/guacamole/src/main/webapp/scripts/interface.js
@@ -2,6 +2,7 @@
// UI Definition
var GuacamoleUI = {
+ "viewport" : document.getElementById("viewportClone"),
"display" : document.getElementById("display"),
"menu" : document.getElementById("menu"),
"menuControl" : document.getElementById("menuControl"),
@@ -303,8 +304,9 @@ GuacamoleUI.attach = function(guac) {
var mouse_view_x = mouseState.x + GuacamoleUI.display.offsetLeft - window.pageXOffset;
var mouse_view_y = mouseState.y + GuacamoleUI.display.offsetTop - window.pageYOffset;
- var view_width = document.body.clientWidth;
- var view_height = document.body.clientHeight;
+ // Determine viewport dimensioins
+ var view_width = GuacamoleUI.viewport.offsetWidth;
+ var view_height = GuacamoleUI.viewport.offsetHeight;
// Determine scroll amounts based on mouse position relative to document
@@ -323,7 +325,7 @@ GuacamoleUI.attach = function(guac) {
scroll_amount_y = mouse_view_y;
else
scroll_amount_y = 0;
-
+
// Scroll (if necessary) to keep mouse on screen.
window.scrollBy(scroll_amount_x, scroll_amount_y);
diff --git a/guacamole/src/main/webapp/styles/client.css b/guacamole/src/main/webapp/styles/client.css
index 9d5025e85..b3693aebb 100644
--- a/guacamole/src/main/webapp/styles/client.css
+++ b/guacamole/src/main/webapp/styles/client.css
@@ -171,3 +171,16 @@ div#menuControl {
z-index: 3;
}
+
+/* Viewport Clone */
+
+div#viewportClone {
+ display: table;
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ left: 0;
+ top: 0;
+
+ visibility: hidden;
+}