authPrompt: Manually destroy inactive/unused entry
AuthPrompt creates two entries, one for text and one for passwords, but only ever one is used as child widget. This would lead to the other one not getting destroyed when the the AuthPrompt is destroyed. This now manually destroys the inactive one when the AuthPrompt is destroyed to avoid that leak. Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6395 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2637>
This commit is contained in:
parent
2e51e7f887
commit
572d011894
@ -120,6 +120,8 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
|
this._inactiveEntry.destroy();
|
||||||
|
this._inactiveEntry = null;
|
||||||
this._userVerifier.destroy();
|
this._userVerifier.destroy();
|
||||||
this._userVerifier = null;
|
this._userVerifier = null;
|
||||||
}
|
}
|
||||||
@ -189,6 +191,7 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
this._entry = this._passwordEntry;
|
this._entry = this._passwordEntry;
|
||||||
this._mainBox.add_child(this._entry);
|
this._mainBox.add_child(this._entry);
|
||||||
this._entry.grab_key_focus();
|
this._entry.grab_key_focus();
|
||||||
|
this._inactiveEntry = this._textEntry;
|
||||||
|
|
||||||
this._timedLoginIndicator = new St.Bin({
|
this._timedLoginIndicator = new St.Bin({
|
||||||
style_class: 'login-dialog-timed-login-indicator',
|
style_class: 'login-dialog-timed-login-indicator',
|
||||||
@ -278,9 +281,11 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
if (secret && this._entry !== this._passwordEntry) {
|
if (secret && this._entry !== this._passwordEntry) {
|
||||||
this._mainBox.replace_child(this._entry, this._passwordEntry);
|
this._mainBox.replace_child(this._entry, this._passwordEntry);
|
||||||
this._entry = this._passwordEntry;
|
this._entry = this._passwordEntry;
|
||||||
|
this._inactiveEntry = this._textEntry;
|
||||||
} else if (!secret && this._entry !== this._textEntry) {
|
} else if (!secret && this._entry !== this._textEntry) {
|
||||||
this._mainBox.replace_child(this._entry, this._textEntry);
|
this._mainBox.replace_child(this._entry, this._textEntry);
|
||||||
this._entry = this._textEntry;
|
this._entry = this._textEntry;
|
||||||
|
this._inactiveEntry = this._passwordEntry;
|
||||||
}
|
}
|
||||||
this._capsLockWarningLabel.visible = secret;
|
this._capsLockWarningLabel.visible = secret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user