mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-09 22:51:22 +00:00
GUACAMOLE-526: Maintain full correct chain of promises for clipboard read attempts, including the "finally" used for cleanup. The "finally" handler creates a new promise with a potentially unhandled rejection otherwise.
This commit is contained in:
@@ -415,16 +415,8 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
|
|||||||
|
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
|
|
||||||
// Mark read attempt as in progress
|
|
||||||
pendingRead = deferred.promise;
|
|
||||||
|
|
||||||
// Wait for the next event queue run before attempting to read
|
|
||||||
// clipboard data (in case the copy/cut has not yet completed)
|
|
||||||
$window.setTimeout(function deferredClipboardRead() {
|
|
||||||
|
|
||||||
// Track the originally-focused element prior to changing focus
|
// Track the originally-focused element prior to changing focus
|
||||||
var originalElement = document.activeElement;
|
var originalElement = document.activeElement;
|
||||||
pushSelection();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to paste the clipboard contents into the
|
* Attempts to paste the clipboard contents into the
|
||||||
@@ -472,9 +464,9 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Clean up event listener and selection once the paste attempt has
|
// Mark read attempt as in progress, cleaning up event listener and
|
||||||
// completed
|
// selection once the paste attempt has completed
|
||||||
deferred.promise['finally'](function cleanupReadAttempt() {
|
pendingRead = deferred.promise['finally'](function cleanupReadAttempt() {
|
||||||
|
|
||||||
// Do not use future changes in focus
|
// Do not use future changes in focus
|
||||||
clipboardContent.removeEventListener('focus', performPaste);
|
clipboardContent.removeEventListener('focus', performPaste);
|
||||||
@@ -490,6 +482,12 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Wait for the next event queue run before attempting to read
|
||||||
|
// clipboard data (in case the copy/cut has not yet completed)
|
||||||
|
$window.setTimeout(function deferredClipboardRead() {
|
||||||
|
|
||||||
|
pushSelection();
|
||||||
|
|
||||||
// Ensure clipboard element is blurred (and that the "focus" event
|
// Ensure clipboard element is blurred (and that the "focus" event
|
||||||
// will fire)
|
// will fire)
|
||||||
clipboardContent.blur();
|
clipboardContent.blur();
|
||||||
@@ -506,7 +504,8 @@ angular.module('clipboard').factory('clipboardService', ['$injector',
|
|||||||
|
|
||||||
}, CLIPBOARD_READ_DELAY);
|
}, CLIPBOARD_READ_DELAY);
|
||||||
|
|
||||||
return deferred.promise;
|
return pendingRead;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return service;
|
return service;
|
||||||
|
Reference in New Issue
Block a user