diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-07-12 16:32:03 +1000 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-07-12 16:32:03 +1000 |
commit | 040cac72cd6eb051e04b288ef672efad25df7494 (patch) | |
tree | 7c1a15b117af2a6cf19a4d96480c1484310d5014 | |
parent | 025db6c4635a8d7a0fb37bb0c68c512862df5239 (diff) | |
download | lightdm-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.txt | 2 | ||||
-rw-r--r-- | doc/tmpl/greeter.sgml | 13 | ||||
-rw-r--r-- | liblightdm-gobject/greeter-protocol.h | 1 | ||||
-rw-r--r-- | liblightdm-gobject/greeter.c | 50 | ||||
-rw-r--r-- | liblightdm-gobject/liblightdm-gobject-0.vapi | 2 | ||||
-rw-r--r-- | liblightdm-gobject/lightdm/greeter.h | 2 | ||||
-rw-r--r-- | liblightdm-gobject/user.c | 47 | ||||
-rw-r--r-- | liblightdm-qt/QLightDM/greeter.cpp | 1 | ||||
-rw-r--r-- | src/greeter-protocol.h | 1 | ||||
-rw-r--r-- | src/greeter.c | 40 |
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; |