[gnome-shell/wip/disable-user-list: 4/4] loginDialog: support disable-user-list key



commit d5039214bb047ce6ed586adb765ba833fcc8fd08
Author: Ray Strode <rstrode redhat com>
Date:   Tue Oct 30 13:26:30 2012 -0400

    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

 js/gdm/loginDialog.js |   92 ++++++++++++++++++++++++++++++++-----------------
 js/gdm/util.js        |    1 +
 2 files changed, 61 insertions(+), 32 deletions(-)
---
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 0ca1607..5f0bffd 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -684,7 +684,7 @@ const LoginDialog = new Lang.Class({
         this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
         this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
         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('hide-login-hint', Lang.bind(this, this._hideLoginHint));
         this._verifyingUser = false;
@@ -695,6 +695,8 @@ const LoginDialog = new Lang.Class({
                                Lang.bind(this, this._updateBanner));
         this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
                                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',
                                            text: '' });
@@ -707,6 +709,7 @@ const LoginDialog = new Lang.Class({
         this.contentLayout.add(this._titleLabel,
                               { y_fill: false,
                                 y_align: St.Align.START });
+        this._titleLabel.hide();
 
         this._userList = new UserList();
         this.contentLayout.add(this._userList.actor,
@@ -770,7 +773,7 @@ const LoginDialog = new Lang.Class({
                                                 x_align: St.Align.START,
                                                 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,
                                { expand: false,
@@ -796,6 +799,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() {
         let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
         let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
@@ -808,32 +826,15 @@ const LoginDialog = new Lang.Class({
         }
     },
 
-    _onReset: function(client, serviceName) {
+    _reset: function() {
         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._verifyingUser = false;
 
-        let batch = new Batch.ConsecutiveBatch(this, tasks);
-        batch.run();
+        if (this._disableUserList)
+            this._hideUserListAndLogIn();
+        else
+            this._showUserList();
     },
 
     _onDefaultSessionChanged: function(client, sessionId) {
@@ -906,14 +907,16 @@ const LoginDialog = new Lang.Class({
     _showPrompt: function() {
         let hold = new Batch.Hold();
 
-        let buttons = [{ action: Lang.bind(this, this.cancel),
-                         label: _("Cancel"),
-                         key: Clutter.Escape },
-                       { action: Lang.bind(this, function() {
+        let buttons = [];
+        if (!this._disableUserList || this._verifyingUser)
+            buttons.push({ action: Lang.bind(this, this.cancel),
+                          label: _("Cancel"),
+                          key: Clutter.Escape });
+        buttons.push({ action: Lang.bind(this, function() {
                                      hold.release();
-                                 }),
-                         label: C_("button", "Sign In"),
-                         default: true }];
+                               }),
+                       label: C_("button", "Sign In"),
+                       default: true });
 
         let tasks = [function() {
                          return this._fadeInPrompt();
@@ -1111,7 +1114,7 @@ const LoginDialog = new Lang.Class({
                              }));
     },
 
-    _onNotListedClicked: function() {
+    _hideUserListAndLogIn: function() {
         let tasks = [function() {
                          return this._userList.hideItems();
                      },
@@ -1135,6 +1138,29 @@ const LoginDialog = new Lang.Class({
         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() {
         return GdmUtil.fadeInActor(this._bannerLabel);
     },
@@ -1216,6 +1242,8 @@ const LoginDialog = new Lang.Class({
             this._userList.addUser(users[i]);
         }
 
+        this._updateDisableUserList();
+
         this._userManager.connect('user-added',
                                   Lang.bind(this, function(userManager, user) {
                                       this._userList.addUser(user);
diff --git a/js/gdm/util.js b/js/gdm/util.js
index d71e55f..881d859 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -23,6 +23,7 @@ const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
 const ALLOWED_FAILURES_KEY = 'allowed-failures';
 
 const LOGO_KEY = 'logo';
+const DISABLE_USER_LIST_KEY = 'disable-user-list';
 
 function fadeInActor(actor) {
     if (actor.opacity == 255 && actor.visible)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]