!89 修改切换用户为调用锁屏

Merge pull request !89 from liudunfa/openkylin/nile
This commit is contained in:
杨敏 2024-06-12 08:01:24 +00:00 committed by openkylin-cibot
parent 3235d04626
commit 028eb322db
2 changed files with 373 additions and 0 deletions

372
debian/patches/0037-89.patch vendored Normal file
View File

@ -0,0 +1,372 @@
From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
Date: Wed, 12 Jun 2024 08:01:24 +0000
Subject: =?utf-8?b?ITg5IOS/ruaUueWIh+aNoueUqOaIt+S4uuiwg+eUqOmUgeWxjyBNZXJn?=
=?utf-8?b?ZSBwdWxsIHJlcXVlc3QgITg5IGZyb20gbGl1ZHVuZmEvb3Blbmt5bGluL25pbGU=?=
---
src/lock-backend/dbusupperinterface.cpp | 29 ++++++++++++++++++++++-------
src/lock-backend/dbusupperinterface.h | 6 +++++-
src/lock-command/main.cpp | 9 ++++++++-
src/lock-dialog/lockdialogmodel.cpp | 11 ++++++++++-
src/lock-dialog/lockdialogmodel.h | 6 ++++++
src/lock-dialog/main.cpp | 5 +++++
src/widgets/authdialog.cpp | 9 ++-------
src/widgets/fullbackgroundwidget.cpp | 19 +++++++++++++++++++
src/widgets/fullbackgroundwidget.h | 1 +
src/widgets/klabel.cpp | 1 +
src/widgets/lockwidget.cpp | 8 ++++++--
src/widgets/lockwidget.h | 3 ++-
12 files changed, 87 insertions(+), 20 deletions(-)
diff --git a/src/lock-backend/dbusupperinterface.cpp b/src/lock-backend/dbusupperinterface.cpp
index 800254c..227727c 100644
--- a/src/lock-backend/dbusupperinterface.cpp
+++ b/src/lock-backend/dbusupperinterface.cpp
@@ -257,6 +257,28 @@ void DbusUpperInterface::Lock()
emitLockState(true);
}
+void DbusUpperInterface::SwitchUser()
+{
+ if (GetLockState())
+ return;
+
+ if (m_procLockDialog.state() != QProcess::NotRunning) {
+ QDBusMessage message;
+ message = QDBusMessage::createSignal(SS_DBUS_PATH, SS_DBUS_INTERFACE, "SecondRunParam");
+ message << "CmdLock";
+ QDBusConnection::sessionBus().send(message);
+ emitLockState(true);
+ return;
+ }
+ qDebug() << "Lock requested";
+ m_bLockState = false;
+ QString cmd = QString("/usr/bin/ukui-screensaver-dialog --switchuser");
+ qDebug() << cmd;
+
+ m_procLockDialog.start(cmd);
+ emitLockState(true);
+}
+
bool DbusUpperInterface::CheckAppVersion()
{
return true;
@@ -420,13 +442,6 @@ void DbusUpperInterface::Logout()
}
}
-void DbusUpperInterface::SwitchUser()
-{
- if (m_sessionHelper) {
- m_sessionHelper->doAction("SwitchUser");
- }
-}
-
void DbusUpperInterface::UnLock()
{
if (m_procLockDialog.state() != QProcess::NotRunning)
diff --git a/src/lock-backend/dbusupperinterface.h b/src/lock-backend/dbusupperinterface.h
index 036bb86..c331650 100644
--- a/src/lock-backend/dbusupperinterface.h
+++ b/src/lock-backend/dbusupperinterface.h
@@ -87,6 +87,11 @@ public:
*
*/
void Lock();
+ /**
+ * @brief SwitchUser
+ *
+ */
+ void SwitchUser();
/**
* @brief 解锁
*
@@ -124,7 +129,6 @@ public:
void MultiUserBlockWindow(QString actionType);
void Suspend();
void Logout();
- void SwitchUser();
void Reboot();
void PowerOff();
void Hibernate();
diff --git a/src/lock-command/main.cpp b/src/lock-command/main.cpp
index f4ae2b5..e3726a0 100644
--- a/src/lock-command/main.cpp
+++ b/src/lock-command/main.cpp
@@ -61,6 +61,8 @@ int main(int argc, char **argv)
"lid");
QCommandLineOption sessiontoolsOption(
{ "t", QStringLiteral("session-tools") }, QCoreApplication::translate("main", "show the session tools"));
+ QCommandLineOption switchuserOption(
+ QStringLiteral("switchuser"), QCoreApplication::translate("main", "show the switchuser window"));
QCommandLineOption appBlockOption(
{ "a", QStringLiteral("app-block") },
QCoreApplication::translate("main", "show the app block window"),
@@ -78,13 +80,14 @@ int main(int argc, char **argv)
parser.addOption(screensaverOption);
parser.addOption(blankOption);
parser.addOption(sessiontoolsOption);
+ parser.addOption(switchuserOption);
parser.addOption(appBlockOption);
parser.addOption(multiUsersOption);
parser.process(a);
if (!parser.isSet(lockOption) && !parser.isSet(queryOption) && !parser.isSet(unlockOption)
&& !parser.isSet(screensaverOption) && !parser.isSet(blankOption) && !parser.isSet(sessiontoolsOption)
- && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption))
+ && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption) && !parser.isSet(switchuserOption))
return -1;
QString displayNum = QString(qgetenv("DISPLAY")).replace(":", "").replace(".", "_");
@@ -151,6 +154,10 @@ int main(int argc, char **argv)
QDBusMessage msg = interface->call("SessionTools");
if (msg.type() == QDBusMessage::ErrorMessage)
qDebug() << msg.errorMessage();
+ } else if (parser.isSet(switchuserOption) && !stateReply) {
+ QDBusMessage msg = interface->call("SwitchUser");
+ if (msg.type() == QDBusMessage::ErrorMessage)
+ qDebug() << msg.errorMessage();
} else if (parser.isSet(appBlockOption) && !stateReply) {
QString opValue = parser.value(appBlockOption);
QDBusMessage msg = interface->call("AppBlockWindow", opValue);
diff --git a/src/lock-dialog/lockdialogmodel.cpp b/src/lock-dialog/lockdialogmodel.cpp
index 653bf0e..97a6e86 100644
--- a/src/lock-dialog/lockdialogmodel.cpp
+++ b/src/lock-dialog/lockdialogmodel.cpp
@@ -67,6 +67,8 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
"1");
QCommandLineOption sessiontoolsOption(
{ "t", QStringLiteral("session-tools") }, QCoreApplication::translate("main", "show the session tools"));
+ QCommandLineOption switchuserOption(
+ QStringLiteral("switchuser"), QGuiApplication::translate("main", "show switch user window"));
QCommandLineOption appBlockOption(
{ "a", QStringLiteral("app-block") },
QCoreApplication::translate("main", "show the app block window"),
@@ -86,6 +88,7 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
delayOption,
hasLockOption,
sessiontoolsOption,
+ switchuserOption,
appBlockOption,
multiUsersOption });
parser.process(args);
@@ -99,7 +102,8 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
} else {
if (!parser.isSet(sessionIdleOption) && !parser.isSet(lockOption) && !parser.isSet(lstOption)
&& !parser.isSet(screensaverOption) && !parser.isSet(lscreensaverOption) && !parser.isSet(blankOption)
- && !parser.isSet(sessiontoolsOption) && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption)) {
+ && !parser.isSet(sessiontoolsOption) && !parser.isSet(switchuserOption)
+ && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption)) {
return false;
}
}
@@ -110,6 +114,7 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
cmdArgs.isLockScreensaver = parser.isSet(lscreensaverOption);
cmdArgs.isBlank = parser.isSet(blankOption);
cmdArgs.isSessionTools = parser.isSet(sessiontoolsOption);
+ cmdArgs.isSwitchUser = parser.isSet(switchuserOption);
if (parser.isSet(hasLockOption)) {
int nHasLockValue = parser.value(hasLockOption).toInt();
if (nHasLockValue == 0) {
@@ -205,6 +210,10 @@ void LockDialogModel::onRunningMessage(const QString &strMsg)
Q_EMIT showMultiUsersBlockWindow(cmdArgs.isMultiUserBlock);
}
+ if (cmdArgs.isSwitchUser) {
+ Q_EMIT showSwitchUserLock();
+ }
+
KillFocusOfKydroid();
}
diff --git a/src/lock-dialog/lockdialogmodel.h b/src/lock-dialog/lockdialogmodel.h
index df32779..e8bda6b 100644
--- a/src/lock-dialog/lockdialogmodel.h
+++ b/src/lock-dialog/lockdialogmodel.h
@@ -49,6 +49,7 @@ public:
bool isSessionTools = false; /**< 显示session电源管理界面*/
int isAppBlock = -1; /**< 显示应用阻塞关机/重启界面*/
int isMultiUserBlock = -1; /**< 显示多用户登录阻塞关机/重启界面*/
+ int isSwitchUser = false; /**< 显示switchuser*/
};
/**
* @brief 构造
@@ -434,6 +435,11 @@ Q_SIGNALS:
* @param isStartup 是否为开机启动 true 是,否则不是
*/
void showLock(bool isStartup);
+ /**
+ * @brief 显示SwitchUser
+ *
+ */
+ void showSwitchUserLock();
/**
* @brief 显示会话空闲状态
*
diff --git a/src/lock-dialog/main.cpp b/src/lock-dialog/main.cpp
index 7469e11..cf8a6e6 100644
--- a/src/lock-dialog/main.cpp
+++ b/src/lock-dialog/main.cpp
@@ -126,6 +126,7 @@ int main(int argc, char *argv[])
}
LockDialogModel::CommandLineArgs cmdArgs;
+
if (!lockDialogModel->parseCmdArguments(app.arguments(), cmdArgs)) {
return 0;
}
@@ -201,6 +202,10 @@ int main(int argc, char *argv[])
Q_EMIT lockDialogModel->showMultiUsersBlockWindow(cmdArgs.isMultiUserBlock);
}
+ if (cmdArgs.isSwitchUser) {
+ Q_EMIT lockDialogModel->showSwitchUserLock();
+ }
+
KillFocusOfKydroid();
return app.exec();
diff --git a/src/widgets/authdialog.cpp b/src/widgets/authdialog.cpp
index e0e9eba..e16f711 100644
--- a/src/widgets/authdialog.cpp
+++ b/src/widgets/authdialog.cpp
@@ -769,17 +769,13 @@ void AuthDialog::onPamShowMessage(QString strMsg, int nType)
}
return;
} else if (strMsg.indexOf("No password received, please input password") != -1) {
- m_messageLabel->setText(tr("Password cannot be empty"));
- m_messageLabel->setToolTip(tr("Password cannot be empty"));
+ m_messageLabel->setTipText(tr("Password cannot be empty"));
} else {
QString strText = strMsg;
if (!m_preStrMessage.isEmpty() && m_preStrMessageType != nType && m_preStrMessageType != -1) {
strText = m_preStrMessage + "," + strText;
}
- QFontMetrics font(m_messageLabel->font());
- QString strDisplay = font.elidedText(strMsg, Qt::ElideRight, m_messageLabel->width() - 8);
- m_messageLabel->setText(strDisplay);
- m_messageLabel->setToolTip(strMsg);
+ m_messageLabel->setTipText(strText);
}
m_bHasUnacknowledgedMsg = true;
}
@@ -1835,7 +1831,6 @@ void AuthDialog::setUkeyTypeTip(QString text)
// QFontMetrics font(m_ukeyMessageLabel->font());
// QString textTip = font.elidedText(textTip, Qt::ElideRight, m_messageLabel->width()-8);
m_ukeyMessageLabel->setTipText(textTip);
- m_ukeyMessageLabel->setToolTip(text);
m_ukeyMessageLabel->show();
} else {
m_ukeyMessageLabel->hide();
diff --git a/src/widgets/fullbackgroundwidget.cpp b/src/widgets/fullbackgroundwidget.cpp
index c71510e..7a5d7b2 100644
--- a/src/widgets/fullbackgroundwidget.cpp
+++ b/src/widgets/fullbackgroundwidget.cpp
@@ -200,6 +200,7 @@ void FullBackgroundWidget::initConnections()
&LockDialogModel::showMultiUsersBlockWindow,
this,
&FullBackgroundWidget::onShowMultiUsersBlockWindows);
+ connect(m_modelLockDialog, &LockDialogModel::showSwitchUserLock, this, &FullBackgroundWidget::onShowSwitchUserLock);
}
void FullBackgroundWidget::setLockState()
@@ -315,6 +316,24 @@ void FullBackgroundWidget::onShowLock(bool isStartup)
m_lockWidget->show();
}
+void FullBackgroundWidget::onShowSwitchUserLock()
+{
+ if (m_isSessionTools) {
+ m_isSessionTools = false;
+ if (m_lockWidget && !m_lockWidget->isHidden())
+ m_lockWidget->exitSubWidget();
+ }
+
+ screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
+ show();
+ Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName());
+ Q_EMIT m_modelLockDialog->lockStateChanged(true);
+ if (m_lockWidget && !m_lockWidget->isHidden()) {
+ m_lockWidget->show();
+ m_lockWidget->onShowUserListWidget(true);
+ }
+}
+
void FullBackgroundWidget::onShowSessionTools()
{
screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
diff --git a/src/widgets/fullbackgroundwidget.h b/src/widgets/fullbackgroundwidget.h
index fdc17f5..cf33a73 100644
--- a/src/widgets/fullbackgroundwidget.h
+++ b/src/widgets/fullbackgroundwidget.h
@@ -83,6 +83,7 @@ public Q_SLOTS:
void onShowSessionTools();
void onShowAppBlockWindow(int actionType);
void onShowMultiUsersBlockWindows(int actionType);
+ void onShowSwitchUserLock();
void onCurUserChanged(const QString &strUserName);
void onUpdateUserBackground(const QString &strUserName);
diff --git a/src/widgets/klabel.cpp b/src/widgets/klabel.cpp
index 6d30802..5cd3c0a 100644
--- a/src/widgets/klabel.cpp
+++ b/src/widgets/klabel.cpp
@@ -89,6 +89,7 @@ void KLabel::paintEvent(QPaintEvent *event)
QLabel::setText(m_strText);
} else if (strEText != m_strText) {
QLabel::setText(strEText);
+ QLabel::setToolTip(m_strText);
}
QLabel::paintEvent(event);
}
diff --git a/src/widgets/lockwidget.cpp b/src/widgets/lockwidget.cpp
index 9d8791e..53ab590 100644
--- a/src/widgets/lockwidget.cpp
+++ b/src/widgets/lockwidget.cpp
@@ -868,12 +868,11 @@ void LockWidget::onShowBatteryWidget()
}
}
-void LockWidget::onShowUserListWidget()
+void LockWidget::onShowUserListWidget(bool show)
{
initUserWidget();
if (m_userListWidget && m_userListWidget->isHidden()) {
m_userListWidget->show();
- // m_userListWidget->setFocus();
m_userButton->setClickedStatus(CLICKED);
if (m_networkWidget && m_networkWidget->isVisible()) {
m_networkWidget->hide();
@@ -887,6 +886,11 @@ void LockWidget::onShowUserListWidget()
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
}
+ m_userListWidget->onUpdateListInfo();
+ m_userListWidget->setFocus();
+ } else if (show && m_userListWidget && m_userListWidget->isVisible()) {
+ m_userListWidget->onUpdateListInfo();
+ m_userListWidget->setFocus();
} else {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
diff --git a/src/widgets/lockwidget.h b/src/widgets/lockwidget.h
index 4f4e57e..7c07485 100644
--- a/src/widgets/lockwidget.h
+++ b/src/widgets/lockwidget.h
@@ -69,6 +69,8 @@ public:
void onSwitchuserClicked();
+ void onShowUserListWidget(bool show = false);
+
protected:
void paintEvent(QPaintEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
@@ -142,7 +144,6 @@ private Q_SLOTS:
void onShowSessionListWidget();
void onShowBatteryWidget();
- void onShowUserListWidget();
void onShowNetworkWidget();
void onShowVirtualKeyboard();
void onShowVirtualKeyboard(bool tabletMode);

View File

@ -34,3 +34,4 @@
0034-86.patch
0035-87-fixbug.patch
0036-88.patch
0037-89.patch