]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/seat-unity.c
Merge from trunk
[sojka/lightdm.git] / src / seat-unity.c
index 7de61a4269336130ea09b1fa4c56ded25ca015c9..c4b76293d3bfc90df9fec0d0b6483fc399719721 100644 (file)
@@ -27,7 +27,8 @@ typedef enum
    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
@@ -534,12 +535,12 @@ seat_unity_create_greeter_session (Seat *seat)
 }
 
 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);
@@ -624,6 +625,33 @@ seat_unity_get_active_session (Seat *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)
 {
@@ -698,6 +726,7 @@ seat_unity_class_init (SeatUnityClass *klass)
     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;