diff -Nru ukui-screensaver-4.10.0.0/debian/patches/0071-sync-codes-from-v11-2503.patch ukui-screensaver-4.10.0.0/debian/patches/0071-sync-codes-from-v11-2503.patch --- ukui-screensaver-4.10.0.0/debian/patches/0071-sync-codes-from-v11-2503.patch 1970-01-01 08:00:00.000000000 +0800 +++ ukui-screensaver-4.10.0.0/debian/patches/0071-sync-codes-from-v11-2503.patch 2024-11-15 10:53:30.000000000 +0800 @@ -0,0 +1,704 @@ +From: liudun <liudun@kylinos.cn> +Date: Tue, 21 Jan 2025 13:51:08 +0800 +Subject: sync codes from v11-2503 + +--- + src/dbusifs/kglobalaccelhelper.cpp | 13 +++++--- + src/lock-backend/dbusupperinterface.cpp | 27 +++++++++------- + src/lock-backend/dbusupperinterface.h | 2 +- + src/lock-dialog/backenddbushelper.cpp | 3 +- + src/lock-dialog/backenddbushelper.h | 2 +- + src/lock-dialog/lockdialogmodel.h | 2 +- + src/lock-dialog/main.cpp | 23 ++++++++------ + src/screensaver/CMakeLists.txt | 6 ++-- + src/screensaver/main.cpp | 3 ++ + src/screensaver/screensaver.cpp | 50 ++++++++++++++++-------------- + src/widgets/blockwidget.cpp | 55 ++++++++++++++++++++++++++++++--- + src/widgets/blockwidget.h | 1 + + src/widgets/fullbackgroundwidget.cpp | 20 ++++++------ + src/widgets/lockwidget.cpp | 6 ++++ + src/widgets/powerlistwidget.cpp | 27 +++++++++++----- + src/widgets/powerlistwidget.h | 6 ++-- + 16 files changed, 168 insertions(+), 78 deletions(-) + +diff --git a/src/dbusifs/kglobalaccelhelper.cpp b/src/dbusifs/kglobalaccelhelper.cpp +index 1094cc6..070b404 100644 +--- a/src/dbusifs/kglobalaccelhelper.cpp ++++ b/src/dbusifs/kglobalaccelhelper.cpp +@@ -36,10 +36,15 @@ KglobalAccelHelper::~KglobalAccelHelper() {} + + bool KglobalAccelHelper::blockShortcut(bool val) + { +- QDBusMessage result = m_kglobalInterface->call("blockGlobalShortcuts", val); +- if (result.type() == QDBusMessage::ErrorMessage) { +- qWarning() << "blockShortcut error:" << result.errorMessage(); ++ qDebug()<<"m_kglobalInterface isvalid:"<<m_kglobalInterface->isValid(); ++ if (m_kglobalInterface->isValid()) { ++ QDBusMessage result = m_kglobalInterface->call("blockGlobalShortcuts", val); ++ if (result.type() == QDBusMessage::ErrorMessage) { ++ qWarning() << "blockShortcut error:" << result.errorMessage(); ++ return false; ++ } ++ return true; ++ } else { + return false; + } +- return true; + } +diff --git a/src/lock-backend/dbusupperinterface.cpp b/src/lock-backend/dbusupperinterface.cpp +index 940d699..a7da4d2 100644 +--- a/src/lock-backend/dbusupperinterface.cpp ++++ b/src/lock-backend/dbusupperinterface.cpp +@@ -301,7 +301,7 @@ void DbusUpperInterface::SessionTools() + message = QDBusMessage::createSignal(SS_DBUS_PATH, SS_DBUS_INTERFACE, "SecondRunParam"); + message << "CmdSessionTools"; + QDBusConnection::sessionBus().send(message); +- emitLockState(true); ++ emitLockState(false, true); + return; + } + m_bLockState = false; +@@ -309,7 +309,7 @@ void DbusUpperInterface::SessionTools() + qDebug() << cmd; + + m_procLockDialog.start(cmd); +- emitLockState(true); ++ emitLockState(false, true); + } + + void DbusUpperInterface::AppBlockWindow(QString actionType) +@@ -340,7 +340,7 @@ void DbusUpperInterface::AppBlockWindow(QString actionType) + else + return; + QDBusConnection::sessionBus().send(message); +- emitLockState(false); ++ emitLockState(false, true); + return; + } + if (actionType != "Restart" && actionType != "Shutdown" && actionType != "Suspend" && actionType != "Hibernate" +@@ -352,7 +352,7 @@ void DbusUpperInterface::AppBlockWindow(QString actionType) + qDebug() << cmd; + + m_procLockDialog.start(cmd); +- emitLockState(false); ++ emitLockState(false, true); + } + + void DbusUpperInterface::MultiUserBlockWindow(QString actionType) +@@ -367,7 +367,7 @@ void DbusUpperInterface::MultiUserBlockWindow(QString actionType) + else + return; + QDBusConnection::sessionBus().send(message); +- emitLockState(false); ++ emitLockState(false, true); + return; + } + if (actionType != "Restart" && actionType != "Shutdown") +@@ -378,7 +378,7 @@ void DbusUpperInterface::MultiUserBlockWindow(QString actionType) + qDebug() << cmd; + + m_procLockDialog.start(cmd); +- emitLockState(false); ++ emitLockState(false, true); + } + + void DbusUpperInterface::Suspend() +@@ -619,23 +619,25 @@ bool DbusUpperInterface::checkScreenDialogRunning() + return isRunning; + } + +-void DbusUpperInterface::emitLockState(bool val) ++void DbusUpperInterface::emitLockState(bool val, bool isSessionTools) + { + qDebug() << "emitLockState state = " << val; + + if (val != m_bBlockShortcutState) { + m_kglobalHelper->blockShortcut(val); + m_bBlockShortcutState = val; +- qDebug() << " block all shortcut " << "blockShortcut states = " << m_bBlockShortcutState; ++ qDebug() << " block all shortcut " ++ << "blockShortcut states = " << m_bBlockShortcutState; + } + + QDBusMessage message; +- if (val) { ++ if (val && !isSessionTools) { + message = QDBusMessage::createSignal(SS_DBUS_PATH, SS_DBUS_INTERFACE, "lock"); +- } else { ++ QDBusConnection::sessionBus().send(message); ++ } else if (!val && !isSessionTools) { + message = QDBusMessage::createSignal(SS_DBUS_PATH, SS_DBUS_INTERFACE, "unlock"); ++ QDBusConnection::sessionBus().send(message); + } +- QDBusConnection::sessionBus().send(message); + } + + QString DbusUpperInterface::GetInformation(QString strJson) +@@ -2619,9 +2621,10 @@ bool DbusUpperInterface::lockStateChanged(const QJsonObject &objInfo) + { + int nRet = -1; + bool state = objInfo.value("Content").toBool(); ++ bool isSessionTools = objInfo.value("SessionTools").toBool(); + if (lockState != state) { + lockState = state; +- emitLockState(state); ++ emitLockState(state, isSessionTools); + } + return lockState; + } +diff --git a/src/lock-backend/dbusupperinterface.h b/src/lock-backend/dbusupperinterface.h +index 67302bb..2797db9 100644 +--- a/src/lock-backend/dbusupperinterface.h ++++ b/src/lock-backend/dbusupperinterface.h +@@ -68,7 +68,7 @@ public: + + public: + bool checkScreenDialogRunning(); +- void emitLockState(bool val); ++ void emitLockState(bool val, bool isSessionTools = false); + void LockStartupMode(); + /** + * @brief 获取黑色屏保状态(沿用) +diff --git a/src/lock-dialog/backenddbushelper.cpp b/src/lock-dialog/backenddbushelper.cpp +index 16c655b..eb6ff0e 100644 +--- a/src/lock-dialog/backenddbushelper.cpp ++++ b/src/lock-dialog/backenddbushelper.cpp +@@ -358,11 +358,12 @@ bool BackendDbusHelper::setCurrentSession(QString strSession) + return true; + } + +-bool BackendDbusHelper::lockStateChanged(bool isVisible) ++bool BackendDbusHelper::lockStateChanged(bool isVisible, bool isSessionTools) + { + QJsonObject jsonCmd; + jsonCmd["CmdId"] = LOCK_CMD_ID_LOCK_STATE_CHANGED; + jsonCmd["Content"] = isVisible; ++ jsonCmd["SessionTools"] = isSessionTools; + QDBusPendingReply<int> reply = SetInformation(QString(QJsonDocument(jsonCmd).toJson())); + if (reply.isError()) { + qWarning() << "lockStateChanged error: " << reply.error().message(); +diff --git a/src/lock-dialog/backenddbushelper.h b/src/lock-dialog/backenddbushelper.h +index 3bac8b9..426ab68 100644 +--- a/src/lock-dialog/backenddbushelper.h ++++ b/src/lock-dialog/backenddbushelper.h +@@ -148,7 +148,7 @@ public Q_SLOTS: + bool setCurrentUser(QString strUserName); + int switchToUser(QString strUserName); + bool setCurrentSession(QString strSession); +- bool lockStateChanged(bool isVisible); ++ bool lockStateChanged(bool isVisible, bool isSessionTools); + void startSession(); + + void pamAuthenticate(QString strUserName); +diff --git a/src/lock-dialog/lockdialogmodel.h b/src/lock-dialog/lockdialogmodel.h +index 72abc20..8db3e16 100644 +--- a/src/lock-dialog/lockdialogmodel.h ++++ b/src/lock-dialog/lockdialogmodel.h +@@ -512,7 +512,7 @@ Q_SIGNALS: + + void agreementInfoChanged(); + +- void lockStateChanged(bool isVisible); ++ void lockStateChanged(bool isVisible, bool isSessionTools); + + void lidstateChanged(const QString &lidstate); + +diff --git a/src/lock-dialog/main.cpp b/src/lock-dialog/main.cpp +index 167ab7f..68c6e78 100644 +--- a/src/lock-dialog/main.cpp ++++ b/src/lock-dialog/main.cpp +@@ -54,10 +54,6 @@ int main(int argc, char *argv[]) + initUkuiLog4qt("ukui-screensaver-dialog"); + // 重启或关机时不被session关掉 + qunsetenv("SESSION_MANAGER"); +- if (!isGreeterMode()) { +- // 试用模式不起锁屏 +- checkIslivecd(); +- } + + qputenv("QT_QPA_PLATFORMTHEME", QByteArray("ukui")); + +@@ -85,6 +81,20 @@ int main(int argc, char *argv[]) + } + QString id = QString("ukui-screensaver-dialog" + strDisplay); + QtSingleApplication app(id, argc, argv); ++ ++ LockDialogModel::CommandLineArgs cmdArgs; ++ if (!lockDialogModel->parseCmdArguments(app.arguments(), cmdArgs)) { ++ return 0; ++ } ++ ++ if (!isGreeterMode()) { ++ // 需要判断参数是否是session-tools ++ if (!cmdArgs.isSessionTools) { ++ // 试用模式不起锁屏 ++ checkIslivecd(); ++ } ++ } ++ + if (app.isRunning()) { + QString strArguments = QApplication::arguments().join(","); + app.sendMessage(strArguments); +@@ -125,11 +135,6 @@ int main(int argc, char *argv[]) + loopTemp->exec(); + } + +- LockDialogModel::CommandLineArgs cmdArgs; +- +- if (!lockDialogModel->parseCmdArguments(app.arguments(), cmdArgs)) { +- return 0; +- } + QObject::connect( + &app, SIGNAL(messageReceived(const QString &)), lockDialogModel, SLOT(onRunningMessage(const QString &))); + +diff --git a/src/screensaver/CMakeLists.txt b/src/screensaver/CMakeLists.txt +index ada55ef..ab4eabf 100644 +--- a/src/screensaver/CMakeLists.txt ++++ b/src/screensaver/CMakeLists.txt +@@ -64,7 +64,7 @@ set(screensaver_SRC + ../agreementinfo.cpp + ) + add_executable(ukui-screensaver-default ${screensaver_SRC}) +-target_link_libraries(ukui-screensaver-default Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) ++target_link_libraries(ukui-screensaver-default Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network ukui-log4qt Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) + + qt5_add_resources(screensaver_Plugin_SRC + default.qrc +@@ -112,7 +112,7 @@ set(screensaver_Plugin_SRC + ) + + add_library(screensaver-default SHARED ${screensaver_Plugin_SRC}) +-target_link_libraries(screensaver-default Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) ++target_link_libraries(screensaver-default Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network ukui-log4qt Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) + + qt5_add_resources(Screensaver_SRC + default.qrc +@@ -160,7 +160,7 @@ set(Screensaver_SRC + ) + + add_library(Screensaver STATIC ${Screensaver_SRC}) +-target_link_libraries(Screensaver Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) ++target_link_libraries(Screensaver Qt5::Core Qt5::Widgets Qt5::DBus Qt5::X11Extras Qt5::Xml Qt5::Network ukui-log4qt Qt5::Multimedia Qt5::MultimediaWidgets avformat avcodec ${EXTRA_LIBS}) + + install(TARGETS + ukui-screensaver-default +diff --git a/src/screensaver/main.cpp b/src/screensaver/main.cpp +index 4190ec5..6b04da1 100644 +--- a/src/screensaver/main.cpp ++++ b/src/screensaver/main.cpp +@@ -31,6 +31,7 @@ + #include <sys/prctl.h> + #include <signal.h> + #include <syslog.h> ++#include <ukui-log4qt.h> + + #define WORKING_DIRECTORY "/usr/share/ukui-screensaver" + bool bControlFlg = false;//是否控制面板窗口 +@@ -42,6 +43,8 @@ int main(int argc, char *argv[]) + QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + #endif + QApplication a(argc, argv); ++ ++ initUkuiLog4qt("ukui-screensaver-default"); + /* + prctl(PR_SET_PDEATHSIG, SIGHUP); + //加载翻译文件 +diff --git a/src/screensaver/screensaver.cpp b/src/screensaver/screensaver.cpp +index 71e2f0a..c0fce8c 100644 +--- a/src/screensaver/screensaver.cpp ++++ b/src/screensaver/screensaver.cpp +@@ -370,7 +370,7 @@ bool Screensaver::eventFilter(QObject *obj, QEvent *event) + } + } + #endif +- return false; ++ return QWidget::eventFilter(obj, event); + } + + void Screensaver::paintEvent(QPaintEvent *event) +@@ -539,23 +539,25 @@ void Screensaver::resizeEvent(QResizeEvent * /*event*/) + if (flag == 0) { + QList<QLabel *> labelList = this->findChildren<QLabel *>(); + for (int i = 0; i < labelList.count(); i++) { +- int fontsize = labelList.at(i)->font().pixelSize(); +- int fontpt = labelList.at(i)->font().pointSize(); +- if (fontsize > 0) { ++ if (labelList.at(i) != myPreviewLabel) { ++ int fontsize = labelList.at(i)->font().pixelSize(); ++ int fontpt = labelList.at(i)->font().pointSize(); ++ if (fontsize > 0) { + #ifdef USE_INTEL +- const QString SheetStyle = QString("font-size:%1px;").arg(fontsize / 3); ++ const QString SheetStyle = QString("font-size:%1px;").arg(fontsize / 3); + #else +- const QString SheetStyle = QString("font-size:%1px;").arg(fontsize / 4); ++ const QString SheetStyle = QString("font-size:%1px;").arg(fontsize / 4); + #endif +- labelList.at(i)->setStyleSheet(SheetStyle); +- } else { +- QFont font = labelList.at(i)->font(); ++ labelList.at(i)->setStyleSheet(SheetStyle); ++ } else { ++ QFont font = labelList.at(i)->font(); + #ifdef USE_INTEL +- font.setPointSize(fontpt / 3); ++ font.setPointSize(fontpt / 3); + #else +- font.setPointSize(fontpt / 4); ++ font.setPointSize(fontpt / 4); + #endif +- labelList.at(i)->setFont(font); ++ labelList.at(i)->setFont(font); ++ } + } + } + QList<QWidget *> childList = timeLayout->findChildren<QWidget *>(); +@@ -882,6 +884,17 @@ void Screensaver::initUI() + } + } + } ++ // V11上在窗口关闭时会收到一个leaveEvent(),控制面板关闭的时候new这个label,会导致控制面板关闭卡顿。 ++ if (!myPreviewLabel) { ++ myPreviewLabel = new QLabel(this); ++ myPreviewLabel->setFixedHeight(30); ++ myPreviewLabel->setMinimumWidth(54); ++ ++ // 设置样式 ++ myPreviewLabel->setStyleSheet("background-color: rgb(38,38,38); border-radius: 0px; color:white;"); ++ myPreviewLabel->setAlignment(Qt::AlignCenter); ++ myPreviewLabel->hide(); ++ } + #endif + } + +@@ -1136,16 +1149,6 @@ void Screensaver::setRandomText() + + void Screensaver::setPreviewText(bool bVisible) + { +- if (!myPreviewLabel) { +- myPreviewLabel = new QLabel(this); +- myPreviewLabel->setFixedHeight(30); +- myPreviewLabel->setMinimumWidth(54); +- +- // 设置样式 +- myPreviewLabel->setStyleSheet("background-color: rgb(38,38,38); border-radius: 0px; color:white;"); +- myPreviewLabel->setAlignment(Qt::AlignCenter); +- } +- + myPreviewLabel->setText(m_strPreViewTrans); + myPreviewLabel->adjustSize(); + +@@ -1312,7 +1315,8 @@ QPixmap Screensaver::loadFromFile(QString strPath) + void Screensaver::getVideoFormat(QString fileName) + { + char *ch; +- QByteArray ba = fileName.toLatin1(); ++ // 用toLiatin1()解析在有中文路径时回乱码 ++ QByteArray ba = fileName.toUtf8(); + ch = ba.data(); + + int ret; +diff --git a/src/widgets/blockwidget.cpp b/src/widgets/blockwidget.cpp +index 1a3afc0..a0755d3 100644 +--- a/src/widgets/blockwidget.cpp ++++ b/src/widgets/blockwidget.cpp +@@ -137,8 +137,27 @@ void BlockWidget::setTips(const QString tips) + m_tipLabel->show(); + m_listView->hide(); + m_tipLabel->setText(tips); +- m_cancelButton->setText(tr("Cancel")); +- m_confirmButton->setText(tr("Confrim")); ++ QString cancelStrEText = getElidedText( ++ m_cancelButton->font(), ++ m_cancelButton->width() - m_cancelButton->contentsMargins().left() - m_cancelButton->contentsMargins().right(), ++ tr("Cancel")); ++ if (cancelStrEText == tr("Cancel")) { ++ m_cancelButton->setText(tr("Cancel")); ++ } else if (cancelStrEText != tr("Cancel")) { ++ m_cancelButton->setText(cancelStrEText); ++ m_cancelButton->setToolTip(tr("Cancel")); ++ } ++ QString strEText = getElidedText( ++ m_confirmButton->font(), ++ m_confirmButton->width() - m_confirmButton->contentsMargins().left() ++ - m_confirmButton->contentsMargins().right(), ++ tr("Confrim")); ++ if (strEText == tr("Confrim")) { ++ m_confirmButton->setText(tr("Confrim")); ++ } else if (strEText != tr("Confrim")) { ++ m_confirmButton->setText(strEText); ++ m_confirmButton->setToolTip(tr("Confrim")); ++ } + } + + void BlockWidget::setMsgTips(int type) +@@ -236,8 +255,27 @@ void BlockWidget::setWarning(QStringList list, int type) + "QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 24px;}"); + sysFont.setPointSize((16 + m_curFontSize) * m_ptToPx); + m_cancelButton->setFont(sysFont); +- m_cancelButton->setText(tr("Cancel")); +- m_confirmButton->setText(tr("Confrim")); ++ QString cancelStrEText = getElidedText( ++ m_cancelButton->font(), ++ m_cancelButton->width() - m_cancelButton->contentsMargins().left() - m_cancelButton->contentsMargins().right(), ++ tr("Cancel")); ++ if (cancelStrEText == tr("Cancel")) { ++ m_cancelButton->setText(tr("Cancel")); ++ } else if (cancelStrEText != tr("Cancel")) { ++ m_cancelButton->setText(cancelStrEText); ++ m_cancelButton->setToolTip(tr("Cancel")); ++ } ++ QString strEText = getElidedText( ++ m_confirmButton->font(), ++ m_confirmButton->width() - m_confirmButton->contentsMargins().left() ++ - m_confirmButton->contentsMargins().right(), ++ tr("Confrim")); ++ if (strEText == tr("Confrim")) { ++ m_confirmButton->setText(tr("Confrim")); ++ } else if (strEText != tr("Confrim")) { ++ m_confirmButton->setText(strEText); ++ m_confirmButton->setToolTip(tr("Confrim")); ++ } + } + + QString BlockWidget::getHibited_tr_lowcase(int type) +@@ -255,3 +293,12 @@ QString BlockWidget::getHibited_tr_lowcase(int type) + return ""; + } + ++QString BlockWidget::getElidedText(QFont font, int width, QString strInfo) ++{ ++ QFontMetrics fontMetrics(font); ++ // 如果当前字体下,字符串长度大于指定宽度 ++ if (fontMetrics.width(strInfo) > width) { ++ strInfo = QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width); ++ } ++ return strInfo; ++} +diff --git a/src/widgets/blockwidget.h b/src/widgets/blockwidget.h +index 748758a..fdd139b 100644 +--- a/src/widgets/blockwidget.h ++++ b/src/widgets/blockwidget.h +@@ -48,6 +48,7 @@ public: + + private: + void initUi(); ++ QString getElidedText(QFont font, int width, QString strInfo); + + private Q_SLOTS: + void onFontSizeChanged(double fontSize); +diff --git a/src/widgets/fullbackgroundwidget.cpp b/src/widgets/fullbackgroundwidget.cpp +index 3c313f2..2e3c28e 100644 +--- a/src/widgets/fullbackgroundwidget.cpp ++++ b/src/widgets/fullbackgroundwidget.cpp +@@ -296,7 +296,7 @@ void FullBackgroundWidget::onSecondRunParam(const QString &str) + void FullBackgroundWidget::onShowBlankScreensaver(int nDelay, bool isHasLock) + { + qDebug() << "onShowBlankScreensaver:" << nDelay << "," << isHasLock; +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, false); + + if (isHasLock) { + screenStatus = (ScreenStatus)(screenStatus | SCREEN_SAVER | SCREEN_LOCK); +@@ -347,7 +347,7 @@ void FullBackgroundWidget::onShowLock(bool isStartup) + m_isStartupMode = isStartup; + show(); + Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName()); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, false); + if (m_lockWidget && !m_lockWidget->isHidden()) + m_lockWidget->show(); + } +@@ -363,7 +363,7 @@ void FullBackgroundWidget::onShowSwitchUserLock() + screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK); + show(); + Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName()); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, false); + if (m_lockWidget && !m_lockWidget->isHidden()) { + m_lockWidget->show(); + m_lockWidget->onShowUserListWidget(true); +@@ -376,7 +376,7 @@ void FullBackgroundWidget::onShowSessionTools() + m_isSessionTools = true; + show(); + Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName()); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, true); + if (m_lockWidget && !m_lockWidget->isHidden()) + m_lockWidget->onShowPowerListWidget(true); + } +@@ -394,7 +394,7 @@ void FullBackgroundWidget::onShowAppBlockWindow(int actionType) + if (m_lockWidget && !m_lockWidget->isHidden()) + screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK); + Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName()); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, true); + m_isSessionTools = true; + if (m_lockWidget && !m_lockWidget->isHidden()) + m_lockWidget->onShowInhibitWarning(lockcheck, actionType, true); +@@ -408,7 +408,7 @@ void FullBackgroundWidget::onShowMultiUsersBlockWindows(int actionType) + show(); + if (m_lockWidget && !m_lockWidget->isHidden()) + Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName()); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, true); + if (m_lockWidget && !m_lockWidget->isHidden()) + m_lockWidget->onMulUsersLogined(actionType, true); + } +@@ -417,7 +417,7 @@ void FullBackgroundWidget::onShowSessionIdle() + { + onShowScreensaver(); + delayLockScreen(); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, true); + } + + void FullBackgroundWidget::onShowLockScreensaver() +@@ -459,7 +459,7 @@ void FullBackgroundWidget::onShowScreensaver() + } + } + show(); +- Q_EMIT m_modelLockDialog->lockStateChanged(true); ++ Q_EMIT m_modelLockDialog->lockStateChanged(true, false); + } + + void FullBackgroundWidget::onClearScreensaver() +@@ -468,6 +468,8 @@ void FullBackgroundWidget::onClearScreensaver() + + for (auto widget : widgetXScreensaverList) { + widget->close(); ++ delete widget; ++ widget = nullptr; + } + widgetXScreensaverList.clear(); + +@@ -514,7 +516,7 @@ void FullBackgroundWidget::onLockScreenTimeout() + void FullBackgroundWidget::onCloseScreensaver() + { + hide(); +- Q_EMIT m_modelLockDialog->lockStateChanged(false); ++ Q_EMIT m_modelLockDialog->lockStateChanged(false, false); + stopDelayLockScreen(); + screenStatus = UNDEFINED; + m_isBlank = false; +diff --git a/src/widgets/lockwidget.cpp b/src/widgets/lockwidget.cpp +index a1cabbf..769e240 100644 +--- a/src/widgets/lockwidget.cpp ++++ b/src/widgets/lockwidget.cpp +@@ -388,6 +388,7 @@ void LockWidget::initUserWidget() + m_userListWidget->updateWidgetSize(); + m_userListWidget->hide(); + connect(m_userListWidget, &UserListWidget::userSelected, m_modelLockDialog, [=](QString strUserName) { ++ exitSubWidget(false, false); + SwitchToUser(strUserName); + }); + connect(m_userListWidget, &UserListWidget::widgetSizeChanged, m_modelLockDialog, [=]() { +@@ -430,6 +431,11 @@ void LockWidget::initPowerWidget() + connect(m_powerListWidget, &PowerListWidget::suspendClicked, this, &LockWidget::onSuspendClicked); + connect(m_powerListWidget, &PowerListWidget::itemClicked, this, &LockWidget::onPowerItemClicked); + connect(m_powerListWidget, &PowerListWidget::switchuserClicked, this, &LockWidget::onSwitchuserClicked); ++ connect(m_powerListWidget, &PowerListWidget::powerWidgetClicked, this, [=] { ++ exitSubWidget(); ++ Q_EMIT sessionToolsExit(); ++ m_isSessionTools = false; ++ }); + // m_powerListWidget->clearFocus(); + } + +diff --git a/src/widgets/powerlistwidget.cpp b/src/widgets/powerlistwidget.cpp +index 4b35e4d..9e3cbde 100644 +--- a/src/widgets/powerlistwidget.cpp ++++ b/src/widgets/powerlistwidget.cpp +@@ -51,6 +51,24 @@ bool PowerListWidget::eventFilter(QObject *obj, QEvent *event) + return MyListWidget::eventFilter(obj, event); + } + ++void PowerListWidget::mouseReleaseEvent(QMouseEvent *event) ++{ ++ QPoint mousePos = event->pos(); ++ QList<PowerItemWidget*> itemList = this->findChildren<PowerItemWidget*>(); ++ for (PowerItemWidget* item : itemList) ++ { ++ if (item->geometry().contains(mousePos)) ++ { ++ // 如果是点击的功能按钮,不发信号,防止点击锁屏按钮时不进入锁屏 ++ return QListWidget::mouseReleaseEvent(event);; ++ } ++ } ++ // 只有点击空白处,才需要发送信号 ++ qDebug() << "Mouse press on list widget"; ++ Q_EMIT powerWidgetClicked(); ++ return QListWidget::mouseReleaseEvent(event); ++} ++ + void PowerListWidget::setPowerType(int type) + { + m_powerType = type; +@@ -78,9 +96,6 @@ void PowerListWidget::initUI() + "QScrollBar::add-line:vertical{width:0px;height:0px}" + "QScrollBar::sub-line:vertical{width:0px;height:0px}"); + // powerBtnList[0].func = &PowerListWidget::setSystemSuspend1(); +- +- m_curFontSize = m_modelLockDialog->getCurFontSize(); +- m_ptToPx = m_modelLockDialog->getPtToPx(); + } + + void PowerListWidget::initConnections() +@@ -186,7 +201,7 @@ void PowerListWidget::onUpdateListInfo() + QIcon::fromTheme(strIconTheme, QIcon(powerBtnList[i].m_strIcon)) + .pixmap(powerBtnList[i].m_icon_width, powerBtnList[i].m_icon_width), + "white")); +- btnWdg->setFontSize((16 + m_curFontSize) * m_ptToPx); ++ btnWdg->setFontSize((16 + m_modelLockDialog->getCurFontSize()) * m_modelLockDialog->getPtToPx()); + } + } + +@@ -309,7 +324,7 @@ void PowerListWidget::refreshTranslate() + } else if (powerBtnList[i].setFuncName == "PowerOff") { + powerBtnList[i].m_strName = tr("Shut Down"); + powerBtnList[i].m_strToolTip = tr("Close all apps, and then shut down your computer"); +- } else if (powerBtnList[i].setFuncName == "Log Out") { ++ } else if (powerBtnList[i].setFuncName == "Logout") { + powerBtnList[i].m_strName = tr("Log Out"); + powerBtnList[i].m_strToolTip + = tr("The current user logs out of the system, terminates the session, and returns to the login page"); +@@ -321,8 +336,6 @@ void PowerListWidget::refreshTranslate() + powerBtnList[i].m_strName = tr("UpgradeThenRestart"); + } else if (powerBtnList[i].setFuncName == "UpgradeThenShutdown") { + powerBtnList[i].m_strName = tr("UpgradeThenShutdown"); +- } else if (powerBtnList[i].setFuncName == "PowerOff") { +- powerBtnList[i].m_strName = tr("Logout"); + } + } + onUpdateListInfo(); +diff --git a/src/widgets/powerlistwidget.h b/src/widgets/powerlistwidget.h +index 5c272fb..df9cf3b 100644 +--- a/src/widgets/powerlistwidget.h ++++ b/src/widgets/powerlistwidget.h +@@ -211,6 +211,7 @@ public: + protected: + bool eventFilter(QObject *obj, QEvent *event); + void changeEvent(QEvent *event); ++ void mouseReleaseEvent(QMouseEvent *event) override; + + Q_SIGNALS: + void mulUsersLogined(int inhibitType, bool iscommand); +@@ -219,6 +220,8 @@ Q_SIGNALS: + void suspendClicked(); + void switchuserClicked(); + void sureShutDown(int inhibitType, bool iscommand); ++ void powerWidgetClicked(); /*发送电源管理鼠标点击信号,在eventfilter中点击listwidget的空白处, ++ 收不到鼠标点击事件,只有在mouseReleaseEvent中能过滤到*/ + + public Q_SLOTS: + void onUpdateListInfo(); +@@ -237,9 +240,6 @@ private: + bool m_canSwitchUser = true; + bool m_canLogout = true; + +- double m_curFontSize; +- double m_ptToPx = 1.0; +- + int m_powerType = SAVER; + int m_powerBtnNum = 0; + diff -Nru ukui-screensaver-4.10.0.0/debian/patches/series ukui-screensaver-4.10.0.0/debian/patches/series --- ukui-screensaver-4.10.0.0/debian/patches/series 2024-11-15 10:53:30.000000000 +0800 +++ ukui-screensaver-4.10.0.0/debian/patches/series 2024-11-15 10:53:30.000000000 +0800 @@ -68,3 +68,4 @@ 0068-105-blockGlobalShortcuts.patch 0069-106-fixbug.patch 0070-108.patch +0071-sync-codes-from-v11-2503.patch