This commit is contained in:
Samuel Mannehed 2017-09-05 12:33:16 +00:00 committed by GitHub
commit 044985185f
3 changed files with 48 additions and 17 deletions

View File

@ -38,7 +38,6 @@ var UI = {
controlbarMouseDownOffsetY: 0,
isSafari: false,
rememberedClipSetting: null,
lastKeyboardinput: null,
defaultKeyboardinputLen: 100,
@ -172,7 +171,7 @@ var UI = {
UI.initSetting('port', port);
UI.initSetting('encrypt', (window.location.protocol === "https:"));
UI.initSetting('cursor', !isTouchDevice);
UI.initSetting('clip', false);
UI.initSetting('view_clip', false);
UI.initSetting('resize', 'off');
UI.initSetting('shared', true);
UI.initSetting('view_only', false);
@ -384,11 +383,13 @@ var UI = {
UI.addSettingChangeHandler('encrypt');
UI.addSettingChangeHandler('cursor');
UI.addSettingChangeHandler('cursor', UI.updateLocalCursor);
UI.addSettingChangeHandler('clipboard');
UI.addSettingChangeHandler('clipboard', UI.updateClipboard);
UI.addSettingChangeHandler('resize');
UI.addSettingChangeHandler('resize', UI.enableDisableViewClip);
UI.addSettingChangeHandler('resize', UI.applyResizeMode);
UI.addSettingChangeHandler('clip');
UI.addSettingChangeHandler('clip', UI.updateViewClip);
UI.addSettingChangeHandler('view_clip');
UI.addSettingChangeHandler('view_clip', UI.updateViewClip);
UI.addSettingChangeHandler('shared');
UI.addSettingChangeHandler('view_only');
UI.addSettingChangeHandler('view_only', UI.updateViewOnly);
@ -893,7 +894,7 @@ var UI = {
UI.updateSetting('cursor', !isTouchDevice);
UI.disableSetting('cursor');
}
UI.updateSetting('clip');
UI.updateSetting('view_clip');
UI.updateSetting('resize');
UI.updateSetting('shared');
UI.updateSetting('view_only');
@ -1003,23 +1004,43 @@ var UI = {
},
clipboardReceive: function(rfb, text) {
if (!UI.getSetting('clipboard')) return;
Log.Debug(">> UI.clipboardReceive: " + text.substr(0,40) + "...");
document.getElementById('noVNC_clipboard_text').value = text;
Log.Debug("<< UI.clipboardReceive");
},
clipboardClear: function() {
if (!UI.getSetting('clipboard')) return;
document.getElementById('noVNC_clipboard_text').value = "";
UI.rfb.clipboardPasteFrom("");
},
clipboardSend: function() {
if (!UI.getSetting('clipboard')) return;
var text = document.getElementById('noVNC_clipboard_text').value;
Log.Debug(">> UI.clipboardSend: " + text.substr(0,40) + "...");
UI.rfb.clipboardPasteFrom(text);
Log.Debug("<< UI.clipboardSend");
},
updateClipboard: function() {
if (!UI.rfb) return;
var clipboard_enabled = UI.getSetting('clipboard');
var clipboard_button = document.getElementById('noVNC_clipboard_button');
if (clipboard_enabled) {
clipboard_button.disabled = false;
UI.rfb.set_clipboard(true);
} else {
clipboard_button.disabled = true;
UI.rfb.set_clipboard(false);
}
},
/* ------^-------
* /CLIPBOARD
* ==============
@ -1290,26 +1311,26 @@ var UI = {
/* ------^-------
* /RESIZE
* ==============
* CLIPPING
* VIEW CLIPPING
* ------v------*/
// Set and configure viewport clipping
setViewClip: function(clip) {
UI.updateSetting('clip', clip);
UI.updateSetting('view_clip', clip);
UI.updateViewClip();
},
// Update parameters that depend on the clip setting
// Update parameters that depend on the viewport clip setting
updateViewClip: function() {
if (!UI.rfb) return;
var display = UI.rfb.get_display();
var cur_clip = display.get_viewport();
var new_clip = UI.getSetting('clip');
var new_clip = UI.getSetting('view_clip');
var resizeSetting = UI.getSetting('resize');
if (resizeSetting === 'downscale' || resizeSetting === 'scale') {
// Disable clipping if we are scaling
// Disable viewport clipping if we are scaling
new_clip = false;
} else if (isTouchDevice) {
// Touch devices usually have shit scrollbars
@ -1334,20 +1355,20 @@ var UI = {
UI.updateViewDrag();
},
// Handle special cases where clipping is forced on/off or locked
// Handle special cases where viewport clipping is forced on/off or locked
enableDisableViewClip: function() {
var resizeSetting = UI.getSetting('resize');
// Disable clipping if we are scaling, connected or on touch
if (resizeSetting === 'downscale' || resizeSetting === 'scale' ||
isTouchDevice) {
UI.disableSetting('clip');
UI.disableSetting('view_clip');
} else {
UI.enableSetting('clip');
UI.enableSetting('view_clip');
}
},
/* ------^-------
* /CLIPPING
* /VIEW CLIPPING
* ==============
* VIEWDRAG
* ------v------*/

View File

@ -151,6 +151,7 @@ export default function RFB(defaults) {
'encrypt': false, // Use TLS/SSL/wss encryption
'local_cursor': false, // Request locally rendered cursor
'shared': true, // Request shared mode
'clipboard': true, // Synchronize server and client clipboard contents
'view_only': false, // Disable client mouse/keyboard
'xvp_password_sep': '@', // Separator for XVP password fields
'disconnectTimeout': 3, // Time (s) to wait for disconnection
@ -356,7 +357,12 @@ RFB.prototype = {
},
clipboardPasteFrom: function (text) {
if (this._rfb_connection_state !== 'connected' || this._view_only) { return; }
if (this._rfb_connection_state !== 'connected' ||
this._view_only ||
!this._clipboard) {
return;
}
RFB.messages.clientCutText(this._sock, text);
},
@ -1167,7 +1173,7 @@ RFB.prototype = {
var text = this._sock.rQshiftStr(length);
if (this._view_only) { return true; }
if (this._view_only || !this._clipboard) { return true; }
this._onClipboard(this, text);
@ -1426,6 +1432,7 @@ make_properties(RFB, [
['encrypt', 'rw', 'bool'], // Use TLS/SSL/wss encryption
['local_cursor', 'rw', 'bool'], // Request locally rendered cursor
['shared', 'rw', 'bool'], // Request shared mode
['clipboard', 'rw', 'bool'], // Synchronize server and client clipboard contents
['view_only', 'rw', 'bool'], // Disable client mouse/keyboard
['xvp_password_sep', 'rw', 'str'], // Separator for XVP password fields
['disconnectTimeout', 'rw', 'int'], // Time (s) to wait for disconnection

View File

@ -204,9 +204,12 @@
<li>
<label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label>
</li>
<li>
<label><input id="noVNC_setting_clipboard" type="checkbox" /> Clipboard</label>
</li>
<li><hr></li>
<li>
<label><input id="noVNC_setting_clip" type="checkbox" /> Clip to Window</label>
<label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
</li>
<li>
<label for="noVNC_setting_resize">Scaling Mode:</label>