]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/seat-xlocal.c
Use session IDs as assigned by U-S-C
[sojka/lightdm.git] / src / seat-xlocal.c
index 7b5ec7edec5e59d64ee6dd4f0b3278ec44d04c71..817335c6d05002ebf07af9a9d59009405c45d73c 100644 (file)
@@ -15,6 +15,7 @@
 #include "configuration.h"
 #include "x-server-local.h"
 #include "unity-system-compositor.h"
+#include "wayland-session.h"
 #include "plymouth.h"
 #include "vt.h"
 
@@ -169,6 +170,8 @@ static XServerLocal *
 create_x_server (Seat *seat)
 {
     XServerLocal *x_server;
+    gchar *number;
+    XAuthority *cookie;
     const gchar *command = NULL, *layout = NULL, *config_file = NULL;
     gboolean allow_tcp;
     gint vt;
@@ -192,13 +195,17 @@ create_x_server (Seat *seat)
     if (command)
         x_server_local_set_command (x_server, command);
 
+    number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (x_server)));
+    cookie = x_authority_new_local_cookie (number);
+    x_server_set_authority (X_SERVER (x_server), cookie);
+    g_free (number);
+    g_object_unref (cookie);
+
     layout = seat_get_string_property (seat, "xserver-layout");
     if (layout)
         x_server_local_set_layout (x_server, layout);
 
     x_server_local_set_xdg_seat (x_server, seat_get_name (seat));
-    if (strcmp (seat_get_name (seat), "seat0") != 0)
-        x_server_local_set_sharevts (x_server, TRUE);
 
     config_file = seat_get_string_property (seat, "xserver-config");
     if (config_file)
@@ -242,11 +249,24 @@ create_unity_system_compositor (Seat *seat)
     unity_system_compositor_set_socket (compositor, socket_name);
     g_free (socket_name);
 
-    unity_system_compositor_set_enable_hardware_cursor (compositor, TRUE);
-
     return DISPLAY_SERVER (compositor);
 }
 
+static DisplayServer *
+create_wayland_session (Seat *seat)
+{
+    WaylandSession *session;
+    gint vt;
+
+    session = wayland_session_new ();
+
+    vt = get_vt (seat, DISPLAY_SERVER (session));
+    if (vt >= 0)
+        wayland_session_set_vt (session, vt);
+
+    return DISPLAY_SERVER (session);
+}
+
 static DisplayServer *
 seat_xlocal_create_display_server (Seat *seat, Session *session)
 {
@@ -257,6 +277,8 @@ seat_xlocal_create_display_server (Seat *seat, Session *session)
         return DISPLAY_SERVER (create_x_server (seat));
     else if (strcmp (session_type, "mir") == 0)
         return create_unity_system_compositor (seat);
+    else if (strcmp (session_type, "wayland") == 0)
+        return create_wayland_session (seat);
     else if (strcmp (session_type, "mir-container") == 0)
     {
         DisplayServer *compositor;
@@ -276,10 +298,10 @@ seat_xlocal_create_display_server (Seat *seat, Session *session)
     }
 }
 
-static Greeter *
+static GreeterSession *
 seat_xlocal_create_greeter_session (Seat *seat)
 {
-    Greeter *greeter_session;
+    GreeterSession *greeter_session;
 
     greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);
     session_set_env (SESSION (greeter_session), "XDG_SEAT", seat_get_name (seat));
@@ -310,7 +332,7 @@ seat_xlocal_set_active_session (Seat *seat, Session *session)
         vt_set_active (vt);
 
     if (IS_UNITY_SYSTEM_COMPOSITOR (display_server))
-        unity_system_compositor_set_active_session (UNITY_SYSTEM_COMPOSITOR (display_server), IS_GREETER (session) ? "greeter-0" : "session-0");
+        unity_system_compositor_set_active_session (UNITY_SYSTEM_COMPOSITOR (display_server), session_get_env (session, "MIR_SERVER_NAME"));
 
     SEAT_CLASS (seat_xlocal_parent_class)->set_active_session (seat, session);
 }