From 67539df95e4abb929cea5ddb24aba78c1cb2da0d Mon Sep 17 00:00:00 2001 From: April & May Date: Thu, 28 Aug 2025 17:54:22 +0800 Subject: [PATCH] fix: fix treeland get stuck in lockscreen after crash recovery Treeland will get stuck in lockscreen after a crash recovery, which is caused by unintended login request for already logined user. This commit adds a new DaemonMessages type, and convey logined user to treeland after socket connected, to avoid this problem. --- src/common/Messages.h | 1 + src/daemon/Display.cpp | 15 +++++++++++++++ src/daemon/Display.h | 1 + 3 files changed, 17 insertions(+) diff --git a/src/common/Messages.h b/src/common/Messages.h index 41660f6..9f2e4ee 100644 --- a/src/common/Messages.h +++ b/src/common/Messages.h @@ -50,6 +50,7 @@ namespace DDM { InformationMessage, UserActivateMessage, SwitchToGreeter, + UserLoggedIn, }; enum Capability { diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp index 214e20f..fcef17d 100644 --- a/src/daemon/Display.cpp +++ b/src/daemon/Display.cpp @@ -31,6 +31,8 @@ #include "SocketServer.h" #include "Greeter.h" #include "Utils.h" +#include "Messages.h" +#include "SocketWriter.h" #include #include @@ -149,6 +151,9 @@ namespace DDM { connect(m_displayServer, &DisplayServer::started, this, &Display::displayServerStarted); connect(m_displayServer, &DisplayServer::stopped, this, &Display::stop); + // connect connected signal + connect(m_socketServer, &SocketServer::connected, this, &Display::connected); + // connect login signal connect(m_socketServer, &SocketServer::login, this, &Display::login); @@ -365,6 +370,16 @@ namespace DDM { emit stopped(); } + void Display::connected(QLocalSocket *socket) { + m_socket = socket; + // send logined user (for possible crash recovery) + SocketWriter writer(socket); + for (Auth *auth : loginedSession()) { + if (auth->isActive()) + writer << quint32(DaemonMessages::UserLoggedIn) << auth->user(); + } + } + void Display::login(QLocalSocket *socket, const QString &user, const QString &password, const Session &session) { diff --git a/src/daemon/Display.h b/src/daemon/Display.h index e44e7ce..7d8eddd 100644 --- a/src/daemon/Display.h +++ b/src/daemon/Display.h @@ -75,6 +75,7 @@ namespace DDM { bool start(); void stop(); + void connected(QLocalSocket *socket); void login(QLocalSocket *socket, const QString &user, const QString &password, const Session &session);