summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/display.js26
-rw-r--r--include/ui.js36
-rw-r--r--include/util.js23
-rw-r--r--tests/test.display.js16
-rw-r--r--vnc.html4
5 files changed, 50 insertions, 55 deletions
diff --git a/include/display.js b/include/display.js
index d10d9b9..201acf3 100644
--- a/include/display.js
+++ b/include/display.js
@@ -86,29 +86,9 @@ var Display;
}
// Determine browser support for setting the cursor via data URI scheme
- var curDat = [];
- for (var i = 0; i < 8 * 8 * 4; i++) {
- curDat.push(255);
- }
- try {
- var curSave = this._target.style.cursor;
- Display.changeCursor(this._target, curDat, curDat, 2, 2, 8, 8);
- if (this._target.style.cursor) {
- if (this._cursor_uri === null || this._cursor_uri === undefined) {
- this._cursor_uri = true;
- }
- Util.Info("Data URI scheme cursor supported");
- this._target.style.cursor = curSave;
- } else {
- if (this._cursor_uri === null || this._cursor_uri === undefined) {
- this._cursor_uri = false;
- }
- Util.Warn("Data URI scheme cursor not supported");
- this._target.style.cursor = "none";
- }
- } catch (exc) {
- Util.Error("Data URI scheme cursor test exception: " + exc);
- this._cursor_uri = false;
+ if (this._cursor_uri || this._cursor_uri === null ||
+ this._cursor_uri === undefined) {
+ this._cursor_uri = Util.browserSupportsCursorURIs(this._target);
}
Util.Debug("<< Display.constructor");
diff --git a/include/ui.js b/include/ui.js
index 25f8617..a72d5fa 100644
--- a/include/ui.js
+++ b/include/ui.js
@@ -97,8 +97,6 @@ var UI;
UI.initSetting('path', 'websockify');
UI.initSetting('repeaterID', '');
- UI.initRFB();
-
var autoconnect = WebUtil.getQueryVar('autoconnect', false);
if (autoconnect === 'true' || autoconnect == '1') {
autoconnect = true;
@@ -136,7 +134,7 @@ var UI;
Util.addEvent(window, 'load', UI.keyboardinputReset);
Util.addEvent(window, 'beforeunload', function () {
- if (UI.rfb_state === 'normal') {
+ if (UI.rfb && UI.rfb_state === 'normal') {
return "You are currently connected.";
}
} );
@@ -213,12 +211,14 @@ var UI;
$D("noVNC_connect_button").onclick = UI.connect;
$D("noVNC_resize").onchange = function () {
- var connected = UI.rfb_state === 'normal' ? true : false;
+ var connected = UI.rfb && UI.rfb_state === 'normal';
UI.enableDisableClip(connected);
};
},
onresize: function (callback) {
+ if (!UI.rfb) return;
+
var size = UI.getCanvasLimit();
if (size && UI.rfb_state === 'normal' && UI.rfb.get_display()) {
@@ -480,7 +480,7 @@ var UI;
} else {
UI.updateSetting('encrypt');
UI.updateSetting('true_color');
- if (UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
UI.updateSetting('cursor');
} else {
UI.updateSetting('cursor', !UI.isTouchDevice);
@@ -536,7 +536,7 @@ var UI;
//Util.Debug(">> settingsApply");
UI.saveSetting('encrypt');
UI.saveSetting('true_color');
- if (UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
UI.saveSetting('cursor');
}
@@ -558,7 +558,7 @@ var UI;
WebUtil.selectStylesheet(UI.getSetting('stylesheet'));
WebUtil.init_logging(UI.getSetting('logging'));
UI.setViewClip();
- UI.setViewDrag(UI.rfb.get_viewportDrag());
+ UI.setViewDrag(UI.rfb && UI.rfb.get_viewportDrag());
//Util.Debug("<< settingsApply");
},
@@ -642,13 +642,6 @@ var UI;
break;
}
- switch (state) {
- case 'fatal':
- case 'failed':
- case 'disconnected':
- UI.initRFB();
- }
-
if (typeof(msg) !== 'undefined') {
$D('noVNC-control-bar').setAttribute("class", klass);
$D('noVNC_status').innerHTML = msg;
@@ -659,13 +652,12 @@ var UI;
// Disable/enable controls depending on connection state
updateVisualState: function() {
- var connected = UI.rfb_state === 'normal' ? true : false;
+ var connected = UI.rfb && UI.rfb_state === 'normal';
//Util.Debug(">> updateVisualState");
$D('noVNC_encrypt').disabled = connected;
$D('noVNC_true_color').disabled = connected;
- if (UI.rfb && UI.rfb.get_display() &&
- UI.rfb.get_display().get_cursor_uri()) {
+ if (Util.browserSupportsCursorURIs()) {
$D('noVNC_cursor').disabled = connected;
} else {
UI.updateSetting('cursor', !UI.isTouchDevice);
@@ -780,6 +772,8 @@ var UI;
throw new Error("Must set host and port");
}
+ UI.initRFB();
+
UI.rfb.set_encrypt(UI.getSetting('encrypt'));
UI.rfb.set_true_color(UI.getSetting('true_color'));
UI.rfb.set_local_cursor(UI.getSetting('cursor'));
@@ -809,11 +803,15 @@ var UI;
},
displayBlur: function() {
+ if (!UI.rfb) return;
+
UI.rfb.get_keyboard().set_focused(false);
UI.rfb.get_mouse().set_focused(false);
},
displayFocus: function() {
+ if (!UI.rfb) return;
+
UI.rfb.get_keyboard().set_focused(true);
UI.rfb.get_mouse().set_focused(true);
},
@@ -882,7 +880,7 @@ var UI;
// Toggle/set/unset the viewport drag/move button
setViewDrag: function(drag) {
- if (!UI.rfb) { return; }
+ if (!UI.rfb) return;
UI.updateViewDragButton();
@@ -953,7 +951,7 @@ var UI;
// sending keyCodes in the normal keyboard events when using on screen keyboards.
keyInput: function(event) {
- if (!UI.rfb) { return; }
+ if (!UI.rfb) return;
var newValue = event.target.value;
diff --git a/include/util.js b/include/util.js
index 02e7225..ed0e3cd 100644
--- a/include/util.js
+++ b/include/util.js
@@ -508,6 +508,29 @@ Util.stopEvent = function (e) {
else { e.returnValue = false; }
};
+Util._cursor_uris_supported = null;
+
+Util.browserSupportsCursorURIs = function () {
+ if (Util._cursor_uris_supported === null) {
+ try {
+ var target = document.createElement('canvas');
+ target.style.cursor = 'url("data:image/x-icon;base64,AAACAAEACAgAAAIAAgA4AQAAFgAAACgAAAAIAAAAEAAAAAEAIAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAA==") 2 2, default';
+
+ if (target.style.cursor) {
+ Util.Info("Data URI scheme cursor supported");
+ Util._cursor_uris_supported = true;
+ } else {
+ Util.Warn("Data URI scheme cursor not supported");
+ Util._cursor_uris_supported = false;
+ }
+ } catch (exc) {
+ Util.Error("Data URI scheme cursor test exception: " + exc);
+ Util._cursor_uris_supported = false;
+ }
+ }
+
+ return Util._cursor_uris_supported;
+};
// Set browser engine versions. Based on mootools.
Util.Features = {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)};
diff --git a/tests/test.display.js b/tests/test.display.js
index d54cb82..56dfc22 100644
--- a/tests/test.display.js
+++ b/tests/test.display.js
@@ -28,35 +28,29 @@ describe('Display/Canvas Helper', function () {
describe('checking for cursor uri support', function () {
beforeEach(function () {
- this._old_change_cursor = Display.changeCursor;
+ this._old_browser_supports_cursor_uris = Util.browserSupportsCursorURIs;
});
it('should disable cursor URIs if there is no support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = undefined;
- };
+ Util.browserSupportsCursorURIs = function () { return false; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false });
expect(display._cursor_uri).to.be.false;
});
it('should enable cursor URIs if there is support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = 'pointer';
- };
+ Util.browserSupportsCursorURIs = function () { return true; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false });
expect(display._cursor_uri).to.be.true;
});
it('respect the cursor_uri option if there is support', function () {
- Display.changeCursor = function(target) {
- target.style.cursor = 'pointer';
- };
+ Util.browserSupportsCursorURIs = function () { return false; };
var display = new Display({ target: document.createElement('canvas'), prefer_js: true, viewport: false, cursor_uri: false });
expect(display._cursor_uri).to.be.false;
});
afterEach(function () {
- Display.changeCursor = this._old_change_cursor;
+ Util.browserSupportsCursorURIs = this._old_browser_supports_cursor_uris;
});
});
diff --git a/vnc.html b/vnc.html
index b8bda05..b8d11c7 100644
--- a/vnc.html
+++ b/vnc.html
@@ -46,7 +46,7 @@
</head>
<body>
- <div id="noVNC-control-bar">
+ <div id="noVNC-control-bar" class="noVNC_status_normal">
<!--noVNC Mobile Device only Buttons-->
<div class="noVNC-buttons-left">
<input type="image" alt="viewport drag" src="images/drag.png"
@@ -87,7 +87,7 @@
</div>
</div>
- <div id="noVNC_status">Loading</div>
+ <div id="noVNC_status"></div>
<!--noVNC Buttons-->
<div class="noVNC-buttons-right">