summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2011-12-07 11:50:54 -0500
committerMichael Terry <michael.terry@canonical.com>2011-12-07 11:50:54 -0500
commit4a972090a4a30ab5e18b41de6110e74d820e6ce4 (patch)
tree1f7178c44addb34233d761e73f272b17bb8e519f
parent99feb696b581c364df7fb2f5b7d6cd90e80381a8 (diff)
downloadlightdm-4a972090a4a30ab5e18b41de6110e74d820e6ce4.tar.gz
Support grabbing user's background from accountsservice if available
-rw-r--r--liblightdm-gobject/lightdm/user.h2
-rw-r--r--liblightdm-gobject/user.c39
-rw-r--r--liblightdm-qt/QLightDM/usersmodel.h3
-rw-r--r--liblightdm-qt/usersmodel.cpp6
4 files changed, 49 insertions, 1 deletions
diff --git a/liblightdm-gobject/lightdm/user.h b/liblightdm-gobject/lightdm/user.h
index a9153829..e9a5891b 100644
--- a/liblightdm-gobject/lightdm/user.h
+++ b/liblightdm-gobject/lightdm/user.h
@@ -93,6 +93,8 @@ const gchar *lightdm_user_get_home_directory (LightDMUser *user);
const gchar *lightdm_user_get_image (LightDMUser *user);
+const gchar *lightdm_user_get_background (LightDMUser *user);
+
const gchar *lightdm_user_get_language (LightDMUser *user);
const gchar *lightdm_user_get_layout (LightDMUser *user);
diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c
index 0e832073..0c9025fb 100644
--- a/liblightdm-gobject/user.c
+++ b/liblightdm-gobject/user.c
@@ -34,6 +34,7 @@ enum
USER_PROP_DISPLAY_NAME,
USER_PROP_HOME_DIRECTORY,
USER_PROP_IMAGE,
+ USER_PROP_BACKGROUND,
USER_PROP_LANGUAGE,
USER_PROP_LAYOUT,
USER_PROP_SESSION,
@@ -92,6 +93,7 @@ typedef struct
gchar *real_name;
gchar *home_directory;
gchar *image;
+ gchar *background;
GKeyFile *dmrc_file;
gchar *language;
@@ -433,6 +435,16 @@ update_user (UserAccountObject *object)
else
priv->image = g_strdup (icon_file);
}
+ else if (strcmp (name, "BackgroundFile") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
+ {
+ gchar *background_file;
+ g_variant_get (value, "&s", &background_file);
+ g_free (priv->background);
+ if (strcmp (background_file, "") == 0)
+ priv->background = NULL;
+ else
+ priv->background = g_strdup (background_file);
+ }
}
g_variant_iter_free (iter);
@@ -1081,6 +1093,21 @@ lightdm_user_get_image (LightDMUser *user)
return GET_USER_PRIVATE (user)->image;
}
+/**
+ * lightdm_user_get_background:
+ * @user: A #LightDMUser
+ *
+ * Get the background file path for a user.
+ *
+ * Return value: The background file path for the given user or #NULL if no path
+ **/
+const gchar *
+lightdm_user_get_background (LightDMUser *user)
+{
+ g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
+ return GET_USER_PRIVATE (user)->background;
+}
+
static void
load_dmrc (LightDMUser *user)
{
@@ -1274,6 +1301,7 @@ lightdm_user_init (LightDMUser *user)
priv->real_name = g_strdup ("");
priv->home_directory = g_strdup ("");
priv->image = g_strdup ("");
+ priv->background = g_strdup ("");
priv->language = g_strdup ("");
priv->layout = g_strdup ("");
priv->session = g_strdup ("");
@@ -1315,6 +1343,9 @@ lightdm_user_get_property (GObject *object,
case USER_PROP_IMAGE:
g_value_set_string (value, lightdm_user_get_image (self));
break;
+ case USER_PROP_BACKGROUND:
+ g_value_set_string (value, lightdm_user_get_background (self));
+ break;
case USER_PROP_LANGUAGE:
g_value_set_string (value, lightdm_user_get_language (self));
break;
@@ -1343,6 +1374,7 @@ lightdm_user_finalize (GObject *object)
g_free (priv->real_name);
g_free (priv->home_directory);
g_free (priv->image);
+ g_free (priv->background);
if (priv->dmrc_file)
g_key_file_free (priv->dmrc_file);
}
@@ -1394,6 +1426,13 @@ lightdm_user_class_init (LightDMUserClass *klass)
NULL,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
+ USER_PROP_BACKGROUND,
+ g_param_spec_string ("background",
+ "background",
+ "User background",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
USER_PROP_LANGUAGE,
g_param_spec_string ("language",
"language",
diff --git a/liblightdm-qt/QLightDM/usersmodel.h b/liblightdm-qt/QLightDM/usersmodel.h
index 39b94188..f6bfc444 100644
--- a/liblightdm-qt/QLightDM/usersmodel.h
+++ b/liblightdm-qt/QLightDM/usersmodel.h
@@ -30,7 +30,8 @@ public:
enum UserModelRoles {NameRole = Qt::UserRole,
RealNameRole,
- LoggedInRole};
+ LoggedInRole,
+ BackgroundRole};
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
diff --git a/liblightdm-qt/usersmodel.cpp b/liblightdm-qt/usersmodel.cpp
index dcd3b58b..63781b58 100644
--- a/liblightdm-qt/usersmodel.cpp
+++ b/liblightdm-qt/usersmodel.cpp
@@ -26,6 +26,7 @@ public:
QString realName;
QString homeDirectory;
QString image;
+ QString background;
bool isLoggedIn;
QString displayName() const;
};
@@ -91,6 +92,7 @@ void UsersModelPrivate::loadUsers()
user.homeDirectory = QString::fromLocal8Bit(lightdm_user_get_home_directory(ldmUser));
user.realName = QString::fromLocal8Bit(lightdm_user_get_real_name(ldmUser));
user.image = QString::fromLocal8Bit(lightdm_user_get_image(ldmUser));
+ user.background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser));
user.isLoggedIn = lightdm_user_get_logged_in(ldmUser);
users.append(user);
}
@@ -116,6 +118,7 @@ void UsersModelPrivate::cb_userAdded(LightDMUserList *user_list, LightDMUser *ld
user.homeDirectory = QString::fromLocal8Bit(lightdm_user_get_home_directory(ldmUser));
user.realName = QString::fromLocal8Bit(lightdm_user_get_real_name(ldmUser));
user.image = QString::fromLocal8Bit(lightdm_user_get_image(ldmUser));
+ user.background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser));
user.isLoggedIn = lightdm_user_get_logged_in(ldmUser);
that->users.append(user);
@@ -136,6 +139,7 @@ void UsersModelPrivate::cb_userChanged(LightDMUserList *user_list, LightDMUser *
that->users[i].homeDirectory = QString::fromLocal8Bit(lightdm_user_get_home_directory(ldmUser));
that->users[i].realName = QString::fromLocal8Bit(lightdm_user_get_real_name(ldmUser));
that->users[i].image = QString::fromLocal8Bit(lightdm_user_get_image(ldmUser));
+ that->users[i].background = QString::fromLocal8Bit(lightdm_user_get_background(ldmUser));
that->users[i].isLoggedIn = lightdm_user_get_logged_in(ldmUser);
QModelIndex index = that->q_ptr->createIndex(i, 0);
@@ -209,6 +213,8 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const
return d->users[row].realName;
case UsersModel::LoggedInRole:
return d->users[row].isLoggedIn;
+ case UsersModel::BackgroundRole:
+ return QPixmap(d->users[row].background);
}
return QVariant();