diff --git a/debian/control b/debian/control index d05cfc6..32d793e 100644 --- a/debian/control +++ b/debian/control @@ -26,6 +26,7 @@ Depends: jq, sed (>= 4), dde-daemon (>= 6.1.102), + dde-session-ui (>> 6.0.48), deepin-security-loader, libdtkdata (>=5.7.18), libdtk6core (>=6.0.38), diff --git a/src/dde-session/impl/sessionmanager.cpp b/src/dde-session/impl/sessionmanager.cpp index e58608f..2999ea6 100644 --- a/src/dde-session/impl/sessionmanager.cpp +++ b/src/dde-session/impl/sessionmanager.cpp @@ -947,8 +947,28 @@ void SessionManager::recoverySystemPowerMode() setTlpMode(mode); } +void SessionManager::startBlackWidget() +{ + if (Utils::IS_WAYLAND_DISPLAY) { + qInfo() << "skip start blackwidget on wayland"; + return; + } + + qInfo() << "start dde-blackwidget nodbus for shutdown"; + QDBusPendingReply reply = + m_systemd1ManagerInter->StartUnit(QStringLiteral("dde-blackwidget-nodbus.service"), + QStringLiteral("replace")); + reply.waitForFinished(); + if (reply.isError()) { + qWarning() << "failed to start dde-blackwidget-nodbus.service:" + << reply.error().name() + << reply.error().message(); + } +} + void SessionManager::shutdown(bool force) { + startBlackWidget(); prepareShutdown(force); clearCurrentTty(); @@ -962,6 +982,7 @@ void SessionManager::shutdown(bool force) void SessionManager::reboot(bool force) { + startBlackWidget(); prepareShutdown(force); clearCurrentTty(); diff --git a/src/dde-session/impl/sessionmanager.h b/src/dde-session/impl/sessionmanager.h index d06d27f..324d6f4 100644 --- a/src/dde-session/impl/sessionmanager.h +++ b/src/dde-session/impl/sessionmanager.h @@ -98,6 +98,8 @@ public Q_SLOTS: void playLogoutSound(); void setDPMSMode(bool on); + void startBlackWidget(); + void handleOSSignal(); void watchXConnection();