summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2012-08-27 11:36:24 +1200
committerRobert Ancell <robert.ancell@canonical.com>2012-08-27 11:36:24 +1200
commit39c12004b151f73524ca69f18289038170d1b811 (patch)
treeacab09f5ff9ed898b97ca7918d11f7459847bbbb
parentb09f909c93b9bde2c201d3e3ac2fdd9eb38a669e (diff)
downloadlightdm-39c12004b151f73524ca69f18289038170d1b811.tar.gz
Get lightdm_get_remote_sessions() returning correct list
-rw-r--r--liblightdm-gobject/Makefile.am3
-rw-r--r--liblightdm-gobject/session.c92
2 files changed, 56 insertions, 39 deletions
diff --git a/liblightdm-gobject/Makefile.am b/liblightdm-gobject/Makefile.am
index 8c0ce526..fa7ec56e 100644
--- a/liblightdm-gobject/Makefile.am
+++ b/liblightdm-gobject/Makefile.am
@@ -5,7 +5,8 @@ liblightdm_gobject_1_la_LIBADD = $(LIBLIGHTDM_GOBJECT_LIBS)
liblightdm_gobject_1_la_CFLAGS = $(LIBLIGHTDM_GOBJECT_CFLAGS) \
$(WARN_CFLAGS) \
-DCONFIG_DIR=\"$(sysconfdir)/lightdm\" \
- -DXSESSIONS_DIR=\"$(datadir)/xsessions\"
+ -DXSESSIONS_DIR=\"$(datadir)/xsessions\" \
+ -DREMOTE_SESSIONS_DIR=\"$(pkgdatadir)/remote-sessions\"
mainheader_HEADERS = lightdm.h
mainheaderdir=$(includedir)/lightdm-gobject-1
diff --git a/liblightdm-gobject/session.c b/liblightdm-gobject/session.c
index 577e3274..c91fea09 100644
--- a/liblightdm-gobject/session.c
+++ b/liblightdm-gobject/session.c
@@ -33,7 +33,7 @@ G_DEFINE_TYPE (LightDMSession, lightdm_session, G_TYPE_OBJECT);
#define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_SESSION, LightDMSessionPrivate)
static gboolean have_sessions = FALSE;
-static GList *sessions = NULL;
+static GList *local_sessions = NULL;
static GList *remote_sessions = NULL;
static gint
@@ -100,54 +100,24 @@ load_session (GKeyFile *key_file, const gchar *key)
if (!priv->comment)
priv->comment = g_strdup ("");
- sessions = g_list_insert_sorted (sessions, session, compare_session);
-
g_free (domain);
return session;
}
-static void
-update_sessions (void)
+static GList *
+load_sessions (const gchar *sessions_dir)
{
GDir *directory;
- gboolean result;
+ GList *sessions = NULL;
GError *error = NULL;
- GKeyFile *config_key_file = NULL;
- gchar *config_path = NULL;
- gchar *xsessions_dir = g_strdup (XSESSIONS_DIR);
-
- if (have_sessions)
- return;
-
- config_path = g_build_filename (CONFIG_DIR, "lightdm.conf", NULL);
- config_key_file = g_key_file_new ();
- result = g_key_file_load_from_file (config_key_file, config_path, G_KEY_FILE_NONE, &error);
- if (error)
- g_warning ("Failed to open configuration file: %s", error->message);
- g_clear_error (&error);
- if (result)
- {
- gchar *xd_value = g_key_file_get_string (config_key_file, "LightDM", "xsessions-directory", NULL);
- if (xd_value)
- {
- g_free (xsessions_dir);
- xsessions_dir = xd_value;
- }
- }
- g_key_file_free (config_key_file);
- g_free (config_path);
-
- directory = g_dir_open (xsessions_dir, 0, &error);
+ directory = g_dir_open (sessions_dir, 0, &error);
if (error)
g_warning ("Failed to open sessions directory: %s", error->message);
g_clear_error (&error);
if (!directory)
- {
- g_free (xsessions_dir);
- return;
- }
+ return NULL;
while (TRUE)
{
@@ -163,7 +133,7 @@ update_sessions (void)
if (!g_str_has_suffix (filename, ".desktop"))
continue;
- path = g_build_filename (xsessions_dir, filename, NULL);
+ path = g_build_filename (sessions_dir, filename, NULL);
key_file = g_key_file_new ();
result = g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error);
@@ -183,6 +153,8 @@ update_sessions (void)
else
g_debug ("Ignoring session %s", path);
g_free (key);
+
+ sessions = g_list_insert_sorted (sessions, session, compare_session);
}
g_free (path);
@@ -190,7 +162,51 @@ update_sessions (void)
}
g_dir_close (directory);
+
+ return sessions;
+}
+
+static void
+update_sessions (void)
+{
+ GKeyFile *config_key_file = NULL;
+ gchar *config_path = NULL;
+ gchar *xsessions_dir;
+ gchar *remote_sessions_dir;
+ gboolean result;
+ GError *error = NULL;
+
+ if (have_sessions)
+ return;
+
+ xsessions_dir = g_strdup (XSESSIONS_DIR);
+ remote_sessions_dir = g_strdup (REMOTE_SESSIONS_DIR);
+
+ /* Use session directory from configuration */
+ /* FIXME: This should be sent in the greeter connection */
+ config_path = g_build_filename (CONFIG_DIR, "lightdm.conf", NULL);
+ config_key_file = g_key_file_new ();
+ result = g_key_file_load_from_file (config_key_file, config_path, G_KEY_FILE_NONE, &error);
+ if (error)
+ g_warning ("Failed to open configuration file: %s", error->message);
+ g_clear_error (&error);
+ if (result)
+ {
+ gchar *xd_value = g_key_file_get_string (config_key_file, "LightDM", "xsessions-directory", NULL);
+ if (xd_value)
+ {
+ g_free (xsessions_dir);
+ xsessions_dir = xd_value;
+ }
+ }
+ g_key_file_free (config_key_file);
+ g_free (config_path);
+
+ local_sessions = load_sessions (xsessions_dir);
+ remote_sessions = load_sessions (remote_sessions_dir);
+
g_free (xsessions_dir);
+ g_free (remote_sessions_dir);
have_sessions = TRUE;
}
@@ -206,7 +222,7 @@ GList *
lightdm_get_sessions (void)
{
update_sessions ();
- return sessions;
+ return local_sessions;
}
/**