st/password-entry: Fix crash when DConf changes after StEntry is destroyed

commit 8721c5db37 made StPasswordEntry
honor the 'disable-show-password' setting.

Unfortunately, it introduced a lifecycle bug where the signal handler
for noticing setting changes can out live the entry itself.

This commit fixes the problem by using g_signal_connect_object

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2004>
This commit is contained in:
Ray Strode 2021-10-12 15:15:50 -04:00
parent c1c0b34d77
commit ddb6276a49

View File

@ -37,6 +37,7 @@ struct _StPasswordEntry
struct _StPasswordEntryPrivate struct _StPasswordEntryPrivate
{ {
ClutterActor *peek_password_icon; ClutterActor *peek_password_icon;
gboolean password_visible; gboolean password_visible;
gboolean show_peek_icon; gboolean show_peek_icon;
}; };
@ -229,10 +230,11 @@ st_password_entry_init (StPasswordEntry *entry)
st_password_entry_set_show_peek_icon (entry, TRUE); st_password_entry_set_show_peek_icon (entry, TRUE);
g_signal_connect (st_settings_get (), g_signal_connect_object (st_settings_get (),
"notify::disable-show-password", "notify::disable-show-password",
G_CALLBACK (on_disable_show_password_changed), G_CALLBACK (on_disable_show_password_changed),
entry); entry,
0);
clutter_text = st_entry_get_clutter_text (ST_ENTRY (entry)); clutter_text = st_entry_get_clutter_text (ST_ENTRY (entry));
clutter_text_set_password_char (CLUTTER_TEXT (clutter_text), BLACK_CIRCLE); clutter_text_set_password_char (CLUTTER_TEXT (clutter_text), BLACK_CIRCLE);