summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2014-09-24 10:58:40 +1200
committerRobert Ancell <robert.ancell@canonical.com>2014-09-24 10:58:40 +1200
commit7019fbe89163270920d14d4f840c9fc446bcf55a (patch)
tree5fc268c256e44c6204737d161c3a96debfa7787a
parent8e9c0c685240a76aaa4d23f6a64a8f807b58eb18 (diff)
downloadlightdm-git-7019fbe89163270920d14d4f840c9fc446bcf55a.tar.gz
Don't load .dmrc files unless we need the data from them
-rw-r--r--common/user-list.c47
1 files changed, 14 insertions, 33 deletions
diff --git a/common/user-list.c b/common/user-list.c
index 3b8d5a15..e9a729d1 100644
--- a/common/user-list.c
+++ b/common/user-list.c
@@ -96,8 +96,8 @@ typedef struct
/* User list this user is part of */
CommonUserList *user_list;
- /* TRUE if have loaded user properties */
- gboolean loaded_values;
+ /* TRUE if have loaded the DMRC file */
+ gboolean loaded_dmrc;
/* Accounts service path */
gchar *path;
@@ -585,8 +585,6 @@ load_accounts_user (CommonUser *user)
g_variant_unref (result);
- priv->loaded_values = TRUE;
-
return !system_account;
}
@@ -1179,12 +1177,20 @@ save_string_to_dmrc (CommonUser *user, const gchar *group,
g_key_file_free (dmrc);
}
+/* Loads language/layout/session info for user */
static void
load_dmrc (CommonUser *user)
{
CommonUserPrivate *priv = GET_USER_PRIVATE (user);
GKeyFile *dmrc;
+ /* We're using Accounts service instead */
+ if (priv->path)
+ return;
+
+ if (priv->loaded_dmrc)
+ return;
+ priv->loaded_dmrc = TRUE;
dmrc = dmrc_load (user);
// FIXME: Watch for changes
@@ -1207,20 +1213,6 @@ load_dmrc (CommonUser *user)
g_key_file_free (dmrc);
}
-/* Loads language/layout/session info for user */
-static void
-load_user_values (CommonUser *user)
-{
- CommonUserPrivate *priv = GET_USER_PRIVATE (user);
-
- if (priv->loaded_values)
- return;
- priv->loaded_values = TRUE;
-
- if (!priv->path)
- load_dmrc (user);
-}
-
/**
* common_user_get_name:
* @user: A #CommonUser
@@ -1233,7 +1225,6 @@ const gchar *
common_user_get_name (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->name;
}
@@ -1249,7 +1240,6 @@ const gchar *
common_user_get_real_name (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->real_name;
}
@@ -1268,8 +1258,6 @@ common_user_get_display_name (CommonUser *user)
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
-
priv = GET_USER_PRIVATE (user);
if (!priv->real_name || strcmp (priv->real_name, "") == 0)
return priv->name;
@@ -1289,7 +1277,6 @@ const gchar *
common_user_get_home_directory (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->home_directory;
}
@@ -1305,7 +1292,6 @@ const gchar *
common_user_get_shell (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->shell;
}
@@ -1321,7 +1307,6 @@ const gchar *
common_user_get_image (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->image;
}
@@ -1337,7 +1322,6 @@ const gchar *
common_user_get_background (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
return GET_USER_PRIVATE (user)->background;
}
@@ -1353,7 +1337,7 @@ const gchar *
common_user_get_language (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
+ load_dmrc (user);
const gchar *language = GET_USER_PRIVATE (user)->language;
return (language && language[0] == 0) ? NULL : language; /* Treat "" as NULL */
}
@@ -1388,7 +1372,7 @@ const gchar *
common_user_get_layout (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
+ load_dmrc (user);
return GET_USER_PRIVATE (user)->layouts[0];
}
@@ -1404,7 +1388,7 @@ const gchar * const *
common_user_get_layouts (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
+ load_dmrc (user);
return (const gchar * const *) GET_USER_PRIVATE (user)->layouts;
}
@@ -1420,7 +1404,7 @@ const gchar *
common_user_get_session (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), NULL);
- load_user_values (user);
+ load_dmrc (user);
const gchar *session = GET_USER_PRIVATE (user)->session;
return (session && session[0] == 0) ? NULL : session; /* Treat "" as NULL */
}
@@ -1489,7 +1473,6 @@ gboolean
common_user_get_has_messages (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), FALSE);
- load_user_values (user);
return GET_USER_PRIVATE (user)->has_messages;
}
@@ -1505,7 +1488,6 @@ uid_t
common_user_get_uid (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), 0);
- load_user_values (user);
return GET_USER_PRIVATE (user)->uid;
}
@@ -1521,7 +1503,6 @@ gid_t
common_user_get_gid (CommonUser *user)
{
g_return_val_if_fail (COMMON_IS_USER (user), 0);
- load_user_values (user);
/* gid is not actually stored in AccountsService, so if our user is from
AccountsService, we have to look up manually in passwd. gid won't
change, so just look up the first time we're asked and never again. */