[accounts-dialog/lockbutton: 1/4] Try a lockbutton for user page too



commit 1f03da9a52cc5f374581ce6bc34a75b2eb50315e
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jan 21 22:41:51 2010 -0500

    Try a lockbutton for user page too

 src/main.c |   64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)
---
diff --git a/src/main.c b/src/main.c
index 4f150a7..95ec374 100644
--- a/src/main.c
+++ b/src/main.c
@@ -33,6 +33,7 @@
 #include <gtk/gtk.h>
 #include <unique/unique.h>
 #include <polkit/polkit.h>
+#include <polkitgtk/polkitgtk.h>
 #include <dbus/dbus-glib-bindings.h>
 
 #ifdef HAVE_CHEESE
@@ -62,6 +63,7 @@ typedef struct {
         GtkBuilder *builder;
 
         GtkWidget *main_window;
+	GtkWidget *lock_button;
 
         UmAccountDialog *account_dialog;
         UmAccountTypeDialog *account_type_dialog;
@@ -756,6 +758,8 @@ authorizations_changed (PolkitAuthority *authority,
         }
 }
 
+static void lockbutton_changed (PolkitLockButton *button, gpointer data);
+
 static void
 selected_user_changed (GtkTreeSelection *selection, UserAccountDialog *d)
 {
@@ -771,7 +775,10 @@ selected_user_changed (GtkTreeSelection *selection, UserAccountDialog *d)
                 widget = get_widget (d, "login-options-button");
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
                 update_create_buttons (d);
+#if 0
                 update_change_buttons (d, user);
+#endif
+		lockbutton_changed (POLKIT_LOCK_BUTTON (d->lock_button), d);
 
                 g_object_unref (user);
         }
@@ -1006,6 +1013,52 @@ users_loaded (UmUserManager     *manager,
 }
 
 static void
+lockbutton_changed (PolkitLockButton *button,
+                    gpointer          data)
+{
+	UserAccountDialog *d = data;
+	gboolean is_authorized;
+	UmUser *user;
+
+        user = get_selected_user (d);
+	if (!user) {
+		return;
+	}
+
+        if (um_user_get_uid (user) == geteuid ()) {
+		gtk_widget_hide (GTK_WIDGET (button));
+		is_authorized = TRUE;
+	}
+	else {
+		gtk_widget_show (GTK_WIDGET (button));
+        	is_authorized = polkit_lock_button_get_is_authorized (button);
+	}
+
+        if (is_authorized) {
+                gtk_widget_show (get_widget (d, "user-icon-button"));
+                gtk_widget_hide (get_widget (d, "user-icon-nonbutton"));
+
+                gtk_widget_show (get_widget (d, "change-name-button"));
+                gtk_widget_show (get_widget (d, "change-email-button"));
+                gtk_widget_show (get_widget (d, "change-language-button"));
+                gtk_widget_show (get_widget (d, "change-location-button"));
+                gtk_widget_show (get_widget (d, "change-account-type-button"));
+                gtk_widget_show (get_widget (d, "change-password-button"));
+        }
+        else {
+                gtk_widget_hide (get_widget (d, "user-icon-button"));
+                gtk_widget_show (get_widget (d, "user-icon-nonbutton"));
+
+                gtk_widget_hide (get_widget (d, "change-name-button"));
+                gtk_widget_hide (get_widget (d, "change-email-button"));
+                gtk_widget_hide (get_widget (d, "change-language-button"));
+                gtk_widget_hide (get_widget (d, "change-location-button"));
+                gtk_widget_hide (get_widget (d, "change-account-type-button"));
+                gtk_widget_hide (get_widget (d, "change-password-button"));
+        }
+}
+
+static void
 setup_main_window (UserAccountDialog *d)
 {
         GtkWidget *window;
@@ -1018,6 +1071,7 @@ setup_main_window (UserAccountDialog *d)
         GtkWidget *button;
         GtkTreeIter iter;
         gint expander_size;
+        GtkWidget *box;
 
         window = get_widget (d, "user-account-window");
         g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
@@ -1112,6 +1166,16 @@ setup_main_window (UserAccountDialog *d)
         button = get_widget (d, "change-fingerprint-button-disable");
         g_signal_connect (button, "clicked",
                           G_CALLBACK (change_fingerprint), d);
+
+	button = polkit_lock_button_new ("org.freedesktop.accounts.user-administration");
+        gtk_widget_show (button);
+	box = get_widget (d, "main-user-vbox");
+        gtk_box_pack_end (GTK_BOX (box), button, FALSE, FALSE, 0);
+        g_signal_connect (button, "changed",
+                          G_CALLBACK (lockbutton_changed), d);
+        lockbutton_changed (POLKIT_LOCK_BUTTON (button), d);
+        d->lock_button = button;
+
 }
 
 static void



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