File 0003-Load-autologin-configuration-in-Display-Display.patch of Package sddm

From 8fbb69ab2cfe0f8ab4c8ca31fa0f571ba165b16d Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Mon, 15 Jul 2024 21:13:35 +0200
Subject: [PATCH 3/5] Load autologin configuration in Display::Display

Makes m_autologinSession more easily available and simplifies runtime
handling.
---
 src/daemon/Display.cpp | 53 +++++++++++++++++++-----------------------
 src/daemon/Display.h   |  3 ++-
 2 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
index 91e4dac..56b9b8a 100644
--- a/src/daemon/Display.cpp
+++ b/src/daemon/Display.cpp
@@ -171,6 +171,27 @@ namespace SDDM {
             stop();
         });
         connect(m_greeter, &Greeter::displayServerFailed, this, &Display::displayServerFailed);
+
+        // Load autologin configuration (whether to autologin, user, session, session type)
+        if ((daemonApp->first || mainConfig.Autologin.Relogin.get()) &&
+            !mainConfig.Autologin.User.get().isEmpty()) {
+            // reset first flag
+            daemonApp->first = false;
+
+            // determine session type
+            QString autologinSession = mainConfig.Autologin.Session.get();
+            // not configured: try last successful logged in
+            if (autologinSession.isEmpty()) {
+                autologinSession = stateConfig.Last.Session.get();
+            }
+            if (findSessionEntry(mainConfig.Wayland.SessionDir.get(), autologinSession)) {
+                m_autologinSession.setTo(Session::WaylandSession, autologinSession);
+            } else if (findSessionEntry(mainConfig.X11.SessionDir.get(), autologinSession)) {
+                m_autologinSession.setTo(Session::X11Session, autologinSession);
+            } else {
+                qCritical() << "Unable to find autologin session entry" << autologinSession;
+            }
+        }
     }
 
     Display::~Display() {
@@ -213,31 +234,6 @@ namespace SDDM {
         return m_displayServer->start();
     }
 
-    bool Display::attemptAutologin() {
-        Session::Type sessionType = Session::X11Session;
-
-        // determine session type
-        QString autologinSession = mainConfig.Autologin.Session.get();
-        // not configured: try last successful logged in
-        if (autologinSession.isEmpty()) {
-            autologinSession = stateConfig.Last.Session.get();
-        }
-        if (findSessionEntry(mainConfig.Wayland.SessionDir.get(), autologinSession)) {
-            sessionType = Session::WaylandSession;
-        } else if (findSessionEntry(mainConfig.X11.SessionDir.get(), autologinSession)) {
-            sessionType = Session::X11Session;
-        } else {
-            qCritical() << "Unable to find autologin session entry" << autologinSession;
-            return false;
-        }
-
-        Session session;
-        session.setTo(sessionType, autologinSession);
-
-        m_auth->setAutologin(true);
-        return startAuth(mainConfig.Autologin.User.get(), QString(), session);
-    }
-
     void Display::startSocketServerAndGreeter() {
         // start socket server
         m_socketServer->start(m_displayServer->display());
@@ -276,13 +272,12 @@ namespace SDDM {
         // log message
         qDebug() << "Display server started.";
 
-        if ((daemonApp->first || mainConfig.Autologin.Relogin.get()) &&
-            !mainConfig.Autologin.User.get().isEmpty()) {
+        if (m_autologinSession.isValid()) {
             // reset first flag
             daemonApp->first = false;
 
-            const bool autologinStarted = attemptAutologin();
-            if (!autologinStarted)
+            m_auth->setAutologin(true);
+            if (!startAuth(mainConfig.Autologin.User.get(), QString(), m_autologinSession))
                 handleAutologinFailure();
 
             return;
diff --git a/src/daemon/Display.h b/src/daemon/Display.h
index b215852..d0b23c4 100644
--- a/src/daemon/Display.h
+++ b/src/daemon/Display.h
@@ -72,7 +72,6 @@ namespace SDDM {
         void login(QLocalSocket *socket,
                    const QString &user, const QString &password,
                    const Session &session);
-        bool attemptAutologin();
         void displayServerStarted();
 
     signals:
@@ -103,6 +102,8 @@ namespace SDDM {
         QString m_sessionName;
         QString m_reuseSessionId;
 
+        Session m_autologinSession;
+
         Auth *m_auth { nullptr };
         DisplayServer *m_displayServer { nullptr };
         Seat *m_seat { nullptr };
-- 
2.46.0

openSUSE Build Service is sponsored by