]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/seat-xlocal.c
Merge from trunk
[sojka/lightdm.git] / src / seat-xlocal.c
index 04290b8f01b96d2cea55f6f37f28708b35c24e96..f164c1e5fca352b1e3d3c23684770d99d9435925 100644 (file)
@@ -14,7 +14,6 @@
 #include "seat-xlocal.h"
 #include "configuration.h"
 #include "x-server-local.h"
-#include "mir-server.h"
 #include "plymouth.h"
 #include "vt.h"
 
@@ -58,31 +57,21 @@ x_server_transition_plymouth_cb (XServerLocal *x_server, Seat *seat)
     g_signal_handlers_disconnect_matched (x_server, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, x_server_transition_plymouth_cb, NULL);
 }
 
-static void
-x_server_stopped_cb (XServerLocal *x_server, Seat *seat)
-{
-    gint vt;
-
-    /* Can re-use the VT */
-    vt = display_server_get_vt (DISPLAY_SERVER (x_server));
-    if (vt > 0)
-        vt_unref (vt);
-
-    g_signal_handlers_disconnect_matched (x_server, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, x_server_stopped_cb, NULL);
-}
-
 static DisplayServer *
-create_x_server (Seat *seat)
-{
+seat_xlocal_create_display_server (Seat *seat, const gchar *session_type, gboolean is_greeter)
+{  
+    if (strcmp (session_type, "x") != 0)
+        return NULL;
+
     XServerLocal *x_server;
-    const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
+    const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL, *xdg_seat = NULL;
     gboolean allow_tcp;
     gint vt = -1, port = 0;
 
     if (vt > 0)
-        g_debug ("Starting local X display on VT %d", vt);
+        l_debug (seat, "Starting local X display on VT %d", vt);
     else
-        g_debug ("Starting local X display");
+        l_debug (seat, "Starting local X display");
   
     x_server = x_server_local_new ();
 
@@ -106,22 +95,22 @@ create_x_server (Seat *seat)
             plymouth_deactivate ();
         }
         else
-            g_debug ("Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
+            l_debug (seat, "Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
     }
     if (plymouth_get_is_active ())
         plymouth_quit (FALSE);
     if (vt < 0)
         vt = vt_get_unused ();
     if (vt >= 0)
-    {
-        vt_ref (vt);
         x_server_local_set_vt (x_server, vt);
-        g_signal_connect (x_server, "stopped", G_CALLBACK (x_server_stopped_cb), seat);
-    }
 
     layout = seat_get_string_property (seat, "xserver-layout");
     if (layout)
         x_server_local_set_layout (x_server, layout);
+        
+    xdg_seat = seat_get_string_property (seat, "xdg-seat");
+    if (xdg_seat)
+        x_server_local_set_xdg_seat (x_server, xdg_seat);
 
     config_file = seat_get_string_property (seat, "xserver-config");
     if (config_file)
@@ -153,7 +142,7 @@ create_x_server (Seat *seat)
         keys = g_key_file_new ();
         result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
         if (error)
-            g_debug ("Error getting key %s", error->message);
+            l_debug (seat, "Error getting key %s", error->message);
         g_clear_error (&error);      
 
         if (result)
@@ -163,7 +152,7 @@ create_x_server (Seat *seat)
             if (g_key_file_has_key (keys, "keyring", key_name, NULL))
                 key = g_key_file_get_string (keys, "keyring", key_name, NULL);
             else
-                g_debug ("Key %s not defined", key_name);
+                l_debug (seat, "Key %s not defined", key_name);
 
             if (key)
                 x_server_local_set_xdmcp_key (x_server, key);
@@ -177,27 +166,18 @@ create_x_server (Seat *seat)
     return DISPLAY_SERVER (x_server);
 }
 
-static DisplayServer *
-seat_xlocal_create_display_server (Seat *seat, const gchar *session_type)
-{  
-    if (strcmp (session_type, "x") == 0)
-        return create_x_server (seat);
-    else if (strcmp (session_type, "mir") == 0)
-        return DISPLAY_SERVER (mir_server_new ());
-    else
-    {
-        g_warning ("Can't create unsupported display server '%s'", session_type);
-        return NULL;
-    }
-}
-
 static Greeter *
 seat_xlocal_create_greeter_session (Seat *seat)
 {
     Greeter *greeter_session;
+    const gchar *xdg_seat;
 
     greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);
-    session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");
+    xdg_seat = seat_get_string_property (seat, "xdg-seat");
+    if (!xdg_seat)
+        xdg_seat = "seat0";
+    l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+    session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat);
 
     return greeter_session;
 }
@@ -206,9 +186,14 @@ static Session *
 seat_xlocal_create_session (Seat *seat)
 {
     Session *session;
+    const gchar *xdg_seat;
 
     session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);
-    session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+    xdg_seat = seat_get_string_property (seat, "xdg-seat");
+    if (!xdg_seat)
+        xdg_seat = "seat0";
+    l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+    session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
 
     return session;
 }
@@ -236,7 +221,10 @@ seat_xlocal_get_active_session (Seat *seat)
     for (link = seat_get_sessions (seat); link; link = link->next)
     {
         Session *session = link->data;
-        if (display_server_get_vt (session_get_display_server (session)) == vt)
+        DisplayServer *display_server;
+
+        display_server = session_get_display_server (session);
+        if (display_server && display_server_get_vt (display_server) == vt)
             return session;
     }