GUAC-639: Only send clipboard to remote end if different from current remote contents.

This commit is contained in:
Michael Jumper
2014-04-23 19:09:12 -07:00
parent d48bff62f2
commit b29032d52e

View File

@@ -246,6 +246,7 @@ GuacUI.Client = {
/* Clipboard */ /* Clipboard */
"remote_clipboard" : "",
"clipboard_integration_enabled" : undefined "clipboard_integration_enabled" : undefined
}; };
@@ -973,14 +974,26 @@ GuacUI.Client.getSizeString = function(bytes) {
}; };
/** /**
* Commits the current contents of the clipboard textarea to the remote * Commits the current contents of the clipboard textarea to session storage,
* clipboard and the local Guacamole clipboard shared across connections. * and thus to the remote clipboard if the client is connected.
*/ */
GuacUI.Client.commitClipboard = function() { GuacUI.Client.commitClipboard = function() {
// Set value if changed
var new_value = GuacUI.Client.clipboard.value; var new_value = GuacUI.Client.clipboard.value;
GuacamoleSessionStorage.setItem("clipboard", new_value); GuacamoleSessionStorage.setItem("clipboard", new_value);
};
/**
* Sets the contents of the remote clipboard, if the contents given are
* different.
*
* @param {String} data The data to assign to the clipboard.
*/
GuacUI.Client.setClipboard = function(data) {
if (data !== GuacUI.Client.remote_clipboard && GuacUI.Client.attachedClient) {
GuacUI.Client.remote_clipboard = data;
GuacUI.Client.attachedClient.setClipboard(data);
}
}; };
@@ -1136,7 +1149,7 @@ GuacUI.Client.attach = function(guac) {
// Update clipboard with current data // Update clipboard with current data
var clipboard = GuacamoleSessionStorage.getItem("clipboard"); var clipboard = GuacamoleSessionStorage.getItem("clipboard");
if (clipboard) if (clipboard)
guac.setClipboard(clipboard); GuacUI.Client.setClipboard(clipboard);
break; break;
@@ -1201,6 +1214,7 @@ GuacUI.Client.attach = function(guac) {
// Set contents when done // Set contents when done
reader.onend = function clipboard_text_end() { reader.onend = function clipboard_text_end() {
GuacUI.Client.remote_clipboard = data;
GuacamoleSessionStorage.setItem("clipboard", data); GuacamoleSessionStorage.setItem("clipboard", data);
}; };
@@ -1454,8 +1468,7 @@ GuacUI.Client.attach = function(guac) {
// Override and handle paste only if integration is enabled // Override and handle paste only if integration is enabled
if (GuacUI.Client.clipboard_integration_enabled) { if (GuacUI.Client.clipboard_integration_enabled) {
e.preventDefault(); e.preventDefault();
if (GuacUI.Client.attachedClient) GuacUI.Client.setClipboard(e.clipboardData.getData("text/plain"));
GuacUI.Client.attachedClient.setClipboard(e.clipboardData.getData("text/plain"));
} }
}, false); }, false);
@@ -1503,9 +1516,9 @@ GuacUI.Client.attach = function(guac) {
}; };
GuacamoleSessionStorage.addChangeListener(function(name, value) { GuacamoleSessionStorage.addChangeListener(function(name, value) {
if (name === "clipboard" && GuacUI.Client.attachedClient) { if (name === "clipboard") {
GuacUI.Client.clipboard.value = value; GuacUI.Client.clipboard.value = value;
GuacUI.Client.attachedClient.setClipboard(value); GuacUI.Client.setClipboard(value);
} }
}); });