diff --git a/guacamole/pom.xml b/guacamole/pom.xml
index 2df9860d7..f039f0c9f 100644
--- a/guacamole/pom.xml
+++ b/guacamole/pom.xml
@@ -5,7 +5,7 @@
net.sourceforge.guacamole
guacamole-default-webapp
war
- 0.5.0
+ 0.6.0
guacamole-default-webapp
http://guacamole.sourceforge.net/
@@ -95,7 +95,7 @@
net.sourceforge.guacamole
guacamole-common-js
- 0.5.0
+ 0.6.0
zip
runtime
diff --git a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java
index dcbc446e6..f7585a662 100644
--- a/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java
+++ b/guacamole/src/main/java/net/sourceforge/guacamole/net/basic/ConfigurationList.java
@@ -53,6 +53,9 @@ public class ConfigurationList extends HttpServlet {
return;
}
+ // Do not cache
+ response.setHeader("Cache-Control", "no-cache");
+
// Write XML
response.setHeader("Content-Type", "text/xml");
PrintWriter out = response.getWriter();
diff --git a/guacamole/src/main/webapp/client.xhtml b/guacamole/src/main/webapp/client.xhtml
index ae01eb611..fb8c20c65 100644
--- a/guacamole/src/main/webapp/client.xhtml
+++ b/guacamole/src/main/webapp/client.xhtml
@@ -56,7 +56,7 @@
-
+
@@ -98,15 +98,18 @@
// Start connect after control returns from onload (allow browser
// to consider the page loaded).
- document.body.onload = function() {
+ window.onload = function() {
window.setTimeout(function() {
// Instantiate client
var guac = new Guacamole.Client(
- GuacamoleUI.display,
new Guacamole.HTTPTunnel("tunnel")
);
+ // Add client to UI
+ guac.getDisplay().className = "software-cursor";
+ GuacamoleUI.display.appendChild(guac.getDisplay());
+
// Tie UI to client
GuacamoleUI.attach(guac);
diff --git a/guacamole/src/main/webapp/scripts/interface.js b/guacamole/src/main/webapp/scripts/interface.js
index 527fd77da..8ea48a34d 100644
--- a/guacamole/src/main/webapp/scripts/interface.js
+++ b/guacamole/src/main/webapp/scripts/interface.js
@@ -42,19 +42,69 @@ var GuacamoleUI = {
var guacErrorImage = new Image();
guacErrorImage.src = "images/noguacamole-logo-24.png";
+ // Function for adding a class to an element
+ var addClass;
+
+ // Function for removing a class from an element
+ var removeClass;
+
+ // If Node.classList is supported, implement addClass/removeClass using that
+ if (Node.classList) {
+
+ addClass = function(element, classname) {
+ element.classList.add(classname);
+ };
+
+ removeClass = function(element, classname) {
+ element.classList.remove(classname);
+ };
+
+ }
+
+ // Otherwise, implement own
+ else {
+
+ addClass = function(element, classname) {
+
+ // Simply add new class
+ element.className += " " + classname;
+
+ };
+
+ removeClass = function(element, classname) {
+
+ // Filter out classes with given name
+ element.className = element.className.replace(/([^ ]+)[ ]*/g,
+ function(match, testClassname, spaces, offset, string) {
+
+ // If same class, remove
+ if (testClassname == classname)
+ return "";
+
+ // Otherwise, allow
+ return match;
+
+ }
+ );
+
+ };
+
+ }
+
+
GuacamoleUI.hideStatus = function() {
- document.body.classList.remove("guac-error");
+ removeClass(document.body, "guac-error");
GuacamoleUI.containers.state.style.visibility = "hidden";
};
GuacamoleUI.showStatus = function(text) {
- document.body.classList.remove("guac-error");
+ removeClass(document.body, "guac-error");
GuacamoleUI.containers.state.style.visibility = "visible";
GuacamoleUI.state.textContent = text;
};
GuacamoleUI.showError = function(error) {
- document.body.classList.add("guac-error");
+ addClass(document.body, "guac-error");
GuacamoleUI.state.textContent = error;
};
@@ -220,9 +270,6 @@ var GuacamoleUI = {
// When mouse hovers over top of screen, start detection of intent to open menu
GuacamoleUI.menuControl.addEventListener('mousemove', GuacamoleUI.startMenuOpenDetect, true);
- // When mouse enters display, start detection of intent to close menu
- GuacamoleUI.display.addEventListener('mouseover', GuacamoleUI.startMenuCloseDetect, true);
-
var menuShowLongPressTimeout = null;
GuacamoleUI.startLongPressDetect = function() {
@@ -234,7 +281,7 @@ var GuacamoleUI = {
menuShowLongPressTimeout = null;
GuacamoleUI.showMenu();
- }, 1000);
+ }, 800);
}
};
@@ -247,35 +294,11 @@ var GuacamoleUI = {
// Detect long-press at bottom of screen
document.body.addEventListener('touchstart', GuacamoleUI.startLongPressDetect, true);
- // Show menu if mouse leaves document
- document.addEventListener('mouseout', function(e) {
-
- // Get parent of the element the mouse pointer is leaving
- if (!e) e = window.event;
- var target = e.relatedTarget || e.toElement;
-
- // Ensure target is not document nor child of document
- var targetParent = target;
- while (targetParent != null) {
- if (targetParent == document) return;
- targetParent = targetParent.parentNode;
- }
-
- // Start detection of intent to open menu
- GuacamoleUI.startMenuOpenDetect();
-
- }, true);
-
// Reconnect button
GuacamoleUI.buttons.reconnect.onclick = function() {
window.location.reload();
};
- GuacamoleUI.display.onclick = function(e) {
- e.preventDefault();
- return false;
- };
-
// On-screen keyboard
GuacamoleUI.keyboard = new Guacamole.OnScreenKeyboard("layouts/en-us-qwerty-mobile.xml");
GuacamoleUI.containers.keyboard.appendChild(GuacamoleUI.keyboard.getElement());
@@ -295,17 +318,27 @@ var GuacamoleUI = {
// Tie UI events / behavior to a specific Guacamole client
GuacamoleUI.attach = function(guac) {
+ var guac_display = guac.getDisplay();
+
+ // When mouse enters display, start detection of intent to close menu
+ guac_display.addEventListener('mouseover', GuacamoleUI.startMenuCloseDetect, true);
+
+ guac_display.onclick = function(e) {
+ e.preventDefault();
+ return false;
+ };
+
// Mouse
- var mouse = new Guacamole.Mouse(GuacamoleUI.display);
+ var mouse = new Guacamole.Mouse(guac_display);
mouse.onmousedown = mouse.onmouseup = mouse.onmousemove =
function(mouseState) {
// Determine mouse position within view
- var mouse_view_x = mouseState.x + GuacamoleUI.display.offsetLeft - window.pageXOffset;
- var mouse_view_y = mouseState.y + GuacamoleUI.display.offsetTop - window.pageYOffset;
+ var mouse_view_x = mouseState.x + guac_display.offsetLeft - window.pageXOffset;
+ var mouse_view_y = mouseState.y + guac_display.offsetTop - window.pageYOffset;
// Determine viewport dimensioins
- var view_width = GuacamoleUI.viewport.offsetWidth;
+ var view_width = GuacamoleUI.viewport.offsetWidth;
var view_height = GuacamoleUI.viewport.offsetHeight;
// Determine scroll amounts based on mouse position relative to document
@@ -423,32 +456,6 @@ GuacamoleUI.attach = function(guac) {
// Display error message
GuacamoleUI.showError(error);
-
- // Show error by desaturating display
- var layers = guac.getLayers();
- for (var i=0; i