gnome-shell/disable-unlock-entry-until-question.patch
2025-10-15 13:47:07 +02:00

171 lines
5.7 KiB
Diff

From 7a4f4400b2f10a813cf28bb7518c370482935c1f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
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 d264717238..c7354e2664 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -215,7 +215,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.51.0
From 5b72139b23b5884aa118e7bc9510bc994a057a6e Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
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 c7354e2664..92ad4eff30 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -279,13 +279,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.51.0
From b5509ccdda2da8e43716f8810a27153a96fd5c7d Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
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 | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 92ad4eff30..0fbfb6800e 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -69,6 +69,8 @@ export const AuthPrompt = GObject.registerClass({
this._defaultButtonWellActor = null;
this._cancelledRetries = 0;
+ this._idleMonitor = global.backend.get_core_idle_monitor();
+
let reauthenticationOnly;
if (this._mode === AuthPromptMode.UNLOCK_ONLY)
reauthenticationOnly = true;
@@ -130,8 +132,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;
this._entry = null;
@@ -286,6 +294,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');
@@ -508,6 +521,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();
@@ -630,6 +648,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;
@@ -637,6 +668,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.51.0