diff --git a/src/dde-lock/lockworker.cpp b/src/dde-lock/lockworker.cpp index 6feb8e50..90b963d5 100644 --- a/src/dde-lock/lockworker.cpp +++ b/src/dde-lock/lockworker.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -506,7 +506,8 @@ void LockWorker::doPowerAction(const SessionBaseModel::PowerAction action) #else bool sleepLock = isSleepLock(); #endif - qCInfo(DDE_SHELL) << "Do power action:" << action; + bool doForce = m_model->isPowerActionDoForce(); + qCInfo(DDE_SHELL) << "Do power action:" << action << "doForce:" << doForce; switch (action) { case SessionBaseModel::PowerAction::RequireSuspend: { @@ -572,7 +573,7 @@ void LockWorker::doPowerAction(const SessionBaseModel::PowerAction action) m_model->setShutdownMode(true); auto gsCheckPwd = m_model->gsCheckpwd(); if (!isLocked() || m_model->currentModeState() == SessionBaseModel::ModeStatus::ShutDownMode || !gsCheckPwd) { - m_sessionManagerInter->RequestReboot(); + doForce ? m_sessionManagerInter->ForceReboot() : m_sessionManagerInter->RequestReboot(); } else { createAuthentication(m_account); m_model->setCurrentModeState(SessionBaseModel::ModeStatus::ConfirmPasswordMode); @@ -591,7 +592,7 @@ void LockWorker::doPowerAction(const SessionBaseModel::PowerAction action) m_model->setShutdownMode(true); auto gsCheckPwd = m_model->gsCheckpwd(); if (!isLocked() || m_model->currentModeState() == SessionBaseModel::ModeStatus::ShutDownMode || !gsCheckPwd) { - m_sessionManagerInter->RequestShutdown(); + doForce ? m_sessionManagerInter->ForceShutdown() : m_sessionManagerInter->RequestShutdown(); } else { createAuthentication(m_account); m_model->setCurrentModeState(SessionBaseModel::ModeStatus::ConfirmPasswordMode); @@ -611,7 +612,7 @@ void LockWorker::doPowerAction(const SessionBaseModel::PowerAction action) createAuthentication(m_model->currentUser()->name()); break; case SessionBaseModel::PowerAction::RequireLogout: - m_sessionManagerInter->RequestLogout(); + doForce ? m_sessionManagerInter->ForceLogout() : m_sessionManagerInter->RequestLogout(); return; case SessionBaseModel::PowerAction::RequireSwitchSystem: m_switchosInterface->setOsFlag(!m_switchosInterface->getOsFlag()); diff --git a/src/session-widgets/sessionbasemodel.cpp b/src/session-widgets/sessionbasemodel.cpp index b7f09194..ffa2e1ca 100644 --- a/src/session-widgets/sessionbasemodel.cpp +++ b/src/session-widgets/sessionbasemodel.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -114,14 +114,15 @@ void SessionBaseModel::setSessionKey(const QString &sessionKey) emit onSessionKeyChanged(sessionKey); } -void SessionBaseModel::setPowerAction(const PowerAction &powerAction) +void SessionBaseModel::setPowerAction(const PowerAction &powerAction, bool force) { - qCInfo(DDE_SHELL) << "Incoming action:" << powerAction << ", current action:" << m_powerAction; + qCInfo(DDE_SHELL) << "Incoming action:" << powerAction << ", current action:" << m_powerAction << ", force:" << force; if (powerAction == m_powerAction) return; m_powerAction = powerAction; + m_powerActionDoForce = force; if (m_enableShutdownBlackWidget && !gsCheckpwd() && (powerAction == SessionBaseModel::PowerAction::RequireRestart || powerAction == SessionBaseModel::PowerAction::RequireShutdown)) Q_EMIT shutdownkModeChanged(true); diff --git a/src/session-widgets/sessionbasemodel.h b/src/session-widgets/sessionbasemodel.h index 784c7c61..08827d8d 100644 --- a/src/session-widgets/sessionbasemodel.h +++ b/src/session-widgets/sessionbasemodel.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -116,7 +116,9 @@ class SessionBaseModel : public QObject void setSessionKey(const QString &sessionKey); inline PowerAction powerAction() const { return m_powerAction; } - void setPowerAction(const PowerAction &powerAction); + void setPowerAction(const PowerAction &powerAction, bool force = false); + + bool isPowerActionDoForce() const { return m_powerActionDoForce; } ModeStatus currentModeState() const { return m_currentModeState; } void setCurrentModeState(const ModeStatus ¤tModeState); @@ -324,6 +326,7 @@ public slots: bool m_visibleShutdownWhenRebootOrShutdown; bool m_isQuickLoginProcess=false;//标志当前界面展示是否为快速登录流程 bool m_gsCheckpwd; + bool m_powerActionDoForce = false; // 是否强制执行关机重启等操作 }; #endif // SESSIONBASEMODEL_H diff --git a/src/widgets/warningcontent.cpp b/src/widgets/warningcontent.cpp index 5030cd07..061d4630 100644 --- a/src/widgets/warningcontent.cpp +++ b/src/widgets/warningcontent.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2015 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -199,7 +199,11 @@ void WarningContent::doAcceptShutdownInhibit() } } +#ifndef ENABLE_DSS_SNIPE m_model->setPowerAction(m_powerAction); +#else + m_model->setPowerAction(m_powerAction, true); +#endif if (m_model->currentModeState() != SessionBaseModel::ModeStatus::ShutDownMode && m_model->currentModeState() != SessionBaseModel::ModeStatus::PowerMode