Skip to content

Commit 14c84bb

Browse files
committed
fix: the power button cannot trigger shutdown
修复 Super+L 锁屏时,电源键无法出发关机 Log: 修复 Super+L 锁屏时,电源键无法出发关机 PMS: bug-289177
1 parent 9103ad0 commit 14c84bb

File tree

4 files changed

+38
-34
lines changed

4 files changed

+38
-34
lines changed

src/session-widgets/lockcontent.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ void LockContent::initUI()
107107

108108
void LockContent::initConnections()
109109
{
110+
connect(m_model, &SessionBaseModel::onRequirePowerAction, this, &LockContent::onRequirePowerAction);
110111
connect(m_model, &SessionBaseModel::currentUserChanged, this, &LockContent::onCurrentUserChanged);
111112
connect(m_controlWidget, &ControlWidget::requestSwitchUser, this, [ = ] (std::shared_ptr<User> user) {
112113
Q_EMIT requestEndAuthentication(m_model->currentUser()->name(), AT_All);
@@ -350,6 +351,8 @@ void LockContent::pushShutdownFrame()
350351
{
351352
//设置关机选项界面大小为中间区域的大小,并移动到左上角,避免显示后出现移动现象
352353
m_shutdownFrame.reset(new ShutdownWidget(this));
354+
connect(m_shutdownFrame.get(), &ShutdownWidget::onRequirePowerAction, this, &LockContent::onRequirePowerAction);
355+
353356
m_shutdownFrame->setAccessibleName("ShutdownFrame");
354357
m_shutdownFrame->setModel(m_model);
355358
m_shutdownFrame->move(0, 0);
@@ -675,3 +678,27 @@ void LockContent::keyPressEvent(QKeyEvent *event)
675678
break;
676679
}
677680
}
681+
682+
void LockContent::onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm)
683+
{
684+
//锁屏或关机模式时,需要确认是否关机或检查是否有阻止关机
685+
if (m_model->appType() == Lock) {
686+
switch (powerAction) {
687+
case SessionBaseModel::PowerAction::RequireShutdown:
688+
case SessionBaseModel::PowerAction::RequireRestart:
689+
case SessionBaseModel::PowerAction::RequireSwitchSystem:
690+
case SessionBaseModel::PowerAction::RequireLogout:
691+
case SessionBaseModel::PowerAction::RequireSuspend:
692+
case SessionBaseModel::PowerAction::RequireHibernate:
693+
m_model->setIsCheckedInhibit(false);
694+
emit m_model->shutdownInhibit(powerAction, needConfirm);
695+
break;
696+
default:
697+
m_model->setPowerAction(powerAction);
698+
break;
699+
}
700+
} else {
701+
//登录模式直接操作
702+
m_model->setPowerAction(powerAction);
703+
}
704+
}

src/session-widgets/lockcontent.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public slots:
6363
void setMPRISEnable(const bool state);
6464
void onNewConnection();
6565
void onDisConnect();
66+
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);
6667

6768
protected:
6869
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

src/widgets/shutdownwidget.cpp

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,32 +56,32 @@ void ShutdownWidget::initConnect()
5656
{
5757
connect(m_requireRestartButton, &RoundItemButton::clicked, this, [ = ] {
5858
m_currentSelectedBtn = m_requireRestartButton;
59-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireRestart, false);
59+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireRestart, false);
6060
});
6161
connect(m_requireShutdownButton, &RoundItemButton::clicked, this, [ = ] {
6262
m_currentSelectedBtn = m_requireShutdownButton;
63-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireShutdown, false);
63+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireShutdown, false);
6464
});
6565
connect(m_requireSuspendButton, &RoundItemButton::clicked, this, [ = ] {
6666
m_currentSelectedBtn = m_requireSuspendButton;
67-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSuspend, false);
67+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSuspend, false);
6868
});
6969
connect(m_requireHibernateButton, &RoundItemButton::clicked, this, [ = ] {
7070
m_currentSelectedBtn = m_requireHibernateButton;
71-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireHibernate, false);
71+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireHibernate, false);
7272
});
7373
connect(m_requireLockButton, &RoundItemButton::clicked, this, [ = ] {
7474
m_currentSelectedBtn = m_requireLockButton;
75-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireLock, false);
75+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireLock, false);
7676
});
7777
connect(m_requireSwitchUserBtn, &RoundItemButton::clicked, this, [ = ] {
7878
m_currentSelectedBtn = m_requireSwitchUserBtn;
79-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchUser, false);
79+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchUser, false);
8080
});
8181
if (m_requireSwitchSystemBtn) {
8282
connect(m_requireSwitchSystemBtn, &RoundItemButton::clicked, this, [ = ] {
8383
m_currentSelectedBtn = m_requireSwitchSystemBtn;
84-
onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchSystem, false);
84+
emit onRequirePowerAction(SessionBaseModel::PowerAction::RequireSwitchSystem, false);
8585
});
8686
}
8787
connect(m_requireLogoutButton, &RoundItemButton::clicked, this, [ = ] {
@@ -470,30 +470,6 @@ void ShutdownWidget::recoveryLayout()
470470
setFocusPolicy(Qt::StrongFocus);
471471
}
472472

473-
void ShutdownWidget::onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm)
474-
{
475-
//锁屏或关机模式时,需要确认是否关机或检查是否有阻止关机
476-
if (m_model->appType() == Lock) {
477-
switch (powerAction) {
478-
case SessionBaseModel::PowerAction::RequireShutdown:
479-
case SessionBaseModel::PowerAction::RequireRestart:
480-
case SessionBaseModel::PowerAction::RequireSwitchSystem:
481-
case SessionBaseModel::PowerAction::RequireLogout:
482-
case SessionBaseModel::PowerAction::RequireSuspend:
483-
case SessionBaseModel::PowerAction::RequireHibernate:
484-
m_model->setIsCheckedInhibit(false);
485-
emit m_model->shutdownInhibit(powerAction, needConfirm);
486-
break;
487-
default:
488-
m_model->setPowerAction(powerAction);
489-
break;
490-
}
491-
} else {
492-
//登录模式直接操作
493-
m_model->setPowerAction(powerAction);
494-
}
495-
}
496-
497473
void ShutdownWidget::setUserSwitchEnable(bool enable)
498474
{
499475
//接收到用户列表变更信号号,记录切换用户是否允许可见,再根据当前是锁屏还是关机设置切换按钮可见状态
@@ -589,8 +565,6 @@ void ShutdownWidget::setModel(SessionBaseModel *const model)
589565
{
590566
m_model = model;
591567

592-
connect(model, &SessionBaseModel::onRequirePowerAction, this, &ShutdownWidget::onRequirePowerAction);
593-
594568
connect(model, &SessionBaseModel::onHasSwapChanged, this, &ShutdownWidget::enableHibernateBtn);
595569
enableHibernateBtn(model->hasSwap());
596570

src/widgets/shutdownwidget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@ public slots:
4141
void rightKeySwitch();
4242
void runSystemMonitor();
4343
void recoveryLayout();
44-
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);
4544
void setUserSwitchEnable(bool enable);
4645
void onEnable(const QString &gsettingsName, bool enable);
4746
void updateLocale(std::shared_ptr<User> user);
4847

48+
signals:
49+
void onRequirePowerAction(SessionBaseModel::PowerAction powerAction, bool needConfirm);
50+
4951
protected:
5052
bool eventFilter(QObject *watched, QEvent *event) override;
5153
void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;

0 commit comments

Comments
 (0)