[gnome-shell] js: Use StPasswordEntry for password entry fields
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] js: Use StPasswordEntry for password entry fields
- Date: Tue, 17 Dec 2019 22:17:56 +0000 (UTC)
commit 684b918915d5ffa1f9c19f3d4dedd9e61622201a
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 | 37 ++++++++++++++++++++++++++-----------
js/gdm/loginDialog.js | 1 -
js/gdm/util.js | 4 ++--
js/ui/components/keyring.js | 26 ++++++++++++++------------
js/ui/components/networkAgent.js | 21 ++++++++++++---------
js/ui/components/polkitAgent.js | 9 +++------
js/ui/shellMountOperation.js | 22 ++++++++++++----------
js/ui/unlockDialog.js | 1 -
8 files changed, 69 insertions(+), 52 deletions(-)
---
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 6af3427617..cb39104e14 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -98,14 +98,23 @@ var AuthPrompt = GObject.registerClass({
});
this.add_child(this._label);
- this._entry = new St.Entry({
+
+ let entryParams = {
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 });
+ };
+
+ this._entry = null;
+ this._textEntry = new St.Entry(entryParams);
+ ShellEntry.addContextMenu(this._textEntry, { actionMode: Shell.ActionMode.NONE });
+
+ this._passwordEntry = new St.PasswordEntry(entryParams);
+ ShellEntry.addContextMenu(this._passwordEntry, { actionMode: Shell.ActionMode.NONE });
+
+ this._entry = this._passwordEntry;
this.add_child(this._entry);
this._entry.grab_key_focus();
@@ -195,7 +204,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 +224,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 +378,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/loginDialog.js b/js/gdm/loginDialog.js
index e5383a3a6e..2fd24eafda 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -896,7 +896,6 @@ var LoginDialog = GObject.registerClass({
}
_askForUsernameAndBeginVerification() {
- this._authPrompt.setPasswordChar('');
this._authPrompt.setQuestion(_("Username: "));
this._showRealmLoginHint(this._realmManager.loginFormat);
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..c01e09b827 100644
--- a/js/ui/components/keyring.js
+++ b/js/ui/components/keyring.js
@@ -70,12 +70,13 @@ 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
- ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
+ this._passwordEntry = new St.PasswordEntry({
+ style_class: 'prompt-dialog-password-entry',
+ text: '',
+ can_focus: true,
+ x_expand: true,
+ });
+ ShellEntry.addContextMenu(this._passwordEntry);
this._passwordEntry.clutter_text.connect('activate', this._onPasswordActivate.bind(this));
this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
@@ -102,12 +103,13 @@ 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
- ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true });
+ this._confirmEntry = new St.PasswordEntry({
+ style_class: 'prompt-dialog-password-entry',
+ text: '',
+ can_focus: true,
+ x_expand: true,
+ });
+ ShellEntry.addContextMenu(this._confirmEntry);
this._confirmEntry.clutter_text.connect('activate', this._onConfirmActivate.bind(this));
if (rtl) {
layout.attach(this._confirmEntry, 0, row, 1, 1);
diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
index 251438683b..ab7cc88daf 100644
--- a/js/ui/components/networkAgent.js
+++ b/js/ui/components/networkAgent.js
@@ -54,12 +54,18 @@ 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 });
- ShellEntry.addContextMenu(secret.entry,
- { isPassword: secret.password });
+ 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);
if (secret.validate)
secret.valid = secret.validate(secret);
@@ -93,9 +99,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..e57b2cdc7f 100644
--- a/js/ui/components/polkitAgent.js
+++ b/js/ui/components/polkitAgent.js
@@ -90,13 +90,13 @@ 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,
x_expand: true,
});
- ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
+ ShellEntry.addContextMenu(this._passwordEntry);
this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
this._passwordEntry.bind_property('reactive',
this._passwordEntry.clutter_text, 'editable',
@@ -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..ca06873c3e 100644
--- a/js/ui/shellMountOperation.js
+++ b/js/ui/shellMountOperation.js
@@ -326,12 +326,13 @@ 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 });
+ ShellEntry.addContextMenu(this._pimEntry);
if (rtl) {
layout.attach(this._pimEntry, 0, 0, 1, 1);
@@ -355,12 +356,13 @@ 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 });
+ ShellEntry.addContextMenu(this._passwordEntry);
this.setInitialKeyFocus(this._passwordEntry);
this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
animate: true,
diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js
index 6584bea450..b0f5fcf649 100644
--- a/js/ui/unlockDialog.js
+++ b/js/ui/unlockDialog.js
@@ -41,7 +41,6 @@ var UnlockDialog = GObject.registerClass({
this._authPrompt.connect('failed', this._fail.bind(this));
this._authPrompt.connect('cancelled', this._fail.bind(this));
this._authPrompt.connect('reset', this._onReset.bind(this));
- this._authPrompt.setPasswordChar('\u25cf');
this._authPrompt.nextButton.label = _("Unlock");
this._promptBox.add_child(this._authPrompt);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]