}
static Session *
-seat_unity_create_session (Seat *seat)
+seat_unity_create_session (Seat *seat, Session *user_session)
{
Session *session;
+ const gchar *xdg_seat;
- session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat);
+ session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat, user_session);
- session_set_env (session, "XDG_SEAT", "seat0");
+ xdg_seat = "seat0";
+ l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+ session_set_env (session, "XDG_SEAT", xdg_seat);
if (!SEAT_UNITY (seat)->priv->use_vt_switching)
{
gchar *value = g_strdup_printf ("%d", SEAT_UNITY (seat)->priv->vt);
}
static Session *
-seat_xlocal_create_session (Seat *seat)
+seat_xlocal_create_session (Seat *seat, Session *user_session)
{
Session *session;
+ const gchar *xdg_seat;
- session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);
+ session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat, user_session);
- session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+ xdg_seat = "seat0";
+ l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+ session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
return session;
}
}
static Session *
-seat_xremote_create_session (Seat *seat)
+seat_xremote_create_session (Seat *seat, Session *user_session)
{
Session *session;
+ const gchar *xdg_seat;
- session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat);
+ session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat, user_session);
- session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+ xdg_seat = "seat0";
+ l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+ session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
return session;
}
return NULL;
}
- session = find_user_session (seat, greeter_get_active_username (greeter));
+static void
+greeter_active_username_changed_cb (Greeter *greeter, GParamSpec *pspec, Seat *seat)
+{
+ Session *session;
+
++ session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session);
+ if (session)
+ {
+ if (seat->priv->next_session)
+ g_object_unref (seat->priv->next_session);
+ seat->priv->next_session = g_object_ref (session);
+
+ SEAT_GET_CLASS (seat)->set_next_session (seat, session);
+ }
+}
+
static void
session_authentication_complete_cb (Session *session, Seat *seat)
{
}
static Session *
-create_session (Seat *seat, gboolean autostart)
+create_session (Seat *seat, gboolean autostart, const gchar *username)
{
Session *session;
+ Session *user_session;
- user_session = find_user_session (seat, username);
- session = SEAT_GET_CLASS (seat)->create_session (seat);
++ user_session = find_user_session (seat, username, NULL);
+ session = SEAT_GET_CLASS (seat)->create_session (seat, user_session);
seat->priv->sessions = g_list_append (seat->priv->sessions, session);
if (autostart)
g_signal_connect (session, "authentication-complete", G_CALLBACK (session_authentication_complete_cb), seat);
const gchar *desktop_name;
gchar **argv;
- session = create_session (seat, TRUE, username);
- session = create_session (seat, autostart);
++ session = create_session (seat, autostart, username);
session_set_session_type (session, session_config_get_session_type (session_config));
session_set_env (session, "DESKTOP_SESSION", session_name);
session_set_env (session, "GDMSESSION", session_name);