USC_MESSAGE_PONG = 1,
USC_MESSAGE_READY = 2,
USC_MESSAGE_SESSION_CONNECTED = 3,
- USC_MESSAGE_SET_ACTIVE_SESSION = 4
+ USC_MESSAGE_SET_ACTIVE_SESSION = 4,
+ USC_MESSAGE_SET_NEXT_SESSION = 5,
} USCMessageID;
struct SeatUnityPrivate
}
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);
xdg_seat = "seat0";
l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
session_set_env (session, "XDG_SEAT", xdg_seat);
return SEAT_UNITY (seat)->priv->active_session;
}
+static void
+seat_unity_set_next_session (Seat *seat, Session *session)
+{
+ DisplayServer *display_server;
+ const gchar *id = NULL;
+
+ /* If no compositor, don't worry about it */
+ if (SEAT_UNITY (seat)->priv->use_vt_switching)
+ return;
+
+ display_server = session_get_display_server (session);
+ if (IS_MIR_SERVER (display_server))
+ {
+ id = mir_server_get_id (MIR_SERVER (display_server));
+
+ if (id)
+ {
+ g_debug ("Marking Mir session %s as the next session", id);
+ write_message (SEAT_UNITY (seat), USC_MESSAGE_SET_NEXT_SESSION, (const guint8 *) id, strlen (id));
+ }
+ else
+ {
+ g_warning ("Failed to work out session ID to mark");
+ }
+ }
+}
+
static void
seat_unity_run_script (Seat *seat, DisplayServer *display_server, Process *script)
{
seat_class->create_session = seat_unity_create_session;
seat_class->set_active_session = seat_unity_set_active_session;
seat_class->get_active_session = seat_unity_get_active_session;
+ seat_class->set_next_session = seat_unity_set_next_session;
seat_class->run_script = seat_unity_run_script;
seat_class->stop = seat_unity_stop;