[gnome-control-center/wip/oholy/disable-verify-password-entry: 63/64] user-accounts: Validate password before moving focus



commit 6356279b642bd8a90d5dc0fe035dbe0a8a70ed1a
Author: Ondrej Holy <oholy redhat com>
Date:   Wed Apr 11 10:01:20 2018 +0200

    user-accounts: Validate password before moving focus
    
    If <tab> is pressed and password is not yet validated (ie. the verify
    entry is not sensitive), focus skips the verify entry, even if the
    password is strong enough. Let's validate the password when <tab> is
    pressed (ie. before focus change) to prevent this <tab> breakage...
    
    https://gitlab.gnome.org/GNOME/gnome-control-center/issues/38

 panels/user-accounts/um-account-dialog.c  | 15 +++++++++++++++
 panels/user-accounts/um-password-dialog.c | 15 +++++++++++++++
 2 files changed, 30 insertions(+)
---
diff --git a/panels/user-accounts/um-account-dialog.c b/panels/user-accounts/um-account-dialog.c
index 896c3db35..9d4e754d3 100644
--- a/panels/user-accounts/um-account-dialog.c
+++ b/panels/user-accounts/um-account-dialog.c
@@ -517,6 +517,20 @@ on_password_focus_out (GtkEntry *entry,
         return FALSE;
 }
 
+static gboolean
+on_password_key_press_cb (GtkEntry *entry,
+                          GdkEvent *event,
+                          gpointer  user_data)
+{
+        UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data);
+        GdkEventKey *key = (GdkEventKey *)event;
+
+        if (key->keyval == GDK_KEY_Tab)
+               local_password_timeout (self);
+
+        return FALSE;
+}
+
 static void
 on_password_changed (GtkEntry *entry,
                    GParamSpec *pspec,
@@ -580,6 +594,7 @@ local_init (UmAccountDialog *self)
         gtk_widget_set_sensitive (self->local_password, FALSE);
         g_signal_connect (self->local_password, "notify::text", G_CALLBACK (on_password_changed), self);
         g_signal_connect_after (self->local_password, "focus-out-event", G_CALLBACK (on_password_focus_out), 
self);
+        g_signal_connect (self->local_password, "key-press-event", G_CALLBACK (on_password_key_press_cb), 
self);
         g_signal_connect_swapped (self->local_password, "activate", G_CALLBACK (dialog_validate), self);
         g_signal_connect (self->local_password, "icon-press", G_CALLBACK (on_generate), self);
 
diff --git a/panels/user-accounts/um-password-dialog.c b/panels/user-accounts/um-password-dialog.c
index b3c8e8b54..97490a883 100644
--- a/panels/user-accounts/um-password-dialog.c
+++ b/panels/user-accounts/um-password-dialog.c
@@ -350,6 +350,19 @@ password_entry_focus_out (GtkWidget        *entry,
         return FALSE;
 }
 
+static gboolean
+password_key_press (GtkEntry         *entry,
+                    GdkEvent         *event,
+                    UmPasswordDialog *um)
+{
+        GdkEventKey *key = (GdkEventKey *)event;
+
+        if (key->keyval == GDK_KEY_Tab)
+               password_entry_timeout (um);
+
+        return FALSE;
+}
+
 static void
 auth_cb (PasswdHandler    *handler,
          GError           *error,
@@ -481,6 +494,8 @@ um_password_dialog_new (void)
                           G_CALLBACK (password_entry_changed), um);
         g_signal_connect_after (widget, "focus-out-event",
                                 G_CALLBACK (password_entry_focus_out), um);
+        g_signal_connect (widget, "key-press-event",
+                          G_CALLBACK (password_key_press), um);
         g_signal_connect_swapped (widget, "activate", G_CALLBACK (password_entry_timeout), um);
         gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
         um->password_entry = widget;


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