]> git.proxmox.com Git - mirror_novnc.git/commitdiff
Allow view_only to be changed while connected
authorSamuel Mannehed <samuel@cendio.se>
Sat, 18 Feb 2017 19:43:25 +0000 (20:43 +0100)
committerSamuel Mannehed <samuel@cendio.se>
Sun, 19 Feb 2017 00:53:41 +0000 (01:53 +0100)
app/ui.js
core/rfb.js

index 2dd45363581af87c89866dd2442320a6a5d7361f..e2a2b3d13554d4acbb3aef120e835b516e6eccb2 100644 (file)
--- a/app/ui.js
+++ b/app/ui.js
@@ -424,6 +424,7 @@ var UI;
             UI.addSettingChangeHandler('clip', UI.updateViewClip);
             UI.addSettingChangeHandler('shared');
             UI.addSettingChangeHandler('view_only');
+            UI.addSettingChangeHandler('view_only', UI.updateViewOnly);
             UI.addSettingChangeHandler('host');
             UI.addSettingChangeHandler('port');
             UI.addSettingChangeHandler('path');
@@ -506,7 +507,6 @@ var UI;
 
             UI.enableDisableViewClip();
             document.getElementById('noVNC_setting_shared').disabled = UI.connected;
-            document.getElementById('noVNC_setting_view_only').disabled = UI.connected;
             document.getElementById('noVNC_setting_host').disabled = UI.connected;
             document.getElementById('noVNC_setting_port').disabled = UI.connected;
             document.getElementById('noVNC_setting_path').disabled = UI.connected;
@@ -1065,9 +1065,10 @@ var UI;
             UI.rfb.set_true_color(UI.getSetting('true_color'));
             UI.rfb.set_local_cursor(UI.getSetting('cursor'));
             UI.rfb.set_shared(UI.getSetting('shared'));
-            UI.rfb.set_view_only(UI.getSetting('view_only'));
             UI.rfb.set_repeaterID(UI.getSetting('repeaterID'));
 
+            UI.updateViewOnly();
+
             UI.rfb.connect(host, port, password, path);
         },
 
@@ -1655,6 +1656,10 @@ var UI;
             }
         },
 
+        updateViewOnly: function() {
+            UI.rfb.set_view_only(UI.getSetting('view_only'));
+        },
+
         updateLogging: function() {
             WebUtil.init_logging(UI.getSetting('logging'));
         },
index eb93971285b26d1ab64cb876c2d0b30b6423ae2f..2de974b760ddd984e49d44139d584988196bc3a1 100644 (file)
         }
     };
 
+    RFB.prototype.set_view_only = function (view_only) {
+        this._view_only = view_only;
+
+        if (this._rfb_connection_state === "connecting" ||
+            this._rfb_connection_state === "connected") {
+            if (view_only) {
+                this._keyboard.ungrab();
+                this._mouse.ungrab();
+            } else {
+                this._keyboard.grab();
+                this._mouse.grab();
+            }
+        }
+    };
+
     RFB.prototype.get_display = function () { return this._display; };
     RFB.prototype.get_keyboard = function () { return this._keyboard; };
     RFB.prototype.get_mouse = function () { return this._mouse; };