[accounts-dialog] Small improvements
- From: Matthias Clasen <matthiasc src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [accounts-dialog] Small improvements
- Date: Sat, 16 Jan 2010 06:41:57 +0000 (UTC)
commit 2e075243a7d3f2c02f308e8808c4a68bb59ab40d
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Jan 16 01:39:37 2010 -0500
Small improvements
Make add/delete calls async, and show a better dialog when trying
to delete a logged in user, or even yourself.
TODO | 1 -
data/user-accounts-dialog.ui | 1 +
src/main.c | 67 +++++++++++++++++++++++++++++------------
src/um-account-dialog.c | 8 +++++
src/um-user-manager.c | 39 ++++++------------------
src/um-user.c | 38 +++++++++++++++++++++++
src/um-user.h | 1 +
7 files changed, 105 insertions(+), 50 deletions(-)
---
diff --git a/TODO b/TODO
index 97fc530..b936ff4 100644
--- a/TODO
+++ b/TODO
@@ -2,7 +2,6 @@ Dialog
------
- add supervisor user to supervised accounts
- move 'disable account' to restrictions
-- consider grouping accounts more obviously, with expanders
- add language to login options
- add login option api to gdm, canonical guys have a patch for this
- async ?
diff --git a/data/user-accounts-dialog.ui b/data/user-accounts-dialog.ui
index 0f7bc78..007ef87 100644
--- a/data/user-accounts-dialog.ui
+++ b/data/user-accounts-dialog.ui
@@ -28,6 +28,7 @@
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
<object class="GtkTreeView" id="list-treeview">
+ <property name="name">userlist</property>
<property name="visible">True</property>
<property name="headers-visible">False</property>
<property name="can_focus">True</property>
diff --git a/src/main.c b/src/main.c
index 79219ba..7748919 100644
--- a/src/main.c
+++ b/src/main.c
@@ -347,30 +347,57 @@ delete_user (GtkButton *button, UserAccountDialog *d)
GtkWidget *dialog;
user = get_selected_user (d);
+ if (user == NULL) {
+ return;
+ }
+ else if (um_user_get_uid (user) == getuid ()) {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (d->main_window),
+ 0,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ _("You cannot delete your own account."));
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ }
+ else if (um_user_is_logged_in (user)) {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (d->main_window),
+ 0,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ _("%s is still logged in"),
+ um_user_get_real_name (user));
- dialog = gtk_message_dialog_new (GTK_WINDOW (d->main_window),
- 0,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- _("Do you want to keep %s's files ?"),
- um_user_get_real_name (user));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("Deleting a user while he is logged in can leave the system in an inconsistent state."));
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ }
+ else {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (d->main_window),
+ 0,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("Do you want to keep %s's files ?"),
+ um_user_get_real_name (user));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("It is possible to keep the home directory, mail spool and temporary files around when deleting a user account."));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("It is possible to keep the home directory, mail spool and temporary files around when deleting a user account."));
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- _("_Delete Files"), GTK_RESPONSE_NO,
- _("_Keep Files"), GTK_RESPONSE_YES,
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- NULL);
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ _("_Delete Files"), GTK_RESPONSE_NO,
+ _("_Keep Files"), GTK_RESPONSE_YES,
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ NULL);
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (delete_user_response), d);
+ }
- g_signal_connect (dialog, "response",
- G_CALLBACK (delete_user_response), d);
g_signal_connect (dialog, "close",
G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
gtk_window_present (GTK_WINDOW (dialog));
}
diff --git a/src/um-account-dialog.c b/src/um-account-dialog.c
index e4db837..f0a3baf 100644
--- a/src/um-account-dialog.c
+++ b/src/um-account-dialog.c
@@ -46,6 +46,14 @@ cancel_account_dialog (GtkButton *button,
}
static void
+user_created (GError *error, gpointer data)
+{
+ if (error) {
+ g_warning ("Creating user failed: %s", error->message);
+ }
+}
+
+static void
accept_account_dialog (GtkButton *button,
UmAccountDialog *um)
{
diff --git a/src/um-user-manager.c b/src/um-user-manager.c
index 290cd22..00c92ff 100644
--- a/src/um-user-manager.c
+++ b/src/um-user-manager.c
@@ -238,22 +238,11 @@ um_user_manager_create_user (UmUserManager *manager,
const char *user_name,
const char *real_name)
{
- GError *error = NULL;
- gchar *object_path;
-
- if (!dbus_g_proxy_call (manager->proxy,
- "CreateUser",
- &error,
- G_TYPE_STRING, user_name,
- G_TYPE_STRING, real_name,
- G_TYPE_INVALID,
- DBUS_TYPE_G_OBJECT_PATH, &object_path,
- G_TYPE_INVALID)) {
- g_warning ("CreateUser call failed: %s", error->message);
- g_error_free (error);
- return;
- }
- g_free (object_path);
+ dbus_g_proxy_call_no_reply (manager->proxy,
+ "CreateUser",
+ G_TYPE_STRING, user_name,
+ G_TYPE_STRING, real_name,
+ G_TYPE_INVALID);
}
void
@@ -261,19 +250,11 @@ um_user_manager_delete_user (UmUserManager *manager,
UmUser *user,
gboolean remove_files)
{
- GError *error = NULL;
-
- if (!dbus_g_proxy_call (manager->proxy,
- "DeleteUser",
- &error,
- G_TYPE_INT64, um_user_get_uid (user),
- G_TYPE_BOOLEAN, remove_files,
- G_TYPE_INVALID,
- G_TYPE_INVALID)) {
- g_warning ("DeleteUser call failed: %s", error->message);
- g_error_free (error);
- return;
- }
+ dbus_g_proxy_call_no_reply (manager->proxy,
+ "DeleteUser",
+ G_TYPE_INT64, um_user_get_uid (user),
+ G_TYPE_BOOLEAN, remove_files,
+ G_TYPE_INVALID);
}
GSList *
diff --git a/src/um-user.c b/src/um-user.c
index b6d0052..791922d 100644
--- a/src/um-user.c
+++ b/src/um-user.c
@@ -1036,3 +1036,41 @@ um_user_set_password (UmUser *user,
}
}
+gboolean
+um_user_is_logged_in (UmUser *user)
+{
+ DBusGProxy *proxy;
+ GPtrArray *array;
+ GError *error;
+ gint n_sessions;
+
+ proxy = dbus_g_proxy_new_for_name (user->bus,
+ "org.freedesktop.ConsoleKit",
+ "/org/freedesktop/ConsoleKit/Manager",
+ "org.freedesktop.ConsoleKit.Manager");
+
+ array = NULL;
+ error = NULL;
+ if (!dbus_g_proxy_call (proxy,
+ "GetSessionsForUnixUser",
+ &error,
+ G_TYPE_UINT, um_user_get_uid (user),
+ G_TYPE_INVALID,
+ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &array,
+ G_TYPE_INVALID)) {
+ g_warning ("GetSessionsForUnixUser failed: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ n_sessions = array->len;
+
+ g_ptr_array_foreach (array, (GFunc)g_free, NULL);
+ g_ptr_array_free (array, TRUE);
+
+ g_object_unref (proxy);
+
+ return n_sessions > 0;
+}
+
+
diff --git a/src/um-user.h b/src/um-user.h
index 6c8bbac..6465171 100644
--- a/src/um-user.h
+++ b/src/um-user.h
@@ -86,6 +86,7 @@ void um_user_set_password (UmUser *user,
int password_mode,
const gchar *plain,
const gchar *password_hint);
+gboolean um_user_is_logged_in (UmUser *user);
GdkPixbuf *um_user_render_icon (UmUser *user,
gboolean framed,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]