Merge pull request !92 from 杨敏/openkylin/nile
This commit is contained in:
杨敏 2024-07-18 02:12:14 +00:00 committed by openkylin-cibot
parent d423598d65
commit 8fe8a359a1
3 changed files with 327 additions and 0 deletions

9
debian/changelog vendored
View File

@ -1,3 +1,12 @@
ukui-screensaver (4.10.0.0-ok28~0718) nile; urgency=medium
* BUG号#IA41FW 切换用户出现其他用户选项
* 需求号:无
* 其他改动说明:登录成功有提示时,提示内容位置错误;登录选项字体大小偏小
* 其他改动影响域:无
-- Yang Min <yangmin@kylinos.cn> Thu, 18 Jul 2024 09:56:51 +0800
ukui-screensaver (4.10.0.0-ok27~0708) nile; urgency=medium
* BUG号#240144 睡眠唤醒会先进入桌面闪一下后退回到登录界面

317
debian/patches/0050-92-fixbug.patch vendored Normal file
View File

@ -0,0 +1,317 @@
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);

View File

@ -47,3 +47,4 @@
0047-Deleted-translation-using-Weblate-Kyrgyz.patch
0048-Added-translation-using-Weblate-Kyrgyz.patch
0049-Translated-using-Weblate-Kyrgyz.patch
0050-92-fixbug.patch