[gnome-shell/uajain/st-entry-password-2: 3/8] js: Use StPasswordEntry for password entry fields



commit b0b8ab6c734cd52ad9497287e901a1b3399fe175
Author: Umang Jain <mailumangjain gmail com>
Date:   Thu Dec 12 15:02:53 2019 +0530

    js: Use StPasswordEntry for password entry fields
    
    Use the new StPasswordEntry for password entry fields
    and remove all direct handling of clutter text of the entry
     via clutter_text_set_password_char to show/hide the password
    text. StPasswordEntry will provides a peek-password-icon which
    will allow to show/hide the password present in the field to
    the user in subsequent commits.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/619

 js/gdm/authPrompt.js             | 36 ++++++++++++++++++++++++++----------
 js/gdm/util.js                   |  4 ++--
 js/ui/components/keyring.js      | 22 ++++++++++++----------
 js/ui/components/networkAgent.js | 18 +++++++++++-------
 js/ui/components/polkitAgent.js  |  7 ++-----
 js/ui/shellMountOperation.js     | 18 ++++++++++--------
 6 files changed, 63 insertions(+), 42 deletions(-)
---
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 6af3427617..5068adaadc 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -98,14 +98,24 @@ var AuthPrompt = GObject.registerClass({
         });
 
         this.add_child(this._label);
-        this._entry = new St.Entry({
+        this._entry = null;
+
+        this._textEntry = new St.Entry({
+            style_class: 'login-dialog-prompt-entry',
+            can_focus: true,
+            x_expand: false,
+            y_expand: true,
+        });
+        ShellEntry.addContextMenu(this._textEntry, { actionMode: Shell.ActionMode.NONE });
+        this._passwordEntry = new St.PasswordEntry({
             style_class: 'login-dialog-prompt-entry',
             can_focus: true,
             x_expand: false,
             y_expand: true,
         });
-        ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
 
+        ShellEntry.addContextMenu(this._passwordEntry, { actionMode: Shell.ActionMode.NONE });
+        this._entry = this._passwordEntry;
         this.add_child(this._entry);
 
         this._entry.grab_key_focus();
@@ -195,7 +205,17 @@ var AuthPrompt = GObject.registerClass({
         });
     }
 
-    _onAskQuestion(verifier, serviceName, question, passwordChar) {
+    _updateEntry(secret) {
+        if (secret && (this._entry != this._passwordEntry)) {
+            this.replace_child(this._entry, this._passwordEntry);
+            this._entry = this._passwordEntry;
+        } else if (!secret && (this._entry != this._textEntry)) {
+            this.replace_child(this._entry, this._textEntry);
+            this._entry = this._textEntry;
+        }
+    }
+
+    _onAskQuestion(verifier, serviceName, question, secret) {
         if (this._queryingService)
             this.clear();
 
@@ -205,10 +225,11 @@ var AuthPrompt = GObject.registerClass({
             this._preemptiveAnswer = null;
             return;
         }
-        this.setPasswordChar(passwordChar);
+
+        this._updateEntry(secret);
         this.setQuestion(question);
 
-        if (passwordChar) {
+        if (secret) {
             if (this._userVerifier.reauthenticating)
                 this.nextButton.label = _("Unlock");
             else
@@ -358,11 +379,6 @@ var AuthPrompt = GObject.registerClass({
         this.stopSpinning();
     }
 
-    setPasswordChar(passwordChar) {
-        this._entry.clutter_text.set_password_char(passwordChar);
-        this._entry.menu.isPassword = passwordChar != '';
-    }
-
     setQuestion(question) {
         this._label.set_text(question);
 
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 824b301b97..53b0079f68 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -485,7 +485,7 @@ var ShellUserVerifier = class {
         if (!this.serviceIsForeground(serviceName))
             return;
 
-        this.emit('ask-question', serviceName, question, '');
+        this.emit('ask-question', serviceName, question, false);
     }
 
     _onSecretInfoQuery(client, serviceName, secretQuestion) {
@@ -498,7 +498,7 @@ var ShellUserVerifier = class {
             return;
         }
 
-        this.emit('ask-question', serviceName, secretQuestion, '\u25cf');
+        this.emit('ask-question', serviceName, secretQuestion, true);
     }
 
     _onReset() {
diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js
index 8d0eccaa6b..3e049e4666 100644
--- a/js/ui/components/keyring.js
+++ b/js/ui/components/keyring.js
@@ -70,11 +70,12 @@ class KeyringDialog extends ModalDialog.ModalDialog {
                                        y_align: Clutter.ActorAlign.CENTER });
             label.set_text(_("Password:"));
             label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
-            this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
-                                                 text: '',
-                                                 can_focus: true,
-                                                 x_expand: true });
-            this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
+            this._passwordEntry = new St.PasswordEntry({
+                style_class: 'prompt-dialog-password-entry',
+                text: '',
+                can_focus: true,
+                x_expand: true,
+            });
             ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
             this._passwordEntry.clutter_text.connect('activate', this._onPasswordActivate.bind(this));
 
@@ -102,11 +103,12 @@ class KeyringDialog extends ModalDialog.ModalDialog {
                                        x_align: Clutter.ActorAlign.START,
                                        y_align: Clutter.ActorAlign.CENTER });
             label.set_text(_("Type again:"));
-            this._confirmEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
-                                                text: '',
-                                                can_focus: true,
-                                                x_expand: true });
-            this._confirmEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
+            this._confirmEntry = new St.PasswordEntry({
+                style_class: 'prompt-dialog-password-entry',
+                text: '',
+                can_focus: true,
+                x_expand: true,
+            });
             ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true });
             this._confirmEntry.clutter_text.connect('activate', this._onConfirmActivate.bind(this));
             if (rtl) {
diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
index 251438683b..7b30b4c556 100644
--- a/js/ui/components/networkAgent.js
+++ b/js/ui/components/networkAgent.js
@@ -54,10 +54,17 @@ class NetworkSecretDialog extends ModalDialog.ModalDialog {
 
             let reactive = secret.key != null;
 
-            secret.entry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
-                                          text: secret.value, can_focus: reactive,
-                                          reactive,
-                                          x_expand: true });
+            let entryParams = {
+                style_class: 'prompt-dialog-password-entry',
+                text: secret.value,
+                can_focus: reactive,
+                reactive,
+                x_expand: true,
+            };
+            if (secret.password)
+                secret.entry = new St.PasswordEntry(entryParams);
+            else
+                secret.entry = new St.Entry(entryParams);
             ShellEntry.addContextMenu(secret.entry,
                                       { isPassword: secret.password });
 
@@ -93,9 +100,6 @@ class NetworkSecretDialog extends ModalDialog.ModalDialog {
                 layout.attach(secret.entry, 1, pos, 1, 1);
             }
             pos++;
-
-            if (secret.password)
-                secret.entry.clutter_text.set_password_char('\u25cf');
         }
 
         contentBox.messageBox.add(secretTable);
diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js
index 4af2df3915..254676cabb 100644
--- a/js/ui/components/polkitAgent.js
+++ b/js/ui/components/polkitAgent.js
@@ -90,7 +90,7 @@ var AuthenticationDialog = GObject.registerClass({
             y_align: Clutter.ActorAlign.CENTER,
         });
         this._passwordBox.add_child(this._passwordLabel);
-        this._passwordEntry = new St.Entry({
+        this._passwordEntry = new St.PasswordEntry({
             style_class: 'prompt-dialog-password-entry',
             text: "",
             can_focus: true,
@@ -278,10 +278,7 @@ var AuthenticationDialog = GObject.registerClass({
         else
             this._passwordLabel.set_text(request);
 
-        if (echoOn)
-            this._passwordEntry.clutter_text.set_password_char('');
-        else
-            this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
+        this._passwordEntry.password_visible = echoOn;
 
         this._passwordBox.show();
         this._passwordEntry.set_text('');
diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js
index 68a6d32860..7157ad085c 100644
--- a/js/ui/shellMountOperation.js
+++ b/js/ui/shellMountOperation.js
@@ -326,11 +326,12 @@ var ShellMountPasswordDialog = GObject.registerClass({
             this._pimLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
                                             text: _("PIM Number"),
                                             y_align: Clutter.ActorAlign.CENTER });
-            this._pimEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
-                                            can_focus: true,
-                                            x_expand: true });
+            this._pimEntry = new St.PasswordEntry({
+                style_class: 'prompt-dialog-password-entry',
+                can_focus: true,
+                x_expand: true,
+            });
             this._pimEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
-            this._pimEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
             ShellEntry.addContextMenu(this._pimEntry, { isPassword: true });
 
             if (rtl) {
@@ -355,11 +356,12 @@ var ShellMountPasswordDialog = GObject.registerClass({
         this._passwordLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
                                              text: _("Password"),
                                              y_align: Clutter.ActorAlign.CENTER });
-        this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
-                                             can_focus: true,
-                                             x_expand: true });
+        this._passwordEntry = new St.PasswordEntry({
+            style_class: 'prompt-dialog-password-entry',
+            can_focus: true,
+            x_expand: true,
+        });
         this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
-        this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
         ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
         this.setInitialKeyFocus(this._passwordEntry);
         this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {


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