diff options
Diffstat (limited to 'src/display.c')
-rw-r--r-- | src/display.c | 34 |
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); |