mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUACAMOLE-302: Do not rely on $evalAsync() for assigning focus.
$evalAsync() does not necessarily guarantee execution within a timer; the provided function may well execute after the current $digest loop without control returning to the browser. If we need a timer to ensure focus() behaves reliably, we should explicitly use one via $timeout.
This commit is contained in:
@@ -20,7 +20,11 @@
|
||||
/**
|
||||
* A directive which allows elements to be manually focused / blurred.
|
||||
*/
|
||||
angular.module('element').directive('guacFocus', ['$parse', function guacFocus($parse) {
|
||||
angular.module('element').directive('guacFocus', ['$injector', function guacFocus($injector) {
|
||||
|
||||
// Required services
|
||||
var $parse = $injector.get('$parse');
|
||||
var $timeout = $injector.get('$timeout');
|
||||
|
||||
return {
|
||||
restrict: 'A',
|
||||
@@ -44,7 +48,7 @@ angular.module('element').directive('guacFocus', ['$parse', function guacFocus($
|
||||
|
||||
// Set/unset focus depending on value of guacFocus
|
||||
$scope.$watch(guacFocus, function updateFocus(value) {
|
||||
$scope.$evalAsync(function updateFocusAsync() {
|
||||
$timeout(function updateFocusAfterRender() {
|
||||
if (value)
|
||||
element.focus();
|
||||
else
|
||||
|
Reference in New Issue
Block a user