From 01eddd2772d0285025bf448dc279a3bacc5651ff Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 22 Jun 2016 01:09:24 -0700 Subject: [PATCH] GUACAMOLE-55: Restore focus state after attempting to read local clipboard. --- .../webapp/app/client/services/clipboardService.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/guacamole/src/main/webapp/app/client/services/clipboardService.js b/guacamole/src/main/webapp/app/client/services/clipboardService.js index ed518a1d4..a81dd0e73 100644 --- a/guacamole/src/main/webapp/app/client/services/clipboardService.js +++ b/guacamole/src/main/webapp/app/client/services/clipboardService.js @@ -69,6 +69,9 @@ angular.module('client').factory('clipboardService', ['$injector', var deferred = $q.defer(); + // Track the originally-focused element prior to changing focus + var originalElement = document.activeElement; + // Copy the given value into the clipboard DOM element clipboardContent.value = text; clipboardContent.select(); @@ -79,8 +82,10 @@ angular.module('client').factory('clipboardService', ['$injector', else deferred.reject(); - // Unfocus the clipboard DOM event to avoid mobile keyboard opening + // Unfocus the clipboard DOM event to avoid mobile keyboard opening, + // restoring whichever element was originally focused clipboardContent.blur(); + originalElement.focus(); return deferred.promise; }; @@ -101,6 +106,9 @@ angular.module('client').factory('clipboardService', ['$injector', // clipboard data (in case the copy/cut has not yet completed) window.setTimeout(function deferredClipboardRead() { + // Track the originally-focused element prior to changing focus + var originalElement = document.activeElement; + // Clear and select the clipboard DOM element clipboardContent.value = ''; clipboardContent.focus(); @@ -112,8 +120,10 @@ angular.module('client').factory('clipboardService', ['$injector', else deferred.reject(); - // Unfocus the clipboard DOM event to avoid mobile keyboard opening + // Unfocus the clipboard DOM event to avoid mobile keyboard opening, + // restoring whichever element was originally focused clipboardContent.blur(); + originalElement.focus(); }, 100);