Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: the power button cannot trigger shutdown #389

Merged
merged 1 commit into from
Dec 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions src/session-widgets/lockcontent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ void LockContent::initUI()

void LockContent::initConnections()
{
connect(m_model, &SessionBaseModel::onRequirePowerAction, this, &LockContent::onRequirePowerAction);
connect(m_model, &SessionBaseModel::currentUserChanged, this, &LockContent::onCurrentUserChanged);
connect(m_controlWidget, &ControlWidget::requestSwitchUser, this, [ = ] (std::shared_ptr<User> user) {
Q_EMIT requestEndAuthentication(m_model->currentUser()->name(), AT_All);
Expand Down Expand Up @@ -350,6 +351,8 @@ void LockContent::pushShutdownFrame()
{
//设置关机选项界面大小为中间区域的大小,并移动到左上角,避免显示后出现移动现象
m_shutdownFrame.reset(new ShutdownWidget(this));
connect(m_shutdownFrame.get(), &ShutdownWidget::onRequirePowerAction, this, &LockContent::onRequirePowerAction);

m_shutdownFrame->setAccessibleName("ShutdownFrame");
m_shutdownFrame->setModel(m_model);
m_shutdownFrame->move(0, 0);
Expand Down Expand Up @@ -675,3 +678,27 @@ void LockContent::keyPressEvent(QKeyEvent *event)
break;
}
}

void LockContent::onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm)
{
//锁屏或关机模式时,需要确认是否关机或检查是否有阻止关机
if (m_model->appType() == Lock) {
switch (powerAction) {
case SessionBaseModel::PowerAction::RequireShutdown:
case SessionBaseModel::PowerAction::RequireRestart:
case SessionBaseModel::PowerAction::RequireSwitchSystem:
case SessionBaseModel::PowerAction::RequireLogout:
case SessionBaseModel::PowerAction::RequireSuspend:
case SessionBaseModel::PowerAction::RequireHibernate:
m_model->setIsCheckedInhibit(false);
emit m_model->shutdownInhibit(powerAction, needConfirm);
break;
default:
m_model->setPowerAction(powerAction);
break;
}
} else {
//登录模式直接操作
m_model->setPowerAction(powerAction);
}
}
1 change: 1 addition & 0 deletions src/session-widgets/lockcontent.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public slots:
void setMPRISEnable(const bool state);
void onNewConnection();
void onDisConnect();
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);

protected:
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
Expand Down
40 changes: 7 additions & 33 deletions src/widgets/shutdownwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,32 +56,32 @@ void ShutdownWidget::initConnect()
{
connect(m_requireRestartButton, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireRestartButton;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireRestart, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireRestart, false);
});
connect(m_requireShutdownButton, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireShutdownButton;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireShutdown, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireShutdown, false);
});
connect(m_requireSuspendButton, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireSuspendButton;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSuspend, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSuspend, false);
});
connect(m_requireHibernateButton, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireHibernateButton;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireHibernate, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireHibernate, false);
});
connect(m_requireLockButton, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireLockButton;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireLock, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireLock, false);
});
connect(m_requireSwitchUserBtn, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireSwitchUserBtn;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchUser, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchUser, false);
});
if (m_requireSwitchSystemBtn) {
connect(m_requireSwitchSystemBtn, &RoundItemButton::clicked, this, [ = ] {
m_currentSelectedBtn = m_requireSwitchSystemBtn;
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchSystem, false);
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchSystem, false);
});
}
connect(m_requireLogoutButton, &RoundItemButton::clicked, this, [ = ] {
Expand Down Expand Up @@ -470,30 +470,6 @@ void ShutdownWidget::recoveryLayout()
setFocusPolicy(Qt::StrongFocus);
}

void ShutdownWidget::onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm)
{
//锁屏或关机模式时,需要确认是否关机或检查是否有阻止关机
if (m_model->appType() == Lock) {
switch (powerAction) {
case SessionBaseModel::PowerAction::RequireShutdown:
case SessionBaseModel::PowerAction::RequireRestart:
case SessionBaseModel::PowerAction::RequireSwitchSystem:
case SessionBaseModel::PowerAction::RequireLogout:
case SessionBaseModel::PowerAction::RequireSuspend:
case SessionBaseModel::PowerAction::RequireHibernate:
m_model->setIsCheckedInhibit(false);
emit m_model->shutdownInhibit(powerAction, needConfirm);
break;
default:
m_model->setPowerAction(powerAction);
break;
}
} else {
//登录模式直接操作
m_model->setPowerAction(powerAction);
}
}

void ShutdownWidget::setUserSwitchEnable(bool enable)
{
//接收到用户列表变更信号号,记录切换用户是否允许可见,再根据当前是锁屏还是关机设置切换按钮可见状态
Expand Down Expand Up @@ -589,8 +565,6 @@ void ShutdownWidget::setModel(SessionBaseModel *const model)
{
m_model = model;

connect(model, &SessionBaseModel::onRequirePowerAction, this, &ShutdownWidget::onRequirePowerAction);

connect(model, &SessionBaseModel::onHasSwapChanged, this, &ShutdownWidget::enableHibernateBtn);
enableHibernateBtn(model->hasSwap());

Expand Down
4 changes: 3 additions & 1 deletion src/widgets/shutdownwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,13 @@ public slots:
void rightKeySwitch();
void runSystemMonitor();
void recoveryLayout();
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);
void setUserSwitchEnable(bool enable);
void onEnable(const QString &gsettingsName, bool enable);
void updateLocale(std::shared_ptr<User> user);

signals:
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);

protected:
bool eventFilter(QObject *watched, QEvent *event) override;
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
Expand Down
Loading