diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-08-09 12:26:32 +0200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-08-09 12:26:32 +0200 |
commit | 840c7ebba0aba2f7be52a2f4ff24b46fe2a2a0e1 (patch) | |
tree | 13ec4aaa23c1f4e6e4c4f3fb9caa04e5dec99318 /liblightdm-gobject/session.c | |
parent | 611b73104b0e3f11d4bcb856fe1a3cac2534790d (diff) | |
download | lightdm-git-840c7ebba0aba2f7be52a2f4ff24b46fe2a2a0e1.tar.gz |
Sort sessions
Diffstat (limited to 'liblightdm-gobject/session.c')
-rw-r--r-- | liblightdm-gobject/session.c | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/liblightdm-gobject/session.c b/liblightdm-gobject/session.c index 6b99dbde..b9c0ddb0 100644 --- a/liblightdm-gobject/session.c +++ b/liblightdm-gobject/session.c @@ -35,6 +35,14 @@ G_DEFINE_TYPE (LightDMSession, lightdm_session, G_TYPE_OBJECT); static gboolean have_sessions = FALSE; static GList *sessions = NULL; +static gint +compare_session (gconstpointer a, gconstpointer b) +{ + LightDMSessionPrivate *priv_a = GET_PRIVATE (a); + LightDMSessionPrivate *priv_b = GET_PRIVATE (b); + return strcmp (priv_a->name, priv_b->name); +} + static void update_sessions (void) { @@ -88,16 +96,32 @@ update_sessions (void) comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, domain, NULL); if (!comment) comment = g_strdup (""); + g_free (domain); + if (name) { + LightDMSession *session; + LightDMSessionPrivate *priv; + g_debug ("Loaded session %s (%s, %s)", key, name, comment); - sessions = g_list_append (sessions, g_object_new (LIGHTDM_TYPE_SESSION, "key", key, "name", name, "comment", comment, NULL)); + + session = g_object_new (LIGHTDM_TYPE_SESSION, NULL); + priv = GET_PRIVATE (session); + g_free (priv->key); + priv->key = g_strdup (key); + g_free (priv->name); + priv->name = name; + g_free (priv->comment); + priv->comment = comment; + + sessions = g_list_insert_sorted (sessions, session, compare_session); } else + { g_warning ("Invalid session %s: %s", path, error->message); - g_free (domain); - g_free (name); - g_free (comment); + g_free (name); + g_free (comment); + } } g_free (key); @@ -180,26 +204,7 @@ lightdm_session_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - LightDMSession *self = LIGHTDM_SESSION (object); - LightDMSessionPrivate *priv = GET_PRIVATE (self); - - switch (prop_id) { - case PROP_KEY: - g_free (priv->key); - priv->key = g_strdup (g_value_get_string (value)); - break; - case PROP_NAME: - g_free (priv->name); - priv->name = g_strdup (g_value_get_string (value)); - break; - case PROP_COMMENT: - g_free (priv->comment); - priv->comment = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } static void |