summaryrefslogtreecommitdiff
path: root/gui/simple-greeter/gdm-user.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/simple-greeter/gdm-user.c')
-rw-r--r--gui/simple-greeter/gdm-user.c587
1 files changed, 0 insertions, 587 deletions
diff --git a/gui/simple-greeter/gdm-user.c b/gui/simple-greeter/gdm-user.c
deleted file mode 100644
index a7d1e9ed..00000000
--- a/gui/simple-greeter/gdm-user.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <config.h>
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gtk/gtkicontheme.h>
-
-#include "gdm-user-manager.h"
-#include "gdm-user-private.h"
-
-#define GDM_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDM_TYPE_USER, GdmUserClass))
-#define GDM_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDM_TYPE_USER))
-#define GDM_USER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), GDM_TYPE_USER, GdmUserClass))
-
-enum {
- PROP_0,
- PROP_MANAGER,
- PROP_REAL_NAME,
- PROP_USER_NAME,
- PROP_UID,
- PROP_HOME_DIR,
- PROP_SHELL,
- PROP_SESSIONS
-};
-
-enum {
- ICON_CHANGED,
- SESSIONS_CHANGED,
- LAST_SIGNAL
-};
-
-struct _GdmUser {
- GObject parent;
-
- GdmUserManager *manager;
-
- uid_t uid;
- gchar *user_name;
- gchar *real_name;
- gchar *home_dir;
- gchar *shell;
- GSList *sessions;
-};
-
-typedef struct _GdmUserClass
-{
- GObjectClass parent_class;
-
- void (* icon_changed) (GdmUser *user);
- void (* sessions_changed) (GdmUser *user);
-} GdmUserClass;
-
-/* GObject Functions */
-static void gdm_user_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
-static void gdm_user_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec);
-static void gdm_user_finalize (GObject *object);
-
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (GdmUser, gdm_user, G_TYPE_OBJECT);
-
-static void
-gdm_user_class_init (GdmUserClass *class)
-{
- GObjectClass *gobject_class;
-
- gobject_class = G_OBJECT_CLASS (class);
-
- gobject_class->set_property = gdm_user_set_property;
- gobject_class->get_property = gdm_user_get_property;
- gobject_class->finalize = gdm_user_finalize;
-
- g_object_class_install_property (gobject_class,
- PROP_MANAGER,
- g_param_spec_object ("manager",
- _("Manager"),
- _("The user manager object this user is controlled by."),
- GDM_TYPE_USER_MANAGER,
- (G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY)));
-
- g_object_class_install_property (gobject_class,
- PROP_REAL_NAME,
- g_param_spec_string ("real-name",
- "Real Name",
- "The real name to display for this user.",
- NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property (gobject_class,
- PROP_UID,
- g_param_spec_ulong ("uid",
- "User ID",
- "The UID for this user.",
- 0, G_MAXULONG, 0,
- G_PARAM_READABLE));
- g_object_class_install_property (gobject_class,
- PROP_USER_NAME,
- g_param_spec_string ("user-name",
- "User Name",
- "The login name for this user.",
- NULL,
- G_PARAM_READABLE));
- g_object_class_install_property (gobject_class,
- PROP_HOME_DIR,
- g_param_spec_string ("home-directory",
- "Home Directory",
- "The home directory for this user.",
- NULL,
- G_PARAM_READABLE));
- g_object_class_install_property (gobject_class,
- PROP_SHELL,
- g_param_spec_string ("shell",
- "Shell",
- "The shell for this user.",
- NULL,
- G_PARAM_READABLE));
-
- signals [ICON_CHANGED] =
- g_signal_new ("icon-changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GdmUserClass, icon_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals [SESSIONS_CHANGED] =
- g_signal_new ("sessions-changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GdmUserClass, sessions_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-static void
-gdm_user_init (GdmUser *user)
-{
- user->manager = NULL;
- user->user_name = NULL;
- user->real_name = NULL;
- user->sessions = NULL;
-}
-
-static void
-gdm_user_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdmUser *user;
-
- user = GDM_USER (object);
-
- switch (param_id) {
- case PROP_MANAGER:
- user->manager = g_value_get_object (value);
- g_assert (user->manager);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-gdm_user_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GdmUser *user;
-
- user = GDM_USER (object);
-
- switch (param_id) {
- case PROP_MANAGER:
- g_value_set_object (value, user->manager);
- break;
- case PROP_USER_NAME:
- g_value_set_string (value, user->user_name);
- break;
- case PROP_REAL_NAME:
- g_value_set_string (value, user->real_name);
- break;
- case PROP_HOME_DIR:
- g_value_set_string (value, user->home_dir);
- break;
- case PROP_UID:
- g_value_set_ulong (value, user->uid);
- break;
- case PROP_SHELL:
- g_value_set_string (value, user->shell);
- break;
- case PROP_SESSIONS:
- if (user->sessions) {
- GValueArray *ar;
- GSList *list;
- GValue tmp = { 0 };
-
- ar = g_value_array_new (g_slist_length (user->sessions));
- g_value_init (&tmp, GDM_TYPE_USER);
- for (list = user->sessions; list; list = list->next) {
- g_value_set_object (&tmp, list->data);
- g_value_array_append (ar, &tmp);
- g_value_reset (&tmp);
- }
-
- g_value_take_boxed (value, ar);
- } else {
- g_value_set_boxed (value, NULL);
- }
-
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-gdm_user_finalize (GObject *object)
-{
- GdmUser *user;
-
- user = GDM_USER (object);
-
- g_free (user->user_name);
- g_free (user->real_name);
-
- if (G_OBJECT_CLASS (gdm_user_parent_class)->finalize)
- (*G_OBJECT_CLASS (gdm_user_parent_class)->finalize) (object);
-}
-
-/**
- * _gdm_user_update:
- * @user: the user object to update.
- * @pwent: the user data to use.
- *
- * Updates the properties of @user using the data in @pwent.
- *
- * Since: 1.0
- **/
-void
-_gdm_user_update (GdmUser *user,
- const struct passwd *pwent)
-{
- gchar *real_name;
-
- g_return_if_fail (GDM_IS_USER (user));
- g_return_if_fail (pwent != NULL);
-
- g_object_freeze_notify (G_OBJECT (user));
-
- /* Display Name */
- if (pwent->pw_gecos && pwent->pw_gecos[0] != '\0') {
- gchar *first_comma;
-
- first_comma = strchr (pwent->pw_gecos, ',');
- if (first_comma) {
- real_name = g_strndup (pwent->pw_gecos,
- (first_comma - pwent->pw_gecos));
- } else {
- real_name = g_strdup (pwent->pw_gecos);
- }
-
- if (real_name[0] == '\0') {
- g_free (real_name);
- real_name = NULL;
- }
- } else {
- real_name = NULL;
- }
-
- if ((real_name && !user->real_name) ||
- (!real_name && user->real_name) ||
- (real_name &&
- user->real_name &&
- strcmp (real_name, user->real_name) != 0)) {
- g_free (user->real_name);
- user->real_name = real_name;
- g_object_notify (G_OBJECT (user), "real-name");
- } else {
- g_free (real_name);
- }
-
- /* UID */
- if (pwent->pw_uid != user->uid) {
- user->uid = pwent->pw_uid;
- g_object_notify (G_OBJECT (user), "uid");
- }
-
- /* Username */
- if ((pwent->pw_name && !user->user_name) ||
- (!pwent->pw_name && user->user_name) ||
- (pwent->pw_name &&
- user->user_name &&
- strcmp (user->user_name, pwent->pw_name) != 0)) {
- g_free (user->user_name);
- user->user_name = g_strdup (pwent->pw_name);
- g_object_notify (G_OBJECT (user), "user-name");
- }
-
- /* Home Directory */
- if ((pwent->pw_dir && !user->home_dir) ||
- (!pwent->pw_dir && user->home_dir) ||
- strcmp (user->home_dir, pwent->pw_dir) != 0) {
- g_free (user->home_dir);
- user->home_dir = g_strdup (pwent->pw_dir);
- g_object_notify (G_OBJECT (user), "home-directory");
- g_signal_emit (user, signals[ICON_CHANGED], 0);
- }
-
- /* Shell */
- if ((pwent->pw_shell && !user->shell) ||
- (!pwent->pw_shell && user->shell) ||
- (pwent->pw_shell &&
- user->shell &&
- strcmp (user->shell, pwent->pw_shell) != 0)) {
- g_free (user->shell);
- user->shell = g_strdup (pwent->pw_shell);
- g_object_notify (G_OBJECT (user), "shell");
- }
-
- g_object_thaw_notify (G_OBJECT (user));
-}
-
-void
-_gdm_user_add_session (GdmUser *user,
- const char *ssid)
-{
- g_return_if_fail (GDM_IS_USER (user));
- g_return_if_fail (ssid != NULL);
-
- if (! g_slist_find (user->sessions, ssid)) {
- user->sessions = g_slist_append (user->sessions, g_strdup (ssid));
- g_signal_emit (user, signals[SESSIONS_CHANGED], 0);
- }
-}
-
-/**
- * _gdm_user_remove_session:
- * @user: the user to modify.
- * @ssid: the session id to remove
- *
- * Removes @ssid from the list of sessions @user is using, and emits the
- * "sessions-changed" signal, if necessary.
- *
- * Since: 1.0
- **/
-void
-_gdm_user_remove_session (GdmUser *user,
- const char *ssid)
-{
- GSList *li;
-
- g_return_if_fail (GDM_IS_USER (user));
- g_return_if_fail (ssid != NULL);
-
- li = g_slist_find (user->sessions, ssid);
- if (li != NULL) {
- g_free (li->data);
- user->sessions = g_slist_delete_link (user->sessions, li);
- g_signal_emit (user, signals[SESSIONS_CHANGED], 0);
- }
-}
-
-/**
- * _gdm_user_icon_changed:
- * @user: the user to emit the signal for.
- *
- * Emits the "icon-changed" signal for @user.
- *
- * Since: 1.0
- **/
-void
-_gdm_user_icon_changed (GdmUser *user)
-{
- g_return_if_fail (GDM_IS_USER (user));
-
- g_signal_emit (user, signals[ICON_CHANGED], 0);
-}
-
-/**
- * gdm_user_get_uid:
- * @user: the user object to examine.
- *
- * Retrieves the ID of @user.
- *
- * Returns: a pointer to an array of characters which must not be modified or
- * freed, or %NULL.
- *
- * Since: 1.0
- **/
-
-uid_t
-gdm_user_get_uid (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), -1);
-
- return user->uid;
-}
-
-/**
- * gdm_user_get_real_name:
- * @user: the user object to examine.
- *
- * Retrieves the display name of @user.
- *
- * Returns: a pointer to an array of characters which must not be modified or
- * freed, or %NULL.
- *
- * Since: 1.0
- **/
-G_CONST_RETURN gchar *
-gdm_user_get_real_name (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), NULL);
-
- return (user->real_name ? user->real_name : user->user_name);
-}
-
-/**
- * gdm_user_get_user_name:
- * @user: the user object to examine.
- *
- * Retrieves the login name of @user.
- *
- * Returns: a pointer to an array of characters which must not be modified or
- * freed, or %NULL.
- *
- * Since: 1.0
- **/
-
-G_CONST_RETURN gchar *
-gdm_user_get_user_name (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), NULL);
-
- return user->user_name;
-}
-
-/**
- * gdm_user_get_home_directory:
- * @user: the user object to examine.
- *
- * Retrieves the home directory of @user.
- *
- * Returns: a pointer to an array of characters which must not be modified or
- * freed, or %NULL.
- *
- * Since: 1.0
- **/
-
-G_CONST_RETURN gchar *
-gdm_user_get_home_directory (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), NULL);
-
- return user->home_dir;
-}
-
-/**
- * gdm_user_get_shell:
- * @user: the user object to examine.
- *
- * Retrieves the login shell of @user.
- *
- * Returns: a pointer to an array of characters which must not be modified or
- * freed, or %NULL.
- *
- * Since: 1.0
- **/
-
-G_CONST_RETURN gchar *
-gdm_user_get_shell (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), NULL);
-
- return user->shell;
-}
-
-/**
- * gdm_user_get_displays:
- * @user: the user object to examine.
- *
- * Retrieves a new list of the displays that @user is logged in on. The list
- * itself must be freed with g_slist_free() when no longer needed.
- *
- * Returns: a list of #GdmDisplay objects which must be freed with
- * g_slist_free().
- *
- * Since: 1.0
- **/
-GSList *
-gdm_user_get_sessions (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), NULL);
-
- return g_slist_copy (user->sessions);
-}
-
-/**
- * gdm_user_get_n_sessions:
- * @user: the user object to examine.
- *
- * Retrieves the number of sessions that @user is logged into.
- *
- * Returns: an unsigned integer.
- *
- * Since: 1.0
- **/
-guint
-gdm_user_get_n_sessions (GdmUser *user)
-{
- g_return_val_if_fail (GDM_IS_USER (user), FALSE);
-
- return g_slist_length (user->sessions);
-}
-
-gint
-gdm_user_collate (GdmUser *user1,
- GdmUser *user2)
-{
- const gchar *str1, *str2;
-
- g_return_val_if_fail (user1 == NULL || GDM_IS_USER (user1), 0);
- g_return_val_if_fail (user2 == NULL || GDM_IS_USER (user2), 0);
-
- if (!user1 && user2)
- return -1;
-
- if (user1 && !user2)
- return 1;
-
- if (!user1 && !user2)
- return 0;
-
- if (user1->real_name)
- str1 = user1->real_name;
- else
- str1 = user1->user_name;
-
- if (user2->real_name)
- str2 = user2->real_name;
- else
- str2 = user2->user_name;
-
- if (!str1 && str2)
- return -1;
-
- if (str1 && !str2)
- return 1;
-
- if (!str1 && !str2)
- return 0;
-
- return g_utf8_collate (str1, str2);
-}