[gnome-control-center] user-accounts: add positive confirmation to the password dialog



commit aaf25450ee60dba6e6c4bb046076282c8ad028b1
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Jul 23 13:22:49 2013 +0200

    user-accounts: add positive confirmation to the password dialog
    
    Add checkmarks, remove exclam icons, remove tooltips, change
    password hints and decrese timeout (by design).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=702476

 panels/user-accounts/data/password-dialog.ui |   12 ----------
 panels/user-accounts/pw-utils.c              |    3 +-
 panels/user-accounts/um-password-dialog.c    |   31 ++++++++++++-------------
 panels/user-accounts/um-utils.c              |    8 ++++++
 panels/user-accounts/um-utils.h              |    1 +
 5 files changed, 26 insertions(+), 29 deletions(-)
---
diff --git a/panels/user-accounts/data/password-dialog.ui b/panels/user-accounts/data/password-dialog.ui
index cb23bc4..47ca93e 100644
--- a/panels/user-accounts/data/password-dialog.ui
+++ b/panels/user-accounts/data/password-dialog.ui
@@ -220,18 +220,6 @@
                     <property name="width">3</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkImage" id="old-password-checkmark">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="stock">gtk-apply</property>
-                    <property name="halign">start</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">2</property>
-                    <property name="top_attach">3</property>
-                  </packing>
-                </child>
               </object>
               <packing>
                 <property name="position">0</property>
diff --git a/panels/user-accounts/pw-utils.c b/panels/user-accounts/pw-utils.c
index bc265a7..591373e 100644
--- a/panels/user-accounts/pw-utils.c
+++ b/panels/user-accounts/pw-utils.c
@@ -115,8 +115,9 @@ pw_error_hint (gint error)
         case PWQ_ERROR_MIN_LENGTH:
                 return C_("Password hint", "Try to add more letters, numbers and symbols.");
         case PWQ_ERROR_EMPTY_PASSWORD:
-        default:
                 return C_("Password hint", "Mix uppercase and lowercase and use a number or two.");
+        default:
+                return C_("Password hint", "Good password! Adding more letters, numbers and punctuation will 
make it stronger.");
         }
 }
 
diff --git a/panels/user-accounts/um-password-dialog.c b/panels/user-accounts/um-password-dialog.c
index 5ced5c0..0e267bb 100644
--- a/panels/user-accounts/um-password-dialog.c
+++ b/panels/user-accounts/um-password-dialog.c
@@ -36,7 +36,7 @@
 #include "run-passwd.h"
 #include "pw-utils.h"
 
-#define PASSWORD_CHECK_TIMEOUT 1000
+#define PASSWORD_CHECK_TIMEOUT 600
 
 struct _UmPasswordDialog {
         GtkWidget *dialog;
@@ -56,7 +56,6 @@ struct _UmPasswordDialog {
 
         GtkWidget *old_password_label;
         GtkWidget *old_password_entry;
-        GtkWidget *old_password_checkmark;
         gboolean   old_password_ok;
         gint       old_password_entry_timeout_id;
 
@@ -101,6 +100,12 @@ update_password_strength (UmPasswordDialog *um)
                 gtk_widget_set_sensitive (um->verify_entry, strength_level > 0);
         }
 
+        if (strength_level > 0) {
+                set_entry_validation_checkmark (GTK_ENTRY (um->password_entry));
+        } else  {
+                clear_entry_validation_error (GTK_ENTRY (um->password_entry));
+        }
+
         return strength_level;
 }
 
@@ -293,11 +298,9 @@ update_password_match (UmPasswordDialog *um)
                 if (strcmp (password, verify) != 0) {
                         gtk_label_set_label (GTK_LABEL (um->password_hint),
                                              _("The passwords do not match."));
-                        set_entry_validation_error (GTK_ENTRY (um->verify_entry),
-                                                    _("Passwords do not match"));
                 }
                 else {
-                        clear_entry_validation_error (GTK_ENTRY (um->verify_entry));
+                        set_entry_validation_checkmark (GTK_ENTRY (um->verify_entry));
                 }
         }
 }
@@ -325,6 +328,8 @@ password_entry_changed (GtkEntry         *entry,
         }
 
         clear_entry_validation_error (GTK_ENTRY (entry));
