summaryrefslogtreecommitdiff
path: root/x11-misc/sddm/files/sddm-0.17.0-switchtogreeter.patch
blob: 22d2fa4ae9bebd140ff5805de870b4fed4b722ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Subject: [PATCH] Fix switchToGreeter not available without logind
From: Alexander Miller <alex.miller@gmx.de>

Seats can't be created until SeatManager's signals are
connected to the DisplayManager, or the latter won't see
them and switchToGreeter doesn't work. So split SeatManager
initialization from its constructor and call initialize it
only after all connections have been set up in DaemonApp's
constructor.

With logind there may have been enough delay before seats
got actually added so things would work, but it's still
cleaner to fix the order.

Fixes: https://bugs.gentoo.org/644718
Fixes: https://github.com/sddm/sddm/issues/824

--- a/src/daemon/SeatManager.h
+++ b/src/daemon/SeatManager.h
@@ -31,8 +31,9 @@ namespace SDDM {
     class SeatManager : public QObject {
         Q_OBJECT
     public:
-        explicit SeatManager(QObject *parent = 0);
+        explicit SeatManager(QObject *parent = 0) {}
 
+        void initialize();
         void createSeat(const QString &name);
         void removeSeat(const QString &name);
         void switchToGreeter(const QString &seat);
--- a/src/daemon/SeatManager.cpp
+++ b/src/daemon/SeatManager.cpp
@@ -93,8 +93,7 @@ namespace SDDM {
         }
     }
 
-    SeatManager::SeatManager(QObject *parent) : QObject(parent) {
-
+    void SeatManager::initialize() {
         if (DaemonApp::instance()->testing() || !Logind::isAvailable()) {
             //if we don't have logind/CK2, just create a single seat immediately and don't do any other connections
             createSeat(QStringLiteral("seat0"));
--- a/src/daemon/DaemonApp.cpp
+++ b/src/daemon/DaemonApp.cpp
@@ -75,6 +75,9 @@ namespace SDDM {
 
         // log message
         qDebug() << "Starting...";
+
+        // initialize seats only after signals are connected
+        m_seatManager->initialize();
     }
 
     bool DaemonApp::testing() const {