summaryrefslogtreecommitdiff
path: root/src/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.c')
-rw-r--r--src/display.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/display.c b/src/display.c
index ae7ebd9c..ec001530 100644
--- a/src/display.c
+++ b/src/display.c
@@ -35,15 +35,6 @@ enum
};
static guint signals[LAST_SIGNAL] = { 0 };
-typedef enum
-{
- SESSION_NONE = 0,
- SESSION_GREETER_PRE_CONNECT,
- SESSION_GREETER,
- SESSION_GREETER_AUTHENTICATED,
- SESSION_USER
-} SessionType;
-
struct DisplayPrivate
{
/* Display server */
@@ -62,6 +53,7 @@ struct DisplayPrivate
gboolean greeter_is_lock;
/* Session requested to log into */
+ SessionType user_session_type;
gchar *user_session;
/* Program to run sessions through */
@@ -220,10 +212,11 @@ display_set_lock_hint (Display *display, gboolean is_lock)
}
void
-display_set_user_session (Display *display, const gchar *session_name)
+display_set_user_session (Display *display, SessionType type, const gchar *session_name)
{
g_return_if_fail (display != NULL);
g_free (display->priv->user_session);
+ display->priv->user_session_type = type;
display->priv->user_session = g_strdup (session_name);
}
@@ -349,7 +342,7 @@ greeter_start_authentication_cb (Greeter *greeter, const gchar *username, Displa
}
static gboolean
-greeter_start_session_cb (Greeter *greeter, const gchar *session_name, Display *display)
+greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *session_name, Display *display)
{
/* If no session requested, use the previous one */
if (!session_name && !greeter_get_guest_authenticated (greeter))
@@ -357,6 +350,7 @@ greeter_start_session_cb (Greeter *greeter, const gchar *session_name, Display *
User *user;
user = session_get_user (greeter_get_authentication_session (greeter));
+ type = SESSION_TYPE_LOCAL;
session_name = user_get_xsession (user);
}
@@ -364,7 +358,7 @@ greeter_start_session_cb (Greeter *greeter, const gchar *session_name, Display *
if (session_name)
{
g_debug ("Using session %s", session_name);
- display_set_user_session (display, session_name);
+ display_set_user_session (display, type, session_name);
}
/* Stop this display if that session already exists and can switch to it */
@@ -474,7 +468,7 @@ autologin_authentication_complete_cb (Session *session, Display *display)
if (session_name)
{
g_debug ("Autologin using session %s", session_name);
- display_set_user_session (display, session_name);
+ display_set_user_session (display, SESSION_TYPE_LOCAL, session_name);
}
g_signal_emit (display, signals[START_SESSION], 0, &result);
@@ -700,12 +694,16 @@ display_start_session (Display *display)
user = session_get_user (display->priv->session);
- /* Store this session name so we automatically use it next time */
- user_set_xsession (user, display->priv->user_session);
-
/* Find the command to run for the selected session */
- // FIXME: This is X specific, move into xsession.c
- sessions_dir = config_get_string (config_get_instance (), "LightDM", "xsessions-directory");
+ if (display->priv->user_session_type == SESSION_TYPE_LOCAL)
+ {
+ sessions_dir = config_get_string (config_get_instance (), "LightDM", "xsessions-directory");
+
+ /* Store this session name so we automatically use it next time */
+ user_set_xsession (user, display->priv->user_session);
+ }
+ else
+ sessions_dir = config_get_string (config_get_instance (), "LightDM", "remote-sessions-directory");
filename = g_strdup_printf ("%s.desktop", display->priv->user_session);
path = g_build_filename (sessions_dir, filename, NULL);
g_free (sessions_dir);