]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - src/seat.c
When locking a session, if an existing greeter can't be reused, then it's stopped...
[sojka/lightdm.git] / src / seat.c
index 58a5ec2e6af32bcc40162ad940c9ff44171be490..13624ccb6fe5c78e24154d343ee1e5ca0dd942f0 100644 (file)
@@ -797,21 +797,21 @@ session_stopped_cb (Session *session, Seat *seat)
     /* If there is a pending replacement greeter, start it */
     if (IS_GREETER (session) && seat->priv->replacement_greeter)
     {
-        Session *s = SESSION(seat->priv->replacement_greeter);
+        Greeter *replacement_greeter = seat->priv->replacement_greeter;
         seat->priv->replacement_greeter = NULL;
-        g_object_unref(s);
         
-        if (session_get_is_authenticated (s))
+        if (session_get_is_authenticated (SESSION (replacement_greeter)))
         {
             l_debug (seat, "Greeter stopped, running session");
-            run_session (seat, s);
+            run_session (seat, SESSION (replacement_greeter));
         }
         else
         {
             l_debug (seat, "Greeter stopped, starting session authentication");
-            start_session (seat, s);
+            start_session (seat, SESSION (replacement_greeter));
         }
 
+        g_object_unref (replacement_greeter);
     }
     /* If this is the greeter session then re-use this display server */
     else if (IS_GREETER (session) &&
@@ -984,11 +984,15 @@ find_session_config (Seat *seat, const gchar *sessions_dir, const gchar *session
     for (i = 0; dirs[i]; i++)
     {
         gchar *filename, *path;
+        const gchar *default_session_type = "x";
+
+        if (strcmp (dirs[i], WAYLAND_SESSIONS_DIR) == 0)
+            default_session_type = "wayland";
 
         filename = g_strdup_printf ("%s.desktop", session_name);
         path = g_build_filename (dirs[i], filename, NULL);
         g_free (filename);
-        session_config = session_config_new_from_file (path, &error);
+        session_config = session_config_new_from_file (path, default_session_type, &error);
         g_free (path);
         if (session_config)
             break;
@@ -1047,6 +1051,14 @@ create_user_session (Seat *seat, const gchar *username, gboolean autostart)
     session_name = user_get_xsession (user);
     language = user_get_language (user);
 
+    /* Override session for autologin if configured */
+    if (autostart)
+    {
+        const gchar *autologin_session_name = seat_get_string_property (seat, "autologin-session");
+        if (autologin_session_name)
+            session_name = autologin_session_name;
+    }
+
     if (!session_name)
         session_name = seat_get_string_property (seat, "user-session");
     sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
@@ -1912,6 +1924,8 @@ seat_finalize (GObject *object)
         g_object_unref (self->priv->next_session);
     if (self->priv->session_to_activate)
         g_object_unref (self->priv->session_to_activate);
+    if (self->priv->replacement_greeter)
+        g_object_unref (self->priv->replacement_greeter);
 
     G_OBJECT_CLASS (seat_parent_class)->finalize (object);
 }