summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2011-07-12 16:32:03 +1000
committerRobert Ancell <robert.ancell@canonical.com>2011-07-12 16:32:03 +1000
commit040cac72cd6eb051e04b288ef672efad25df7494 (patch)
tree7c1a15b117af2a6cf19a4d96480c1484310d5014
parent025db6c4635a8d7a0fb37bb0c68c512862df5239 (diff)
downloadlightdm-040cac72cd6eb051e04b288ef672efad25df7494.tar.gz
Load user defaults from client library, not by doing a round trip to the daemon
-rw-r--r--doc/lightdm-gobject-0-sections.txt2
-rw-r--r--doc/tmpl/greeter.sgml13
-rw-r--r--liblightdm-gobject/greeter-protocol.h1
-rw-r--r--liblightdm-gobject/greeter.c50
-rw-r--r--liblightdm-gobject/liblightdm-gobject-0.vapi2
-rw-r--r--liblightdm-gobject/lightdm/greeter.h2
-rw-r--r--liblightdm-gobject/user.c47
-rw-r--r--liblightdm-qt/QLightDM/greeter.cpp1
-rw-r--r--src/greeter-protocol.h1
-rw-r--r--src/greeter.c40
10 files changed, 41 insertions, 118 deletions
diff --git a/doc/lightdm-gobject-0-sections.txt b/doc/lightdm-gobject-0-sections.txt
index fdd0deac..5c930cca 100644
--- a/doc/lightdm-gobject-0-sections.txt
+++ b/doc/lightdm-gobject-0-sections.txt
@@ -141,7 +141,6 @@ ldm_greeter_get_can_restart
ldm_greeter_restart
ldm_greeter_get_can_shutdown
ldm_greeter_shutdown
-ldm_greeter_get_user_defaults
<SUBSECTION Standard>
LDM_GREETER
LDM_IS_GREETER
@@ -153,4 +152,5 @@ LDM_GREETER_GET_CLASS
<SUBSECTION Private>
LdmGreeterClass
LdmGreeterPrivate
+ldm_greeter_get_user_defaults
</SECTION>
diff --git a/doc/tmpl/greeter.sgml b/doc/tmpl/greeter.sgml
index 3cd62f42..2f06c76c 100644
--- a/doc/tmpl/greeter.sgml
+++ b/doc/tmpl/greeter.sgml
@@ -577,16 +577,3 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
@greeter:
-<!-- ##### FUNCTION ldm_greeter_get_user_defaults ##### -->
-<para>
-
-</para>
-
-@greeter:
-@username:
-@language:
-@layout:
-@session:
-@Returns:
-
-
diff --git a/liblightdm-gobject/greeter-protocol.h b/liblightdm-gobject/greeter-protocol.h
index cd15cf3b..5d8701bc 100644
--- a/liblightdm-gobject/greeter-protocol.h
+++ b/liblightdm-gobject/greeter-protocol.h
@@ -21,7 +21,6 @@ typedef enum
GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
GREETER_MESSAGE_START_SESSION = 5,
GREETER_MESSAGE_CANCEL_AUTHENTICATION = 6,
- GREETER_MESSAGE_GET_USER_DEFAULTS = 7,
/* Messages from the server to the greeter */
GREETER_MESSAGE_CONNECTED = 101,
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c
index e2be576a..59be56c8 100644
--- a/liblightdm-gobject/greeter.c
+++ b/liblightdm-gobject/greeter.c
@@ -885,6 +885,7 @@ const LdmUser *
ldm_greeter_get_user_by_name (LdmGreeter *greeter, const gchar *username)
{
g_return_val_if_fail (LDM_IS_GREETER (greeter), NULL);
+ g_return_val_if_fail (username != NULL, NULL);
update_users (greeter);
@@ -1641,55 +1642,6 @@ ldm_greeter_shutdown (LdmGreeter *greeter)
ck_call_function (greeter, "Stop", FALSE);
}
-/**
- * ldm_greeter_get_user_defaults:
- * @greeter: A #LdmGreeter
- * @username: The user to check
- * @language: (out): Default language for this user.
- * @layout: (out): Default keyboard layout for this user.
- * @session: (out): Default session for this user.
- *
- * Get the default settings for a given user. If the user does not exist FALSE
- * is returned and language, layout and session are not set.
- *
- * Return value: TRUE if this user exists.
- **/
-gboolean
-ldm_greeter_get_user_defaults (LdmGreeter *greeter, const gchar *username, gchar **language, gchar **layout, gchar **session)
-{
- gsize offset = 0;
- guint32 id;
- guint8 message[MAX_MESSAGE_LENGTH];
-
- g_return_val_if_fail (LDM_IS_GREETER (greeter), FALSE);
- g_return_val_if_fail (username != NULL, FALSE);
-
- offset = 0;
- write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_GET_USER_DEFAULTS, string_length (username), &offset);
- write_string (message, MAX_MESSAGE_LENGTH, username, &offset);
- write_message (greeter, message, offset);
-
- if (!read_packet (greeter, TRUE))
- {
- g_warning ("Error reading user defaults from server");
- return FALSE;
- }
-
- offset = 0;
- id = read_int (greeter, &offset);
- g_assert (id == GREETER_MESSAGE_USER_DEFAULTS);
- read_int (greeter, &offset);
- *language = read_string (greeter, &offset);
- *layout = read_string (greeter, &offset);
- *session = read_string (greeter, &offset);
-
- g_debug ("User defaults for %s: language=%s, layout=%s, session=%s", username, *language, *layout, *session);
-
- greeter->priv->n_read = 0;
-
- return TRUE;
-}
-
static void
ldm_greeter_init (LdmGreeter *greeter)
{
diff --git a/liblightdm-gobject/liblightdm-gobject-0.vapi b/liblightdm-gobject/liblightdm-gobject-0.vapi
index 770978ef..180af506 100644
--- a/liblightdm-gobject/liblightdm-gobject-0.vapi
+++ b/liblightdm-gobject/liblightdm-gobject-0.vapi
@@ -27,6 +27,7 @@ namespace LightDM {
public bool has_guest_session { get; }
public int num_users { get; }
public unowned GLib.List<weak LightDM.User> get_users ();
+ public unowned LightDM.User get_user_by_name (string username);
public unowned string timed_login_user { get; }
public int timed_login_delay { get; }
@@ -39,7 +40,6 @@ namespace LightDM {
public void suspend ();
public void hibernate ();
- public bool get_user_defaults (string username, out string language, out string layout, out string session);
public void cancel_timed_login ();
public void login (string username);
public void login_with_user_prompt ();
diff --git a/liblightdm-gobject/lightdm/greeter.h b/liblightdm-gobject/lightdm/greeter.h
index c7e66f9a..9db46a02 100644
--- a/liblightdm-gobject/lightdm/greeter.h
+++ b/liblightdm-gobject/lightdm/greeter.h
@@ -137,8 +137,6 @@ gboolean ldm_greeter_get_can_shutdown (LdmGreeter *greeter);
void ldm_greeter_shutdown (LdmGreeter *greeter);
-gboolean ldm_greeter_get_user_defaults (LdmGreeter *greeter, const gchar *username, gchar **language, gchar **layout, gchar **session);
-
G_END_DECLS
#endif /* _LDM_GREETER_H_ */
diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c
index 517c804f..2a739209 100644
--- a/liblightdm-gobject/user.c
+++ b/liblightdm-gobject/user.c
@@ -35,7 +35,7 @@ struct _LdmUserPrivate
gchar *image;
gboolean logged_in;
- gboolean have_defaults;
+ GKeyFile *dmrc_file;
gchar *language;
gchar *layout;
gchar *session;
@@ -194,13 +194,26 @@ ldm_user_set_image (LdmUser *user, const gchar *image)
}
static void
-get_defaults (LdmUser *user)
+load_dmrc (LdmUser *user)
{
- if (user->priv->have_defaults)
- return;
+ gchar *path;
+ gboolean have_dmrc;
- if (ldm_greeter_get_user_defaults (user->priv->greeter, user->priv->name, &user->priv->language, &user->priv->layout, &user->priv->session))
- user->priv->have_defaults = TRUE;
+ user->priv->dmrc_file = g_key_file_new ();
+
+ /* Load from the user directory */
+ path = g_build_filename (user->priv->home_directory, ".dmrc", NULL);
+ have_dmrc = g_key_file_load_from_file (user->priv->dmrc_file, path, G_KEY_FILE_KEEP_COMMENTS, NULL);
+ g_free (path);
+
+ /* If no ~/.dmrc, then load from the cache */
+ // FIXME
+
+ // FIXME: Watch for changes
+
+ user->priv->language = g_key_file_get_string (user->priv->dmrc_file, "Desktop", "Language", NULL);
+ user->priv->layout = g_key_file_get_string (user->priv->dmrc_file, "Desktop", "Layout", NULL);
+ user->priv->session = g_key_file_get_string (user->priv->dmrc_file, "Desktop", "Session", NULL);
}
/**
@@ -215,7 +228,7 @@ const gchar *
ldm_user_get_language (LdmUser *user)
{
g_return_val_if_fail (LDM_IS_USER (user), NULL);
- get_defaults (user);
+ load_dmrc (user);
return user->priv->language;
}
@@ -231,7 +244,7 @@ const gchar *
ldm_user_get_layout (LdmUser *user)
{
g_return_val_if_fail (LDM_IS_USER (user), NULL);
- get_defaults (user);
+ load_dmrc (user);
return user->priv->layout;
}
@@ -247,7 +260,7 @@ const gchar *
ldm_user_get_session (LdmUser *user)
{
g_return_val_if_fail (LDM_IS_USER (user), NULL);
- get_defaults (user);
+ load_dmrc (user);
return user->priv->session;
}
@@ -359,6 +372,21 @@ ldm_user_get_property (GObject *object,
}
static void
+ldm_user_finalize (GObject *object)
+{
+ LdmUser *self;
+
+ self = LDM_USER (object);
+
+ g_free (self->priv->name);
+ g_free (self->priv->real_name);
+ g_free (self->priv->home_directory);
+ g_free (self->priv->image);
+ if (self->priv->dmrc_file)
+ g_key_file_free (self->priv->dmrc_file);
+}
+
+static void
ldm_user_class_init (LdmUserClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -367,6 +395,7 @@ ldm_user_class_init (LdmUserClass *klass)
object_class->set_property = ldm_user_set_property;
object_class->get_property = ldm_user_get_property;
+ object_class->finalize = ldm_user_finalize;
g_object_class_install_property(object_class,
PROP_GREETER,
diff --git a/liblightdm-qt/QLightDM/greeter.cpp b/liblightdm-qt/QLightDM/greeter.cpp
index 92f1c5fe..6dbe6503 100644
--- a/liblightdm-qt/QLightDM/greeter.cpp
+++ b/liblightdm-qt/QLightDM/greeter.cpp
@@ -39,7 +39,6 @@ typedef enum
GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
GREETER_MESSAGE_START_SESSION = 5,
GREETER_MESSAGE_CANCEL_AUTHENTICATION = 6,
- GREETER_MESSAGE_GET_USER_DEFAULTS = 7,
/* Messages from the server to the greeter */
GREETER_MESSAGE_CONNECTED = 101,
diff --git a/src/greeter-protocol.h b/src/greeter-protocol.h
index cd15cf3b..5d8701bc 100644
--- a/src/greeter-protocol.h
+++ b/src/greeter-protocol.h
@@ -21,7 +21,6 @@ typedef enum
GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
GREETER_MESSAGE_START_SESSION = 5,
GREETER_MESSAGE_CANCEL_AUTHENTICATION = 6,
- GREETER_MESSAGE_GET_USER_DEFAULTS = 7,
/* Messages from the server to the greeter */
GREETER_MESSAGE_CONNECTED = 101,
diff --git a/src/greeter.c b/src/greeter.c
index 9c34b60a..9df8655f 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -14,7 +14,6 @@
#include "greeter.h"
#include "configuration.h"
-#include "dmrc.h"
#include "ldm-marshal.h"
#include "greeter-protocol.h"
#include "guest-account.h"
@@ -433,40 +432,6 @@ handle_start_session (Greeter *greeter, gchar *session)
g_signal_emit (greeter, signals[START_SESSION], 0, session);
}
-static void
-handle_get_user_defaults (Greeter *greeter, gchar *username)
-{
- GKeyFile *dmrc_file;
- gchar *language, *layout, *session;
- guint8 message[MAX_MESSAGE_LENGTH];
- gsize offset = 0;
-
- /* Load the users login settings (~/.dmrc) */
- dmrc_file = dmrc_load (username);
-
- language = g_key_file_get_string (dmrc_file, "Desktop", "Language", NULL);
- if (!language)
- language = g_strdup ("");
- layout = g_key_file_get_string (dmrc_file, "Desktop", "Layout", NULL);
- if (!layout)
- layout = g_strdup ("");
- session = g_key_file_get_string (dmrc_file, "Desktop", "Session", NULL);
- if (!session)
- session = g_strdup ("");
-
- write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_USER_DEFAULTS, string_length (language) + string_length (layout) + string_length (session), &offset);
- write_string (message, MAX_MESSAGE_LENGTH, language, &offset);
- write_string (message, MAX_MESSAGE_LENGTH, layout, &offset);
- write_string (message, MAX_MESSAGE_LENGTH, session, &offset);
- write_message (greeter, message, offset);
-
- g_free (language);
- g_free (layout);
- g_free (session);
-
- g_key_file_free (dmrc_file);
-}
-
static guint32
read_int (Greeter *greeter, gsize *offset)
{
@@ -586,11 +551,6 @@ got_data_cb (Greeter *greeter)
handle_start_session (greeter, session_name);
g_free (session_name);
break;
- case GREETER_MESSAGE_GET_USER_DEFAULTS:
- username = read_string (greeter, &offset);
- handle_get_user_defaults (greeter, username);
- g_free (username);
- break;
default:
g_warning ("Unknown message from greeter: %d", id);
break;