summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2010-03-15 23:30:01 -0400
committerRay Strode <rstrode@redhat.com>2010-04-27 17:59:16 -0400
commit59b9a9e2bfe86602e755adb490225cb3cbb5c654 (patch)
tree4a93e8fb89abe4d0f01db4fefece09e65364cfae
parentab2ca579a1e7b5dc468d020f67ceb97f65f4253a (diff)
downloadgdm-59b9a9e2bfe86602e755adb490225cb3cbb5c654.tar.gz
Drop "user-login-frequency-changed" signal in favor of "changed"
It's less specific and will let us handle the other properties changes at the same time.
-rw-r--r--gui/simple-greeter/gdm-user-chooser-widget.c58
-rw-r--r--gui/simple-greeter/gdm-user-manager.c40
-rw-r--r--gui/simple-greeter/gdm-user-manager.h2
-rw-r--r--gui/simple-greeter/gdm-user-private.h4
-rw-r--r--gui/simple-greeter/gdm-user.c22
5 files changed, 106 insertions, 20 deletions
diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
index 9658c2b4..7d2f64ef 100644
--- a/gui/simple-greeter/gdm-user-chooser-widget.c
+++ b/gui/simple-greeter/gdm-user-chooser-widget.c
@@ -461,21 +461,53 @@ on_user_is_logged_in_changed (GdmUserManager *manager,
}
static void
-on_user_login_frequency_changed (GdmUserManager *manager,
- GdmUser *user,
- GdmUserChooserWidget *widget)
+on_user_changed (GdmUserManager *manager,
+ GdmUser *user,
+ GdmUserChooserWidget *widget)
{
- const char *user_name;
- gulong freq;
+ GdkPixbuf *pixbuf;
+ char *tooltip;
+ gboolean is_logged_in;
+ int size;
- g_debug ("GdmUserChooserWidget: User login frequency changed: %s", gdm_user_get_user_name (user));
+ /* wait for all users to be loaded */
+ if (! widget->priv->loaded) {
+ return;
+ }
+ if (! widget->priv->show_normal_users) {
+ return;
+ }
- user_name = gdm_user_get_user_name (user);
- freq = gdm_user_get_login_frequency (user);
+ size = get_icon_height_for_widget (GTK_WIDGET (widget));
+ pixbuf = gdm_user_render_icon (user, size);
- gdm_chooser_widget_set_item_priority (GDM_CHOOSER_WIDGET (widget),
- user_name,
- freq);
+ if (pixbuf == NULL && widget->priv->stock_person_pixbuf != NULL) {
+ pixbuf = g_object_ref (widget->priv->stock_person_pixbuf);
+ }
+
+ tooltip = g_strdup_printf (_("Log in as %s"),
+ gdm_user_get_user_name (user));
+
+ is_logged_in = gdm_user_is_logged_in (user);
+
+ g_debug ("GdmUserChooserWidget: User added name:%s logged-in:%d pixbuf:%p",
+ gdm_user_get_user_name (user),
+ is_logged_in,
+ pixbuf);
+
+ gdm_chooser_widget_update_item (GDM_CHOOSER_WIDGET (widget),
+ gdm_user_get_user_name (user),
+ pixbuf,
+ gdm_user_get_display_name (user),
+ tooltip,
+ gdm_user_get_login_frequency (user),
+ is_logged_in,
+ FALSE);
+ g_free (tooltip);
+
+ if (pixbuf != NULL) {
+ g_object_unref (pixbuf);
+ }
}
static void
@@ -526,8 +558,8 @@ load_users (GdmUserChooserWidget *widget)
G_CALLBACK (on_user_is_logged_in_changed),
widget);
g_signal_connect (widget->priv->manager,
- "user-login-frequency-changed",
- G_CALLBACK (on_user_login_frequency_changed),
+ "user-changed",
+ G_CALLBACK (on_user_changed),
widget);
} else {
gdm_chooser_widget_loaded (GDM_CHOOSER_WIDGET (widget));
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 69787fad..375f21e6 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -105,7 +105,7 @@ enum {
USER_ADDED,
USER_REMOVED,
USER_IS_LOGGED_IN_CHANGED,
- USER_LOGIN_FREQUENCY_CHANGED,
+ USER_CHANGED,
LAST_SIGNAL
};
@@ -115,6 +115,10 @@ static void gdm_user_manager_class_init (GdmUserManagerClass *klass);
static void gdm_user_manager_init (GdmUserManager *user_manager);
static void gdm_user_manager_finalize (GObject *object);
+static gboolean match_real_name_hrfunc (gpointer key,
+ gpointer value,
+ gpointer user);
+
static gpointer user_manager_object = NULL;
G_DEFINE_TYPE (GdmUserManager, gdm_user_manager, G_TYPE_OBJECT)
@@ -441,6 +445,27 @@ on_user_sessions_changed (GdmUser *user,
g_signal_emit (manager, signals [USER_IS_LOGGED_IN_CHANGED], 0, user);
}
+static void
+on_user_changed (GdmUser *user,
+ GdmUserManager *manager)
+{
+ GdmUser *dup;
+
+ g_debug ("GdmUserManager: user changed");
+
+ dup = g_hash_table_find (manager->priv->users,
+ match_real_name_hrfunc,
+ user);
+ if (dup != NULL) {
+ _gdm_user_show_full_display_name (user);
+ _gdm_user_show_full_display_name (dup);
+ } else {
+ _gdm_user_show_short_display_name (user);
+ }
+
+ g_signal_emit (manager, signals[USER_CHANGED], 0, user);
+}
+
static char *
get_seat_id_for_session (DBusGConnection *connection,
const char *session_id)
@@ -687,6 +712,10 @@ create_user (GdmUserManager *manager)
"sessions-changed",
G_CALLBACK (on_user_sessions_changed),
manager);
+ g_signal_connect (user,
+ "changed",
+ G_CALLBACK (on_user_changed),
+ manager);
return user;
}
@@ -1198,8 +1227,7 @@ process_ck_history_line (GdmUserManager *manager,
return;
}
- g_object_set (user, "login-frequency", frequency, NULL);
- g_signal_emit (manager, signals [USER_LOGIN_FREQUENCY_CHANGED], 0, user);
+ _gdm_user_update_login_frequency (user, frequency);
g_free (username);
}
@@ -1595,11 +1623,11 @@ gdm_user_manager_class_init (GdmUserManagerClass *klass)
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, GDM_TYPE_USER);
- signals [USER_LOGIN_FREQUENCY_CHANGED] =
- g_signal_new ("user-login-frequency-changed",
+ signals [USER_CHANGED] =
+ g_signal_new ("user-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GdmUserManagerClass, user_login_frequency_changed),
+ G_STRUCT_OFFSET (GdmUserManagerClass, user_changed),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, GDM_TYPE_USER);
diff --git a/gui/simple-greeter/gdm-user-manager.h b/gui/simple-greeter/gdm-user-manager.h
index ffccea13..79fac06e 100644
--- a/gui/simple-greeter/gdm-user-manager.h
+++ b/gui/simple-greeter/gdm-user-manager.h
@@ -53,7 +53,7 @@ typedef struct
GdmUser *user);
void (* user_is_logged_in_changed) (GdmUserManager *user_manager,
GdmUser *user);
- void (* user_login_frequency_changed) (GdmUserManager *user_manager,
+ void (* user_changed) (GdmUserManager *user_manager,
GdmUser *user);
} GdmUserManagerClass;
diff --git a/gui/simple-greeter/gdm-user-private.h b/gui/simple-greeter/gdm-user-private.h
index 79cdcf44..b16547ad 100644
--- a/gui/simple-greeter/gdm-user-private.h
+++ b/gui/simple-greeter/gdm-user-private.h
@@ -32,6 +32,10 @@ G_BEGIN_DECLS
void _gdm_user_update (GdmUser *user,
const struct passwd *pwent);
+
+void _gdm_user_update_login_frequency (GdmUser *user,
+ guint64 login_frequency);
+
void _gdm_user_add_session (GdmUser *user,
const char *session_id);
void _gdm_user_remove_session (GdmUser *user,
diff --git a/gui/simple-greeter/gdm-user.c b/gui/simple-greeter/gdm-user.c
index 465c55f2..4bb2b78a 100644
--- a/gui/simple-greeter/gdm-user.c
+++ b/gui/simple-greeter/gdm-user.c
@@ -277,6 +277,28 @@ _gdm_user_update (GdmUser *user,
}
/**
+ * _gdm_user_update_login_frequency:
+ * @user: the user object to update
+ *
+ * Updates the login frequency of @user
+ *
+ * Since: 1.0
+ **/
+void
+_gdm_user_update_login_frequency (GdmUser *user,
+ guint64 login_frequency)
+{
+ g_return_if_fail (GDM_IS_USER (user));
+
+ if (login_frequency == user->login_frequency) {
+ return;
+ }
+
+ user->login_frequency = login_frequency;
+ g_signal_emit (user, signals[CHANGED], 0);
+}
+
+/**
* gdm_user_get_uid:
* @user: the user object to examine.
*