[gnome-control-center] user-accounts: Add password generation back to the password dialog



commit a3d0840bdd5e4260a066a83c9a7ed59f1665fe30
Author: Ondrej Holy <oholy redhat com>
Date:   Tue Aug 6 15:43:23 2013 +0200

    user-accounts: Add password generation back to the password dialog
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706067

 panels/user-accounts/um-password-dialog.c |   32 ++++++++++++++++++++++++++++-
 panels/user-accounts/um-utils.c           |    8 +++++++
 panels/user-accounts/um-utils.h           |    1 +
 3 files changed, 40 insertions(+), 1 deletions(-)
---
diff --git a/panels/user-accounts/um-password-dialog.c b/panels/user-accounts/um-password-dialog.c
index 4ffb36a..a6d1ac3 100644
--- a/panels/user-accounts/um-password-dialog.c
+++ b/panels/user-accounts/um-password-dialog.c
@@ -88,7 +88,9 @@ update_password_strength (UmPasswordDialog *um)
 
         if (strength_level > 0) {
                 set_entry_validation_checkmark (GTK_ENTRY (um->password_entry));
-        } else  {
+        } else if (strlen (password) == 0) {
+                set_entry_generation_icon (GTK_ENTRY (um->password_entry));
+        } else {
                 clear_entry_validation_error (GTK_ENTRY (um->password_entry));
         }
 
@@ -308,6 +310,8 @@ password_entry_changed (GtkEntry         *entry,
                       GParamSpec       *pspec,
                       UmPasswordDialog *um)
 {
+        const char *password;
+
         if (um->password_entry_timeout_id != 0) {
                 g_source_remove (um->password_entry_timeout_id);
                 um->password_entry_timeout_id = 0;
@@ -317,6 +321,11 @@ password_entry_changed (GtkEntry         *entry,
         clear_entry_validation_error (GTK_ENTRY (um->verify_entry));
         gtk_widget_set_sensitive (um->ok_button, FALSE);
 
+        password = gtk_entry_get_text (GTK_ENTRY (um->password_entry));
+        if (strlen (password) == 0) {
+                gtk_entry_set_visibility (GTK_ENTRY (um->password_entry), FALSE);
+        }
+
         um->password_entry_timeout_id = g_timeout_add (PASSWORD_CHECK_TIMEOUT,
                                                      (GSourceFunc) password_entry_timeout,
                                                      um);
@@ -404,6 +413,23 @@ old_password_entry_changed (GtkEntry         *entry,
                                                            um);
 }
 
+static void
+on_generate (GtkEntry             *entry,
+             GtkEntryIconPosition  pos,
+             GdkEventButton       *event,
+             UmPasswordDialog     *um)
+{
+        gchar *pwd;
+
+        pwd = pw_generate ();
+
+        gtk_entry_set_text (GTK_ENTRY (um->password_entry), pwd);
+        gtk_entry_set_text (GTK_ENTRY (um->verify_entry), pwd);
+        gtk_entry_set_visibility (GTK_ENTRY (um->password_entry), TRUE);
+
+        g_free (pwd);
+}
+
 UmPasswordDialog *
 um_password_dialog_new (void)
 {
@@ -454,6 +480,7 @@ um_password_dialog_new (void)
         g_signal_connect_swapped (widget, "activate", G_CALLBACK (password_entry_timeout), um);
         gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
         um->password_entry = widget;
+        g_signal_connect (widget, "icon-press", G_CALLBACK (on_generate), um);
 
         widget = (GtkWidget *) gtk_builder_get_object (builder, "old-password-entry");
         g_signal_connect_after (widget, "focus-out-event",
@@ -523,6 +550,9 @@ um_password_dialog_set_user (UmPasswordDialog *um,
                 gtk_entry_set_text (GTK_ENTRY (um->verify_entry), "");
                 gtk_entry_set_text (GTK_ENTRY (um->old_password_entry), "");
 
+                gtk_entry_set_visibility (GTK_ENTRY (um->password_entry), FALSE);
+                gtk_entry_set_visibility (GTK_ENTRY (um->verify_entry), FALSE);
+
                 if (act_user_get_uid (um->user) == getuid ()) {
                         mode_change (um, ACT_USER_PASSWORD_MODE_REGULAR);
                         gtk_widget_hide (um->action_radio_box);
diff --git a/panels/user-accounts/um-utils.c b/panels/user-accounts/um-utils.c
index a411f92..b4a9d43 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_generation_icon (GtkEntry *entry)
+{
+        g_object_set (entry, "caps-lock-warning", FALSE, NULL);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "system-run-symbolic");
+        gtk_entry_set_icon_activatable (entry, GTK_ENTRY_ICON_SECONDARY, TRUE);
+}
+
+void
 set_entry_validation_checkmark (GtkEntry *entry)
 {
         g_object_set (entry, "caps-lock-warning", FALSE, NULL);
diff --git a/panels/user-accounts/um-utils.h b/panels/user-accounts/um-utils.h
index e15a2de..90aff72 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_generation_icon        (GtkEntry    *entry);
 void     set_entry_validation_checkmark   (GtkEntry    *entry);
 void     set_entry_validation_error       (GtkEntry    *entry,
                                            const gchar *text);


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