From a3d52b89afd3e56c682d6aaf5cdabd2443e1fbc9 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 ec1c931e63..a67d0443c5 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -209,7 +209,7 @@ export const AuthPrompt = GObject.registerClass({ [this._textEntry, this._passwordEntry].forEach(entry => { entry.clutter_text.connect('text-changed', () => { - if (!this._userVerifier.hasPendingMessages) + if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer) this._fadeOutMessage(); }); -- 2.44.0 From 960be98ad1416de71430eebba76fd0bd94f16747 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 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index a67d0443c5..36d26be7dc 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -273,13 +273,14 @@ export const AuthPrompt = GObject.registerClass({ this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS; this.updateSensitivity(false); - if (shouldSpin) - this.startSpinning(); + if (this._queryingService) { + if (shouldSpin) + this.startSpinning(); - if (this._queryingService) this._userVerifier.answerQuery(this._queryingService, this._entry.text); - else + } else { this._preemptiveAnswer = this._entry.text; + } this.emit('next'); } -- 2.44.0 From 7368f8100520bf84f7302ed6427bb91e5a55e8b1 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 | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index 36d26be7dc..9da6fcf497 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -3,6 +3,7 @@ import Clutter from 'gi://Clutter'; import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; +import Meta from 'gi://Meta'; import Pango from 'gi://Pango'; import Shell from 'gi://Shell'; import St from 'gi://St'; @@ -70,6 +71,8 @@ export const AuthPrompt = GObject.registerClass({ this._defaultButtonWellActor = null; this._cancelledRetries = 0; + this._idleMonitor = Meta.IdleMonitor.get_core(); + let reauthenticationOnly; if (this._mode === AuthPromptMode.UNLOCK_ONLY) reauthenticationOnly = true; @@ -127,8 +130,14 @@ export const AuthPrompt = GObject.registerClass({ } _onDestroy() { + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + } + this._inactiveEntry.destroy(); this._inactiveEntry = null; + this._userVerifier.destroy(); this._userVerifier = null; } @@ -280,6 +289,11 @@ export const AuthPrompt = GObject.registerClass({ 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; + } } this.emit('next'); @@ -491,6 +505,11 @@ export const AuthPrompt = GObject.registerClass({ } setQuestion(question) { + if (this._preemptiveAnswerWatchId) { + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + } + this._entry.hint_text = question; this._authList.hide(); @@ -612,6 +631,19 @@ export const AuthPrompt = GObject.registerClass({ this._updateEntry(false); } + _onUserStoppedTypePreemptiveAnswer() { + if (!this._preemptiveAnswerWatchId || + this._preemptiveAnswer || + this._queryingService) + return; + + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = 0; + + this._entry.text = ''; + this.updateSensitivity(false); + } + reset() { let oldStatus = this.verificationStatus; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; @@ -619,6 +651,11 @@ export const AuthPrompt = GObject.registerClass({ this.cancelButton.can_focus = this._hasCancelButton; this._preemptiveAnswer = null; + if (this._preemptiveAnswerWatchId) + this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); + this._preemptiveAnswerWatchId = this._idleMonitor.add_idle_watch(500, + this._onUserStoppedTypePreemptiveAnswer.bind(this)); + if (this._userVerifier) this._userVerifier.cancel(); -- 2.44.0