loginDialog: Use more function scope variables inside _startTimedLogin

Using function scope variables increases readability and prevents
unwanted changes from outside while the batch is running.
This commit is contained in:
verdre 2018-04-17 15:19:44 +02:00
parent 86a741c1ee
commit a8e17f73ec

View File

@ -991,20 +991,10 @@ var LoginDialog = new Lang.Class({
}, },
_blockTimedLoginUntilIdle() { _blockTimedLoginUntilIdle() {
// This blocks timed login from starting until a few
// seconds after the user stops interacting with the
// login screen.
//
// We skip this step if the timed login delay is very
// short.
if ((this._timedLoginDelay - _TIMED_LOGIN_IDLE_THRESHOLD) <= 0)
return null;
let hold = new Batch.Hold(); let hold = new Batch.Hold();
this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD, this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD,
() => { () => {
this._timedLoginAnimationTime -= _TIMED_LOGIN_IDLE_THRESHOLD;
this._timedLoginIdleTimeOutId = 0; this._timedLoginIdleTimeOutId = 0;
hold.release(); hold.release();
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
@ -1029,41 +1019,52 @@ var LoginDialog = new Lang.Class({
this._timedLoginIdleTimeOutId = 0; this._timedLoginIdleTimeOutId = 0;
} }
this._timedLoginItem = null; let loginItem = null;
this._timedLoginDelay = delay; let animationTime;
this._timedLoginAnimationTime = delay;
let tasks = [() => this._waitForItemForUser(userName), let tasks = [() => this._waitForItemForUser(userName),
() => { () => {
this._timedLoginItem = this._userList.getItemFromUserName(userName); loginItem = this._userList.getItemFromUserName(userName);
// If there is an animation running on the item, reset it. // If there is an animation running on the item, reset it.
this._timedLoginItem.hideTimedLoginIndicator(); loginItem.hideTimedLoginIndicator();
}, },
() => { () => {
// If we're just starting out, start on the right item. // If we're just starting out, start on the right item.
if (!this._userManager.is_loaded) { if (!this._userManager.is_loaded) {
this._userList.jumpToItem(this._timedLoginItem); this._userList.jumpToItem(loginItem);
} }
}, },
this._blockTimedLoginUntilIdle, () => {
// This blocks the timed login animation until a few
// seconds after the user stops interacting with the
// login screen.
// We skip this step if the timed login delay is very short.
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD) {
animationTime = delay - _TIMED_LOGIN_IDLE_THRESHOLD;
return this._blockTimedLoginUntilIdle();
} else {
animationTime = delay;
}
},
() => { () => {
// If idle timeout is done, make sure the timed login indicator is shown // If idle timeout is done, make sure the timed login indicator is shown
if (this._timedLoginDelay > _TIMED_LOGIN_IDLE_THRESHOLD && if (delay > _TIMED_LOGIN_IDLE_THRESHOLD &&
this._authPrompt.actor.visible) this._authPrompt.actor.visible)
this._authPrompt.cancel(); this._authPrompt.cancel();
if (this._timedLoginDelay > _TIMED_LOGIN_IDLE_THRESHOLD || firstRun) { if (delay > _TIMED_LOGIN_IDLE_THRESHOLD || firstRun) {
this._userList.scrollToItem(this._timedLoginItem); this._userList.scrollToItem(loginItem);
this._timedLoginItem.actor.grab_key_focus(); loginItem.actor.grab_key_focus();
} }
}, },
() => this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime), () => loginItem.showTimedLoginIndicator(animationTime),
() => { () => {
this._timedLoginBatch = null; this._timedLoginBatch = null;