Blame SOURCES/0002-manager-start-login-screen-if-old-one-is-finished.patch

765e07
From 6b4402fb0bbf17803c2354e92fc448a537d2d506 Mon Sep 17 00:00:00 2001
765e07
From: Ray Strode <rstrode@redhat.com>
765e07
Date: Fri, 22 Jun 2018 14:55:39 -0400
4f3de9
Subject: [PATCH 2/7] manager: start login screen if old one is finished
765e07
765e07
Since commit 22c332ba we try to start a login screen if we end up
765e07
on an empty VT and there isn't one running.
765e07
765e07
Unfortunately the check for "is on an empty VT" is a little busted.
765e07
It counts the VT has non-empty if there's a display associated with
765e07
it, even if that display is in the FINISHED state about to be
765e07
reaped.
765e07
765e07
That means, in some cases, we'll still leave the user on an empty
765e07
VT with no login screen.
765e07
765e07
This commit addresses the problem by explicitly checking for
765e07
FINISHED displays, and proceeding even in their presense.
765e07
---
765e07
 daemon/gdm-manager.c | 2 +-
765e07
 1 file changed, 1 insertion(+), 1 deletion(-)
765e07
765e07
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
765e07
index 129cc0de4..3f5772e65 100644
765e07
--- a/daemon/gdm-manager.c
765e07
+++ b/daemon/gdm-manager.c
765e07
@@ -1410,61 +1410,61 @@ activate_login_window_session_on_seat (GdmManager *self,
765e07
         char *session_id;
765e07
 
765e07
         if (!get_login_window_session_id (seat_id, &session_id)) {
765e07
                 return;
765e07
         }
765e07
 
765e07
         activate_session_id (self, seat_id, session_id);
765e07
 }
765e07
 
765e07
 static void
765e07
 maybe_activate_other_session (GdmManager *self,
765e07
                               GdmDisplay *old_display)
765e07
 {
765e07
         char *seat_id = NULL;
765e07
         char *session_id = NULL;
765e07
         int ret;
765e07
 
765e07
         g_object_get (G_OBJECT (old_display),
765e07
                       "seat-id", &seat_id,
765e07
                       NULL);
765e07
 
765e07
         ret = sd_seat_get_active (seat_id, &session_id, NULL);
765e07
 
765e07
         if (ret == 0) {
765e07
                 GdmDisplay *display;
765e07
 
765e07
                 display = gdm_display_store_find (self->priv->display_store,
765e07
                                                   lookup_by_session_id,
765e07
                                                   (gpointer) session_id);
765e07
 
765e07
-                if (display == NULL) {
765e07
+                if (display == NULL || gdm_display_get_status (display) == GDM_DISPLAY_FINISHED) {
765e07
                         activate_login_window_session_on_seat (self, seat_id);
765e07
                 }
765e07
 
765e07
                 g_free (session_id);
765e07
         }
765e07
 
765e07
         g_free (seat_id);
765e07
 }
765e07
 
765e07
 static const char *
765e07
 get_username_for_greeter_display (GdmManager *manager,
765e07
                                   GdmDisplay *display)
765e07
 {
765e07
         gboolean doing_initial_setup = FALSE;
765e07
 
765e07
         g_object_get (G_OBJECT (display),
765e07
                       "doing-initial-setup", &doing_initial_setup,
765e07
                       NULL);
765e07
 
765e07
         if (doing_initial_setup) {
765e07
                 return INITIAL_SETUP_USERNAME;
765e07
         } else {
765e07
                 return GDM_USERNAME;
765e07
         }
765e07
 }
765e07
 
765e07
 static void
765e07
 set_up_automatic_login_session (GdmManager *manager,
765e07
                                 GdmDisplay *display)
765e07
 {
765e07
-- 
765e07
2.19.0
765e07