From 9d0795d0a140fae4e916b3e69cadb742b91bf563 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 30 Sep 2015 12:51:24 -0400 Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types password up front Right now we fade out any stale auth messages as soon as the user starts typing. This behavior doesn't really make sense if the user is typing up front, before a password is asked. --- js/gdm/authPrompt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 50c66fd13..2d92ae926 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -183,7 +183,7 @@ const AuthPrompt = new Lang.Class({ this._entry.clutter_text.connect('text-changed', Lang.bind(this, function() { - if (!this._userVerifier.hasPendingMessages) + if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer) this._fadeOutMessage(); this._updateNextButtonSensitivity(this._entry.text.length > 0); -- 2.12.0 From 424ecd98bca6d23c6ee4363014f21dfb91bb2d5c Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 30 Sep 2015 14:36:33 -0400 Subject: [PATCH 2/3] authPrompt: don't spin unless answering question --- js/gdm/authPrompt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 2d92ae926..0b11ba95d 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -65,8 +65,8 @@ const AuthPrompt = new Lang.Class({ this.connect('next', Lang.bind(this, function() { this.updateSensitivity(false); - this.startSpinning(); if (this._queryingService) { + this.startSpinning(); this._userVerifier.answerQuery(this._queryingService, this._entry.text); } else { this._preemptiveAnswer = this._entry.text; -- 2.12.0 From d3848683a63938be8b1af391eecc65e214ad26ce Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 5 Oct 2015 15:26:18 -0400 Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user stops typing We only want to allow the user to type the preemptive password in one smooth motion. If they start to type, and then stop typing, we should discard their preemptive password as expired. Typing ahead the password is just a convenience for users who don't want to manually lift the shift before typing their passwords, after all. --- js/gdm/authPrompt.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 0b11ba95d..6327633d9 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -9,6 +9,7 @@ const St = imports.gi.St; const Animation = imports.ui.animation; const Batch = imports.gdm.batch; const GdmUtil = imports.gdm.util; +const Meta = imports.gi.Meta; const Params = imports.misc.params; const ShellEntry = imports.ui.shellEntry; const Tweener = imports.ui.tweener; @@ -46,6 +47,8 @@ const AuthPrompt = new Lang.Class({ this._gdmClient = gdmClient; this._mode = mode; + this._idleMonitor = Meta.IdleMonitor.get_core(); + let reauthenticationOnly; if (this._mode == AuthPromptMode.UNLOCK_ONLY) reauthenticationOnly = true; @@ -70,6 +73,11 @@ const AuthPrompt = new Lang.Class({ this._userVerifier.answerQuery(this._queryingService, this._entry.text); } else { this._preemptiveAnswer = this._entry.text; + + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + } } })); @@ -135,6 +143,11 @@ const AuthPrompt = new Lang.Class({ }, _onDestroy: function() { + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + } + this._userVerifier.destroy(); this._userVerifier = null; }, @@ -356,6 +369,11 @@ const AuthPrompt = new Lang.Class({ }, setQuestion: function(question) { + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + } + this._label.set_text(question); this._label.show(); @@ -441,12 +459,32 @@ const AuthPrompt = new Lang.Class({ } }, + _onUserStoppedTypePreemptiveAnswer: function() { + if (!this._preemptiveAnswerWatchId || + this._preemptiveAnswer || + this._queryingService) + return; + + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + + this._entry.text = ''; + this.updateSensitivity(false); + }, + reset: function() { let oldStatus = this.verificationStatus; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.cancelButton.reactive = true; this.nextButton.label = _("Next"); + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + } + this._preemptiveAnswerWatchId = this._idleMonitor.add_idle_watch (500, + Lang.bind(this, + this._onUserStoppedTypePreemptiveAnswer)); + if (this._userVerifier) this._userVerifier.cancel(); -- 2.12.0