+        clear_entry_validation_error (GTK_ENTRY (um->verify_entry));
+        gtk_widget_set_sensitive (um->ok_button, FALSE);
 
         um->password_entry_timeout_id = g_timeout_add (PASSWORD_CHECK_TIMEOUT,
                                                      (GSourceFunc) password_entry_timeout,
@@ -353,13 +358,10 @@ auth_cb (PasswdHandler    *handler,
 {
         if (error) {
                 um->old_password_ok = FALSE;
-                set_entry_validation_error (GTK_ENTRY (um->old_password_entry),
-                                            _("Wrong password"));
         }
         else {
                 um->old_password_ok = TRUE;
-                clear_entry_validation_error (GTK_ENTRY (um->old_password_entry));
-                gtk_widget_show (um->old_password_checkmark);
+                set_entry_validation_checkmark (GTK_ENTRY (um->old_password_entry));
         }
 
         update_sensitivity (um);
@@ -370,6 +372,8 @@ old_password_entry_timeout (UmPasswordDialog *um)
 {
         const char *text;
 
+        update_sensitivity (um);
+
         text = gtk_entry_get_text (GTK_ENTRY (um->old_password_entry));
         if (strlen (text) > 0 && !um->old_password_ok) {
                 passwd_authenticate (um->passwd_handler, text, (PasswdCallback)auth_cb, um);
@@ -405,11 +409,10 @@ old_password_entry_changed (GtkEntry         *entry,
                 um->old_password_entry_timeout_id = 0;
         }
 
-        gtk_widget_hide (um->old_password_checkmark);
         clear_entry_validation_error (GTK_ENTRY (entry));
-        um->old_password_ok = FALSE;
-        update_sensitivity (um);
+        gtk_widget_set_sensitive (um->ok_button, FALSE);
 
+        um->old_password_ok = FALSE;
         um->old_password_entry_timeout_id = g_timeout_add (PASSWORD_CHECK_TIMEOUT,
                                                            (GSourceFunc) old_password_entry_timeout,
                                                            um);
@@ -485,8 +488,6 @@ um_password_dialog_new (void)
                           G_CALLBACK (old_password_entry_changed), um);
         um->old_password_entry = widget;
         um->old_password_label = (GtkWidget *) gtk_builder_get_object (builder, "old-password-label");
-        um->old_password_checkmark = (GtkWidget *) gtk_builder_get_object (builder, 
"old-password-checkmark");
-        um->old_password_entry_timeout_id = 0;
 
         widget = (GtkWidget *) gtk_builder_get_object (builder, "verify-entry");
         g_signal_connect (widget, "notify::text",
@@ -494,7 +495,6 @@ um_password_dialog_new (void)
         g_signal_connect_after (widget, "focus-out-event",
                                 G_CALLBACK (password_entry_focus_out), um);
         um->verify_entry = widget;
-        um->password_entry_timeout_id = 0;
 
         widget = (GtkWidget *) gtk_builder_get_object (builder, "strength-indicator-label");
         len = pw_strength_hint_get_width_chars ();
@@ -549,7 +549,6 @@ um_password_dialog_set_user (UmPasswordDialog *um,
                 gtk_entry_set_text (GTK_ENTRY (um->password_entry), "");
                 gtk_entry_set_text (GTK_ENTRY (um->verify_entry), "");
                 gtk_entry_set_text (GTK_ENTRY (um->old_password_entry), "");
-                gtk_widget_hide (um->old_password_checkmark);
 
                 if (act_user_get_uid (um->user) == getuid ()) {
                         mode_change (um, ACT_USER_PASSWORD_MODE_REGULAR);
diff --git a/panels/user-accounts/um-utils.c b/panels/user-accounts/um-utils.c
index 529812c..a411f92 100644
--- a/panels/user-accounts/um-utils.c
+++ b/panels/user-accounts/um-utils.c
@@ -301,6 +301,14 @@ set_entry_validation_error (GtkEntry    *entry,
 }
 
 void
+set_entry_validation_checkmark (GtkEntry *entry)
+{
+        g_object_set (entry, "caps-lock-warning", FALSE, NULL);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "object-select-symbolic");
+        gtk_entry_set_icon_activatable (entry, GTK_ENTRY_ICON_SECONDARY, FALSE);
+}
+
+void
 clear_entry_validation_error (GtkEntry *entry)
 {
         gboolean warning;
diff --git a/panels/user-accounts/um-utils.h b/panels/user-accounts/um-utils.h
index 71f712a..e15a2de 100644
--- a/panels/user-accounts/um-utils.h
+++ b/panels/user-accounts/um-utils.h
@@ -40,6 +40,7 @@ void     setup_tooltip_with_embedded_icon (GtkWidget   *widget,
 gboolean show_tooltip_now                 (GtkWidget   *widget,
                                            GdkEvent    *event);
 
+void     set_entry_validation_checkmark   (GtkEntry    *entry);
 void     set_entry_validation_error       (GtkEntry    *entry,
                                            const gchar *text);
 void     clear_entry_validation_error     (GtkEntry    *entry);


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