loginDialog: Allow timed login with disabled user list
At the moment the timed login feature is implemented in the user list. If there's no user list, we don't show the indicator anywhere and don't proceed with timed login. This commit allows timed login to work when the user list is disabled. It accomplishes this by putting the timed login indicator on the auth prompt in that scenario. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1809>
This commit is contained in:
parent
1410db2470
commit
1196532493
@ -151,6 +151,11 @@
|
|||||||
padding-top: 16px;
|
padding-top: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog-timed-login-indicator {
|
||||||
|
height: 2px;
|
||||||
|
background-color: darken($fg_color,40%);
|
||||||
|
}
|
||||||
|
|
||||||
.login-dialog-prompt-layout {
|
.login-dialog-prompt-layout {
|
||||||
padding-top: 24px;
|
padding-top: 24px;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported AuthPrompt */
|
/* exported AuthPrompt */
|
||||||
|
|
||||||
const { Clutter, GObject, Pango, Shell, St } = imports.gi;
|
const { Clutter, GLib, GObject, Pango, Shell, St } = imports.gi;
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
const Animation = imports.ui.animation;
|
||||||
const Batch = imports.gdm.batch;
|
const Batch = imports.gdm.batch;
|
||||||
@ -170,6 +170,13 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
this._mainBox.add_child(this._entry);
|
this._mainBox.add_child(this._entry);
|
||||||
this._entry.grab_key_focus();
|
this._entry.grab_key_focus();
|
||||||
|
|
||||||
|
this._timedLoginIndicator = new St.Bin({
|
||||||
|
style_class: 'login-dialog-timed-login-indicator',
|
||||||
|
scale_x: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
this.add_child(this._timedLoginIndicator);
|
||||||
|
|
||||||
[this._textEntry, this._passwordEntry].forEach(entry => {
|
[this._textEntry, this._passwordEntry].forEach(entry => {
|
||||||
entry.clutter_text.connect('text-changed', () => {
|
entry.clutter_text.connect('text-changed', () => {
|
||||||
if (!this._userVerifier.hasPendingMessages)
|
if (!this._userVerifier.hasPendingMessages)
|
||||||
@ -198,6 +205,40 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
this._defaultButtonWell.add_child(this._spinner);
|
this._defaultButtonWell.add_child(this._spinner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showTimedLoginIndicator(time) {
|
||||||
|
let hold = new Batch.Hold();
|
||||||
|
|
||||||
|
this.hideTimedLoginIndicator();
|
||||||
|
|
||||||
|
const startTime = GLib.get_monotonic_time();
|
||||||
|
|
||||||
|
this._timedLoginTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 33,
|
||||||
|
() => {
|
||||||
|
const currentTime = GLib.get_monotonic_time();
|
||||||
|
const elapsedTime = (currentTime - startTime) / GLib.USEC_PER_SEC;
|
||||||
|
this._timedLoginIndicator.scale_x = elapsedTime / time;
|
||||||
|
if (elapsedTime >= time) {
|
||||||
|
this._timedLoginTimeoutId = 0;
|
||||||
|
hold.release();
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GLib.SOURCE_CONTINUE;
|
||||||
|
});
|
||||||
|
|
||||||
|
GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId');
|
||||||
|
|
||||||
|
return hold;
|
||||||
|
}
|
||||||
|
|
||||||
|
hideTimedLoginIndicator() {
|
||||||
|
if (this._timedLoginTimeoutId) {
|
||||||
|
GLib.source_remove(this._timedLoginTimeoutId);
|
||||||
|
this._timedLoginTimeoutId = 0;
|
||||||
|
}
|
||||||
|
this._timedLoginIndicator.scale_x = 0.;
|
||||||
|
}
|
||||||
|
|
||||||
_activateNext(shouldSpin) {
|
_activateNext(shouldSpin) {
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS;
|
this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS;
|
||||||
this.updateSensitivity(false);
|
this.updateSensitivity(false);
|
||||||
|
@ -762,6 +762,9 @@ var LoginDialog = GObject.registerClass({
|
|||||||
|
|
||||||
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
|
||||||
this._authPrompt.reset();
|
this._authPrompt.reset();
|
||||||
|
|
||||||
|
if (this._disableUserList && this._timedLoginUserListHold)
|
||||||
|
this._timedLoginUserListHold.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1049,16 +1052,29 @@ var LoginDialog = GObject.registerClass({
|
|||||||
let animationTime;
|
let animationTime;
|
||||||
|
|
||||||
let tasks = [
|
let tasks = [
|
||||||
() => this._waitForItemForUser(userName),
|
() => {
|
||||||
|
if (this._disableUserList)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._timedLoginUserListHold = this._waitForItemForUser(userName);
|
||||||
|
},
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
loginItem = this._userList.getItemFromUserName(userName);
|
this._timedLoginUserListHold = null;
|
||||||
|
|
||||||
|
if (this._disableUserList)
|
||||||
|
loginItem = this._authPrompt;
|
||||||
|
else
|
||||||
|
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.
|
||||||
loginItem.hideTimedLoginIndicator();
|
loginItem.hideTimedLoginIndicator();
|
||||||
},
|
},
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
|
if (this._disableUserList)
|
||||||
|
return;
|
||||||
|
|
||||||
// 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(loginItem);
|
this._userList.jumpToItem(loginItem);
|
||||||
@ -1080,6 +1096,9 @@ var LoginDialog = GObject.registerClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
|
if (this._disableUserList)
|
||||||
|
return;
|
||||||
|
|
||||||
// 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 (delay > _TIMED_LOGIN_IDLE_THRESHOLD &&
|
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD &&
|
||||||
this._authPrompt.visible)
|
this._authPrompt.visible)
|
||||||
|
Loading…
Reference in New Issue
Block a user