loginDialog: support disable-user-list key

In some deployments showing a user list at the login
screen is undesirable.

GDM's fallback login screen has a configuration key:

org.gnome.login-screen disable-user-list false

that causes the user-list to get hidden.

This commit adds similar functionality to the normal,
shell-based login screen.

Based on a series of patches by Marius Rieder.

https://bugzilla.gnome.org/show_bug.cgi?id=660660
This commit is contained in:
Ray Strode 2012-10-30 13:26:30 -04:00
parent cac9d120be
commit 87e8770cbc
2 changed files with 58 additions and 27 deletions

View File

@ -684,7 +684,7 @@ const LoginDialog = new Lang.Class({
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient); this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion)); this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage)); this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset)); this._userVerifier.connect('reset', Lang.bind(this, this._reset));
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint)); this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint)); this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
this._verifyingUser = false; this._verifyingUser = false;
@ -695,6 +695,8 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._updateBanner)); Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY, this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
Lang.bind(this, this._updateBanner)); Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
Lang.bind(this, this._updateDisableUserList));
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner', this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
text: '' }); text: '' });
@ -702,7 +704,8 @@ const LoginDialog = new Lang.Class({
this._updateBanner(); this._updateBanner();
this._titleLabel = new St.Label({ style_class: 'login-dialog-title', this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
text: C_("title", "Sign In") }); text: C_("title", "Sign In"),
visible: false });
this.contentLayout.add(this._titleLabel, this.contentLayout.add(this._titleLabel,
{ y_fill: false, { y_fill: false,
@ -771,7 +774,7 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START, x_align: St.Align.START,
x_fill: true }); x_fill: true });
this._notListedButton.connect('clicked', Lang.bind(this, this._onNotListedClicked)); this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAndLogIn));
this.contentLayout.add(this._notListedButton, this.contentLayout.add(this._notListedButton,
{ expand: false, { expand: false,
@ -797,6 +800,21 @@ const LoginDialog = new Lang.Class({
}, },
_updateDisableUserList: function() {
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
// If this is the first time around, set initial focus
if (this._disableUserList == undefined && disableUserList)
this.setInitialKeyFocus(this._promptEntry);
if (disableUserList != this._disableUserList) {
this._disableUserList = disableUserList;
if (!this._verifyingUser)
this._reset();
}
},
_updateBanner: function() { _updateBanner: function() {
let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY); let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY); let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
@ -809,32 +827,15 @@ const LoginDialog = new Lang.Class({
} }
}, },
_onReset: function(client, serviceName) { _reset: function() {
this._promptMessage.hide(); this._promptMessage.hide();
let tasks = [this._hidePrompt,
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
this._fadeInNotListedButton]),
function() {
this._sessionList.close();
this._promptLoginHint.hide();
this._userList.actor.show();
this._userList.actor.opacity = 255;
return this._userList.showItems();
},
function() {
this._userList.actor.reactive = true;
this._userList.actor.grab_key_focus();
}];
this._user = null; this._user = null;
this._verifyingUser = false; this._verifyingUser = false;
let batch = new Batch.ConsecutiveBatch(this, tasks); if (this._disableUserList)
batch.run(); this._hideUserListAndLogIn();
else
this._showUserList();
}, },
_onDefaultSessionChanged: function(client, sessionId) { _onDefaultSessionChanged: function(client, sessionId) {
@ -915,13 +916,17 @@ const LoginDialog = new Lang.Class({
}), }),
label: C_("button", "Sign In"), label: C_("button", "Sign In"),
default: true }; default: true };
let buttons = [];
if (!this._disableUserList || this._verifyingUser)
buttons.push(cancelButtonInfo);
buttons.push(okButtonInfo);
let tasks = [function() { let tasks = [function() {
return this._fadeInPrompt(); return this._fadeInPrompt();
}, },
function() { function() {
this.setButtons([cancelButtonInfo, okButtonInfo]); this.setButtons(buttons);
let updateOkButtonEnabled = Lang.bind(this, function() { let updateOkButtonEnabled = Lang.bind(this, function() {
let sensitive = this._promptEntry.text.length > 0; let sensitive = this._promptEntry.text.length > 0;
@ -1127,7 +1132,7 @@ const LoginDialog = new Lang.Class({
})); }));
}, },
_onNotListedClicked: function() { _hideUserListAndLogIn: function() {
let tasks = [function() { let tasks = [function() {
return this._userList.hideItems(); return this._userList.hideItems();
}, },
@ -1151,6 +1156,29 @@ const LoginDialog = new Lang.Class({
batch.run(); batch.run();
}, },
_showUserList: function() {
let tasks = [this._hidePrompt,
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
this._fadeInNotListedButton]),
function() {
this._sessionList.close();
this._promptLoginHint.hide();
this._userList.actor.show();
this._userList.actor.opacity = 255;
return this._userList.showItems();
},
function() {
this._userList.actor.reactive = true;
this._userList.actor.grab_key_focus();
}];
let batch = new Batch.ConsecutiveBatch(this, tasks);
batch.run();
},
_fadeInBanner: function() { _fadeInBanner: function() {
return GdmUtil.fadeInActor(this._bannerLabel); return GdmUtil.fadeInActor(this._bannerLabel);
}, },
@ -1232,6 +1260,8 @@ const LoginDialog = new Lang.Class({
this._userList.addUser(users[i]); this._userList.addUser(users[i]);
} }
this._updateDisableUserList();
this._userManager.connect('user-added', this._userManager.connect('user-added',
Lang.bind(this, function(userManager, user) { Lang.bind(this, function(userManager, user) {
this._userList.addUser(user); this._userList.addUser(user);

View File

@ -23,6 +23,7 @@ const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
const ALLOWED_FAILURES_KEY = 'allowed-failures'; const ALLOWED_FAILURES_KEY = 'allowed-failures';
const LOGO_KEY = 'logo'; const LOGO_KEY = 'logo';
const DISABLE_USER_LIST_KEY = 'disable-user-list';
function fadeInActor(actor) { function fadeInActor(actor) {
if (actor.opacity == 255 && actor.visible) if (actor.opacity == 255 && actor.visible)