]> git.proxmox.com Git - novnc-pve.git/commitdiff
add a setting for local cursor
authorDominik Csapak <d.csapak@proxmox.com>
Thu, 19 Jul 2018 14:38:15 +0000 (16:38 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 23 Jul 2018 09:23:11 +0000 (11:23 +0200)
noVNC logic is this: do not show a local cursor, except when the server
sends it

this cannot happen with qemu (excluding QXL) and so we only ever have
the remote cursor.

since that is sometimes very laggy, add the option to show the local
cursor in addition

this reinstates the old behaviour where the user would (normally)
see two mouse cursors: one remote and one local, but since
this can be configured now, users which do not want this can
turn it off

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
debian/patches/0011-add-localCursor-setting-to-rfb.patch [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/0011-add-localCursor-setting-to-rfb.patch b/debian/patches/0011-add-localCursor-setting-to-rfb.patch
new file mode 100644 (file)
index 0000000..50d2410
--- /dev/null
@@ -0,0 +1,146 @@
+From c00b6dd12a3daa100673561cdedc5909ed4c3738 Mon Sep 17 00:00:00 2001
+From: Dominik Csapak <d.csapak@proxmox.com>
+Date: Thu, 19 Jul 2018 11:31:51 +0200
+Subject: [PATCH 11/11] add localCursor setting to rfb
+
+and use it in app.js (default true)
+
+Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
+---
+ app/ui.js           |  9 +++++++++
+ core/rfb.js         | 10 ++++++++++
+ core/util/cursor.js | 15 ++++++++++++++-
+ vnc.html            |  3 +++
+ 4 files changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/app/ui.js b/app/ui.js
+index c523fcd..ac310ba 100644
+--- a/app/ui.js
++++ b/app/ui.js
+@@ -161,6 +161,7 @@ const UI = {
+         UI.initSetting('view_clip', false);
+         UI.initSetting('resize', 'off');
+         UI.initSetting('autoresize', true);
++        UI.initSetting('local_cursor', true);
+         UI.initSetting('shared', true);
+         UI.initSetting('view_only', false);
+         UI.initSetting('path', 'websockify');
+@@ -350,6 +351,8 @@ const UI = {
+         UI.addSettingChangeHandler('shared');
+         UI.addSettingChangeHandler('view_only');
+         UI.addSettingChangeHandler('view_only', UI.updateViewOnly);
++        UI.addSettingChangeHandler('local_cursor');
++        UI.addSettingChangeHandler('local_cursor', UI.updateLocalCursor);
+         UI.addSettingChangeHandler('host');
+         UI.addSettingChangeHandler('port');
+         UI.addSettingChangeHandler('path');
+@@ -1052,6 +1055,7 @@ const UI = {
+         UI.rfb.addEventListener("desktopname", UI.updateDesktopName);
+         UI.rfb.addEventListener("fbresize", UI.updateSessionSize);
+         UI.rfb.clipViewport = UI.getSetting('view_clip');
++        UI.rfb.localCursor = UI.getSetting('local_cursor');
+         UI.rfb.scaleViewport = UI.getSetting('resize') === 'scale';
+         UI.rfb.resizeSession = UI.getSetting('resize') === 'remote';
+@@ -1655,6 +1659,11 @@ const UI = {
+         }
+     },
++    updateLocalCursor() {
++        if (!UI.rfb) return;
++        UI.rfb.localCursor = UI.getSetting('local_cursor');
++    },
++
+     updateViewOnly() {
+         if (!UI.rfb) return;
+         UI.rfb.viewOnly = UI.getSetting('view_only');
+diff --git a/core/rfb.js b/core/rfb.js
+index 3e0f176..8216c53 100644
+--- a/core/rfb.js
++++ b/core/rfb.js
+@@ -262,6 +262,7 @@ export default class RFB extends EventTargetMixin {
+         this._clipViewport = false;
+         this._scaleViewport = false;
+         this._resizeSession = false;
++        this._localCursor = false;
+     }
+     // ===== PROPERTIES =====
+@@ -315,6 +316,15 @@ export default class RFB extends EventTargetMixin {
+         }
+     }
++    get localCursor() { return this._localCursor; }
++    set localCursor(localCursor) {
++        this._localCursor = localCursor;
++
++        if (this._cursor) {
++            this._cursor.setLocalCursor(localCursor);
++        }
++    }
++
+     // ===== PUBLIC METHODS =====
+     disconnect() {
+diff --git a/core/util/cursor.js b/core/util/cursor.js
+index 18aa7be..2a99bd4 100644
+--- a/core/util/cursor.js
++++ b/core/util/cursor.js
+@@ -12,6 +12,8 @@ export default class Cursor {
+     constructor(container) {
+         this._target = null;
++        this._showLocalCursor = false;
++
+         this._canvas = document.createElement('canvas');
+         if (useFallback) {
+@@ -128,7 +130,7 @@ export default class Cursor {
+     }
+     clear() {
+-        this._target.style.cursor = 'none';
++        this._target.style.cursor = this._showLocalCursor ? 'default' : 'none';
+         this._canvas.width = 0;
+         this._canvas.height = 0;
+         this._position.x = this._position.x + this._hotSpot.x;
+@@ -137,6 +139,11 @@ export default class Cursor {
+         this._hotSpot.y = 0;
+     }
++    setLocalCursor(cursor) {
++        this._showLocalCursor = cursor;
++        this._updateLocalCursor();
++    }
++
+     _handleMouseOver(event) {
+         // This event could be because we're entering the target, or
+         // moving around amongst its sub elements. Let the move handler
+@@ -225,4 +232,10 @@ export default class Cursor {
+         this._canvas.style.left = this._position.x + "px";
+         this._canvas.style.top = this._position.y + "px";
+     }
++
++    _updateLocalCursor() {
++        if (this._target)
++            this._target.style.cursor = this._showLocalCursor ? 'default' : 'none';
++    }
++
+ }
+diff --git a/vnc.html b/vnc.html
+index 83825eb..438d531 100644
+--- a/vnc.html
++++ b/vnc.html
+@@ -177,6 +177,9 @@
+                         <label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
+                     </li>
+                     <li>
++                        <label><input id="noVNC_setting_local_cursor" type="checkbox" /> Local Cursor</label>
++                    </li>
++                    <li>
+                         <label><input id="noVNC_setting_autoresize" type="checkbox" /> Autoresize Window</label>
+                     </li>
+                     <li>
+-- 
+2.11.0
+
index de6890a2c6c06351acd597082e5b04df364534de..5f92a7752fb990ba62237910787046c1e0a2ef8f 100644 (file)
@@ -8,3 +8,4 @@
 0008-add-replaceable-snippets-in-vnc.html.patch
 0009-decrease-animation-time.patch
 0010-use-only-app.js.patch
+0011-add-localCursor-setting-to-rfb.patch