[gnome-control-center/wip/oholy/password-dialog-crashes] user-accounts: Fix password dialog crashes
- From: Ondrej Holy <oholy src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/oholy/password-dialog-crashes] user-accounts: Fix password dialog crashes
- Date: Fri, 8 Nov 2019 16:00:52 +0000 (UTC)
commit c3142c1c65909a15cff0f9462ebb2e2a66c97121
Author: Ondrej Holy <oholy redhat com>
Date: Fri Nov 8 16:10:47 2019 +0100
user-accounts: Fix password dialog crashes
Currently, the password_entry_timeout() callback can be called even after
the dialog disposal, which leads to segfaults. This is because the
corresponding source ids can be cleared in some cases without removing
the sources. Let's prevent direct calls of password_entry_timeout()
without destroying the source ids in order to fix this issue.
Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/issues/760
panels/user-accounts/cc-password-dialog.c | 6 +++++-
panels/user-accounts/cc-password-dialog.ui | 6 +++---
2 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/panels/user-accounts/cc-password-dialog.c b/panels/user-accounts/cc-password-dialog.c
index 9476a8be5..b199999c0 100644
--- a/panels/user-accounts/cc-password-dialog.c
+++ b/panels/user-accounts/cc-password-dialog.c
@@ -336,6 +336,11 @@ password_entry_key_press_cb (CcPasswordDialog *self,
{
GdkEventKey *key = (GdkEventKey *)event;
+ if (self->password_entry_timeout_id != 0) {
+ g_source_remove (self->password_entry_timeout_id);
+ self->password_entry_timeout_id = 0;
+ }
+
if (key->keyval == GDK_KEY_Tab)
password_entry_timeout (self);
@@ -476,7 +481,6 @@ cc_password_dialog_class_init (CcPasswordDialogClass *klass)
gtk_widget_class_bind_template_callback (widget_class, password_entry_focus_out_cb);
gtk_widget_class_bind_template_callback (widget_class, password_entry_icon_press_cb);
gtk_widget_class_bind_template_callback (widget_class, password_entry_key_press_cb);
- gtk_widget_class_bind_template_callback (widget_class, password_entry_timeout);
gtk_widget_class_bind_template_callback (widget_class, verify_entry_changed);
}
diff --git a/panels/user-accounts/cc-password-dialog.ui b/panels/user-accounts/cc-password-dialog.ui
index f19d490e5..bfcc7585b 100644
--- a/panels/user-accounts/cc-password-dialog.ui
+++ b/panels/user-accounts/cc-password-dialog.ui
@@ -81,7 +81,7 @@
<property name="activates_default">True</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="verify_entry_changed" object="CcPasswordDialog"
swapped="yes"/>
- <signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog"
swapped="yes"/>
+ <signal name="activate" handler="password_entry_focus_out_cb" object="CcPasswordDialog"
swapped="yes"/>
<signal name="focus-out-event" handler="password_entry_focus_out_cb" after="yes"
object="CcPasswordDialog" swapped="yes"/>
</object>
<packing>
@@ -181,7 +181,7 @@
<property name="activates_default">True</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="password_entry_changed" object="CcPasswordDialog"
swapped="yes"/>
- <signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog"
swapped="yes"/>
+ <signal name="activate" handler="password_entry_focus_out_cb" object="CcPasswordDialog"
swapped="yes"/>
<signal name="focus-out-event" handler="password_entry_focus_out_cb" after="yes"
object="CcPasswordDialog" swapped="yes"/>
<signal name="key-press-event" handler="password_entry_key_press_cb"
object="CcPasswordDialog" swapped="yes"/>
<signal name="icon-press" handler="password_entry_icon_press_cb"
object="CcPasswordDialog" swapped="yes"/>
@@ -237,7 +237,7 @@
<property name="margin_bottom">12</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="old_password_entry_changed"
object="CcPasswordDialog" swapped="yes"/>
- <signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog"
swapped="yes"/>
+ <signal name="activate" handler="old_password_entry_focus_out_cb"
object="CcPasswordDialog" swapped="yes"/>
<signal name="focus-out-event" handler="old_password_entry_focus_out_cb" after="yes"
object="CcPasswordDialog" swapped="yes"/>
</object>
<packing>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]