318 lines
13 KiB
Diff
318 lines
13 KiB
Diff
From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
|
||
Date: Thu, 18 Jul 2024 02:12:14 +0000
|
||
Subject: =?utf-8?q?!92_fixbug_Merge_pull_request_!92_from_=E6=9D=A8?=
|
||
=?utf-8?q?=E6=95=8F/openkylin/nile?=
|
||
|
||
---
|
||
src/lock-backend/dbusupperinterface.cpp | 1 +
|
||
src/lock-dialog/backenddbushelper.cpp | 1 +
|
||
src/lock-dialog/lockdialogmodel.cpp | 39 ++++++++++++++++++++++++++++-----
|
||
src/lock-dialog/lockdialogmodel.h | 13 ++++++++++-
|
||
src/userinfo.cpp | 12 ++++++++++
|
||
src/userinfo.h | 6 +++++
|
||
src/widgets/authdialog.cpp | 3 +--
|
||
src/widgets/lockwidget.cpp | 4 ++--
|
||
src/widgets/powerlistwidget.cpp | 2 +-
|
||
src/widgets/userlistwidget.cpp | 3 +++
|
||
10 files changed, 73 insertions(+), 11 deletions(-)
|
||
|
||
diff --git a/src/lock-backend/dbusupperinterface.cpp b/src/lock-backend/dbusupperinterface.cpp
|
||
index 4515621..90dac4f 100644
|
||
--- a/src/lock-backend/dbusupperinterface.cpp
|
||
+++ b/src/lock-backend/dbusupperinterface.cpp
|
||
@@ -978,6 +978,7 @@ QJsonArray DbusUpperInterface::GenerateUserInfoList()
|
||
objUserInfo["backGround"] = userInfo->backGround();
|
||
objUserInfo["lang"] = userInfo->lang();
|
||
objUserInfo["headImg"] = userInfo->headImage();
|
||
+ objUserInfo["systemAccount"] = userInfo->isSystemAccount();
|
||
KylinUserDatePtr ptr = KYLINUSERDATAMNG::getInstance()->GetUserPtr(userInfo->name());
|
||
if (nullptr != ptr) {
|
||
if (!ptr->backgroundPath().isEmpty()) {
|
||
diff --git a/src/lock-dialog/backenddbushelper.cpp b/src/lock-dialog/backenddbushelper.cpp
|
||
index fbbb703..16c655b 100644
|
||
--- a/src/lock-dialog/backenddbushelper.cpp
|
||
+++ b/src/lock-dialog/backenddbushelper.cpp
|
||
@@ -1148,6 +1148,7 @@ QList<UserInfoPtr> BackendDbusHelper::ParseUsersInfo(const QJsonObject &objRes)
|
||
userPtr->updateLang(objUser.value("lang").toString());
|
||
userPtr->updateGreeterBackground(objUser.value("greeterBackGround").toString());
|
||
userPtr->updateBackgroundColor(objUser.value("color").toString());
|
||
+ userPtr->updateSystemAccount(objUser.value("systemAccount").toBool(false));
|
||
listUser.append(userPtr);
|
||
}
|
||
Q_EMIT usersInfoChanged(listUser);
|
||
diff --git a/src/lock-dialog/lockdialogmodel.cpp b/src/lock-dialog/lockdialogmodel.cpp
|
||
index 5992118..c7d84d7 100644
|
||
--- a/src/lock-dialog/lockdialogmodel.cpp
|
||
+++ b/src/lock-dialog/lockdialogmodel.cpp
|
||
@@ -26,6 +26,7 @@
|
||
#include <QScreen>
|
||
#include "utils.h"
|
||
#include "definetypes.h"
|
||
+#include <pwd.h>
|
||
|
||
LockDialogModel::LockDialogModel(QObject *parent)
|
||
: QObject(parent), m_isUseWayland(QGuiApplication::platformName().startsWith("wayland", Qt::CaseInsensitive))
|
||
@@ -34,7 +35,7 @@ LockDialogModel::LockDialogModel(QObject *parent)
|
||
|
||
bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdArgs)
|
||
{
|
||
- //命令行参数解析
|
||
+ // 命令行参数解析
|
||
QCommandLineParser parser;
|
||
parser.setApplicationDescription(QGuiApplication::translate("main", "Dialog for the ukui ScreenSaver."));
|
||
parser.addHelpOption();
|
||
@@ -102,8 +103,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(switchuserOption)
|
||
- && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption)) {
|
||
+ && !parser.isSet(sessiontoolsOption) && !parser.isSet(switchuserOption) && !parser.isSet(appBlockOption)
|
||
+ && !parser.isSet(multiUsersOption)) {
|
||
return false;
|
||
}
|
||
}
|
||
@@ -224,6 +225,20 @@ UserInfoPtr LockDialogModel::findUserByName(const QString &strName)
|
||
return user;
|
||
}
|
||
}
|
||
+ struct passwd *userInfo = getpwnam(strName.toLatin1().data());
|
||
+ if (userInfo) {
|
||
+ UserInfoPtr userPtr = std::make_shared<UserInfo>();
|
||
+ userPtr->updateUid(userInfo->pw_uid);
|
||
+ userPtr->updateName(strName);
|
||
+ if (userInfo->pw_gecos && userInfo->pw_gecos[0] != '\0') {
|
||
+ QString geoces = QString(userInfo->pw_gecos);
|
||
+ QStringList list = geoces.split(QLatin1Char(','));
|
||
+ if (list.size() > 0) {
|
||
+ userPtr->updateFullName(list[0]);
|
||
+ }
|
||
+ }
|
||
+ return userPtr;
|
||
+ }
|
||
return nullptr;
|
||
}
|
||
|
||
@@ -234,6 +249,20 @@ UserInfoPtr LockDialogModel::findUserById(const uid_t &id)
|
||
return user;
|
||
}
|
||
}
|
||
+ struct passwd *userInfo = getpwuid(id);
|
||
+ if (userInfo) {
|
||
+ UserInfoPtr userPtr = std::make_shared<UserInfo>();
|
||
+ userPtr->updateUid(userInfo->pw_uid);
|
||
+ userPtr->updateName(userInfo->pw_name);
|
||
+ if (userInfo->pw_gecos && userInfo->pw_gecos[0] != '\0') {
|
||
+ QString geoces = QString(userInfo->pw_gecos);
|
||
+ QStringList list = geoces.split(QLatin1Char(','));
|
||
+ if (list.size() > 0) {
|
||
+ userPtr->updateFullName(list[0]);
|
||
+ }
|
||
+ }
|
||
+ return userPtr;
|
||
+ }
|
||
return nullptr;
|
||
}
|
||
|
||
@@ -256,6 +285,7 @@ void LockDialogModel::updateUsersInfo(QList<UserInfoPtr> list)
|
||
changedUserInfo->updateBackground(userinfo->backGround());
|
||
changedUserInfo->updateGreeterBackground(userinfo->greeterBackGround());
|
||
changedUserInfo->updateBackgroundColor(userinfo->backGroundColor());
|
||
+ changedUserInfo->updateSystemAccount(userinfo->isSystemAccount());
|
||
}
|
||
} else {
|
||
m_listUsersInfo.append(userinfo);
|
||
@@ -410,7 +440,7 @@ QString LockDialogModel::getXScreensaverPath(const QString &theme)
|
||
QStringList strs = theme.split("-");
|
||
QString str = strs.at(strs.size() - 1);
|
||
QString filePath = QString("%1/%2").arg(XSCREENSAVER_DIRNAME, str);
|
||
- //除了判断gsetting值是否为空,还需要判断屏保文件是否存在,不存在就使用默认屏保。
|
||
+ // 除了判断gsetting值是否为空,还需要判断屏保文件是否存在,不存在就使用默认屏保。
|
||
if (QFile(filePath).exists())
|
||
return filePath;
|
||
else
|
||
@@ -514,7 +544,6 @@ void LockDialogModel::updateUsdMediaKeys(QString keys, QString value)
|
||
} else if (keys == KEY_WINDOW_SCREENSHOT) {
|
||
m_windowScreenshot = value;
|
||
}
|
||
-
|
||
}
|
||
|
||
void LockDialogModel::updateUsdMediaStateKeys(QString keys, int value)
|
||
diff --git a/src/lock-dialog/lockdialogmodel.h b/src/lock-dialog/lockdialogmodel.h
|
||
index 6c1d3ed..34d1067 100644
|
||
--- a/src/lock-dialog/lockdialogmodel.h
|
||
+++ b/src/lock-dialog/lockdialogmodel.h
|
||
@@ -124,6 +124,17 @@ public:
|
||
return m_listUsersInfo;
|
||
}
|
||
|
||
+ inline int normalUserCount()
|
||
+ {
|
||
+ int nCount = 0;
|
||
+ for (auto user : m_listUsersInfo) {
|
||
+ if (!user->isSystemAccount()) {
|
||
+ nCount++;
|
||
+ }
|
||
+ }
|
||
+ return nCount;
|
||
+ }
|
||
+
|
||
void updateSessionsInfo(QStringList list);
|
||
|
||
void updateScreensaverMode(QString value);
|
||
@@ -241,7 +252,7 @@ public:
|
||
return m_windowScreenshot;
|
||
}
|
||
|
||
- inline int getUsdMediaRfkillState()
|
||
+ inline int getUsdMediaRfkillState()
|
||
{
|
||
return m_rfkillState;
|
||
}
|
||
diff --git a/src/userinfo.cpp b/src/userinfo.cpp
|
||
index 266d1cf..7808f3a 100644
|
||
--- a/src/userinfo.cpp
|
||
+++ b/src/userinfo.cpp
|
||
@@ -32,6 +32,7 @@ UserInfo::UserInfo(QObject *parent)
|
||
, m_strLang(qgetenv("LANG"))
|
||
, m_strName("")
|
||
, m_strGreeterBackground("")
|
||
+ , m_isSystemAccount(false)
|
||
{
|
||
m_strHeadImage = getDefaultFace();
|
||
}
|
||
@@ -46,6 +47,7 @@ UserInfo::UserInfo(const UserInfo &userInfo)
|
||
, m_strLang(userInfo.m_strLang)
|
||
, m_strName(userInfo.m_strName)
|
||
, m_strGreeterBackground(userInfo.m_strGreeterBackground)
|
||
+ , m_isSystemAccount(userInfo.m_isSystemAccount)
|
||
{
|
||
}
|
||
|
||
@@ -104,6 +106,14 @@ void UserInfo::updateBackgroundColor(const QString &color)
|
||
m_strBackgroundColor = color;
|
||
}
|
||
|
||
+void UserInfo::updateSystemAccount(const bool &isSystemAccount)
|
||
+{
|
||
+ if (isSystemAccount == m_isSystemAccount) {
|
||
+ return;
|
||
+ }
|
||
+ m_isSystemAccount = isSystemAccount;
|
||
+}
|
||
+
|
||
QDebug operator<<(QDebug stream, const UserInfo &userInfo)
|
||
{
|
||
stream << "[" << userInfo.uid() << userInfo.name() << userInfo.fullName() << userInfo.headImage()
|
||
@@ -202,6 +212,8 @@ void LocalUserInfo::initData()
|
||
if (!strBackground.isEmpty() && QFile(strBackground).exists() && QFile(strBackground).size()) {
|
||
m_strBackground = strBackground;
|
||
}
|
||
+ } else if (key == "SystemAccount") {
|
||
+ m_isSystemAccount = value.toBool();
|
||
}
|
||
dbusArgs.endMapEntry();
|
||
}
|
||
diff --git a/src/userinfo.h b/src/userinfo.h
|
||
index fbf8cc3..3b09d67 100644
|
||
--- a/src/userinfo.h
|
||
+++ b/src/userinfo.h
|
||
@@ -69,6 +69,10 @@ public:
|
||
{
|
||
return m_strBackgroundColor;
|
||
}
|
||
+ inline bool isSystemAccount() const
|
||
+ {
|
||
+ return m_isSystemAccount;
|
||
+ }
|
||
|
||
virtual inline QString path() const
|
||
{
|
||
@@ -85,6 +89,7 @@ public:
|
||
void updateName(const QString &name);
|
||
void updateGreeterBackground(const QString &background);
|
||
void updateBackgroundColor(const QString &color);
|
||
+ void updateSystemAccount(const bool &isSystemAccount);
|
||
|
||
Q_SIGNALS:
|
||
void userPropChanged(const QString &userName);
|
||
@@ -99,6 +104,7 @@ protected:
|
||
QString m_strName; // 用户名
|
||
QString m_strGreeterBackground; // 登录界面背景
|
||
QString m_strBackgroundColor; // 桌面背景颜色
|
||
+ bool m_isSystemAccount; // 系统用户
|
||
};
|
||
|
||
typedef std::shared_ptr<UserInfo> UserInfoPtr;
|
||
diff --git a/src/widgets/authdialog.cpp b/src/widgets/authdialog.cpp
|
||
index 1611e73..8914379 100644
|
||
--- a/src/widgets/authdialog.cpp
|
||
+++ b/src/widgets/authdialog.cpp
|
||
@@ -277,7 +277,7 @@ void AuthDialog::updateAuthFontSize(double fontSize)
|
||
m_messageLabel->setFontSize((14 + fontSize) * m_ptToPx);
|
||
}
|
||
if (m_loginOpts) {
|
||
- m_loginOpts->updateLoginOptionFontSize(fontSize);
|
||
+ m_loginOpts->updateLoginOptionFontSize((16 + fontSize) * m_ptToPx);
|
||
}
|
||
if (m_labelQRCodeMsg) {
|
||
m_labelQRCodeMsg->setFontSize((14 + fontSize) * m_ptToPx);
|
||
@@ -1165,7 +1165,6 @@ void AuthDialog::showAuthenticated(bool successful /* = true*/)
|
||
switchLoginOptType(LOGINOPT_TYPE_PASSWORD);
|
||
if (!strMsgTip.isEmpty()) {
|
||
m_messageLabel->setText(strMsgTip);
|
||
- m_messageLabel->move(m_messageButton->x(), m_messageLabel->y());
|
||
}
|
||
} else {
|
||
m_bNeedRetry = true;
|
||
diff --git a/src/widgets/lockwidget.cpp b/src/widgets/lockwidget.cpp
|
||
index 97a4386..139a9bb 100644
|
||
--- a/src/widgets/lockwidget.cpp
|
||
+++ b/src/widgets/lockwidget.cpp
|
||
@@ -501,7 +501,7 @@ void LockWidget::initButtonWidget()
|
||
m_userButton->setIcon(QIcon(":/image/assets/switchuser.svg"));
|
||
buttonListWidget->addItem(m_btnItemUser);
|
||
connect(m_userButton, &StatusButton::clicked, this, [this]() { onShowUserListWidget(); });
|
||
- if (m_modelLockDialog->usersInfo().count() > 1 || m_modelLockDialog->findUserByName("*login")) {
|
||
+ if (m_modelLockDialog->normalUserCount() > 1 || m_modelLockDialog->findUserByName("*login")) {
|
||
buttonListWidget->setItemHidden(m_btnItemUser, false);
|
||
} else {
|
||
buttonListWidget->setItemHidden(m_btnItemUser, true);
|
||
@@ -733,7 +733,7 @@ void LockWidget::onPowerItemClicked(QListWidgetItem *item)
|
||
void LockWidget::onUsersInfoChanged()
|
||
{
|
||
if (buttonListWidget && m_btnItemUser) {
|
||
- if (m_modelLockDialog->usersInfo().count() > 1 || m_modelLockDialog->findUserByName("*login")) {
|
||
+ if (m_modelLockDialog->normalUserCount() > 1 || m_modelLockDialog->findUserByName("*login")) {
|
||
buttonListWidget->setItemHidden(m_btnItemUser, false);
|
||
} else {
|
||
buttonListWidget->setItemHidden(m_btnItemUser, true);
|
||
diff --git a/src/widgets/powerlistwidget.cpp b/src/widgets/powerlistwidget.cpp
|
||
index 03461f6..cb9af05 100644
|
||
--- a/src/widgets/powerlistwidget.cpp
|
||
+++ b/src/widgets/powerlistwidget.cpp
|
||
@@ -91,7 +91,7 @@ void PowerListWidget::updateBtnShowFlag()
|
||
m_powerBtnNum = 0;
|
||
for (int i = 0; i < sizeof(powerBtnList) / sizeof(powerBtnList[0]); i++) {
|
||
if (powerBtnList[i].canFuncName == QString("CanSwitchUser")) {
|
||
- powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->usersInfo().count() > 1);
|
||
+ powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->normalUserCount() > 1);
|
||
if (powerBtnList[i].m_show_flag)
|
||
m_powerBtnNum += 1;
|
||
}
|
||
diff --git a/src/widgets/userlistwidget.cpp b/src/widgets/userlistwidget.cpp
|
||
index 2a3ce87..954b709 100644
|
||
--- a/src/widgets/userlistwidget.cpp
|
||
+++ b/src/widgets/userlistwidget.cpp
|
||
@@ -54,6 +54,9 @@ void UserListWidget::onUpdateListInfo()
|
||
{
|
||
this->clear();
|
||
for (auto user : m_modelLockDialog->usersInfo()) {
|
||
+ if (user->isSystemAccount()) {
|
||
+ continue;
|
||
+ }
|
||
QListWidgetItem *userItem = new QListWidgetItem();
|
||
userItem->setSizeHint(QSize(420, 40));
|
||
insertItem(count(), userItem);
|