From e281c25c186c75cb341ab77f1d91ea66a7e7a3a4 Mon Sep 17 00:00:00 2001 From: gongheng Date: Fri, 17 Oct 2025 17:08:05 +0800 Subject: [PATCH] Fix: [Awake] The mouse and keyboard set awake error. -- Logic code error. Not find the id of mouse or keyboard to set awake. Log: fix issue Bug: https://pms.uniontech.com/bug-view-336943.html --- .../src/DeviceManager/DeviceInput.cpp | 8 ++++---- .../src/Page/PageMultiInfo.cpp | 2 ++ .../src/Page/PageSingleInfo.cpp | 3 ++- .../src/WakeupControl/DBusWakeupInterface.cpp | 20 +++++++++++++------ .../src/WakeupControl/DBusWakeupInterface.h | 11 ++++++++-- .../src/Widget/TableWidget.cpp | 4 +++- .../src/Widget/TextBrowser.cpp | 2 +- 7 files changed, 35 insertions(+), 15 deletions(-) diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp b/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp index 7363d2fe7..d33dd261b 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp @@ -437,12 +437,12 @@ EnableDeviceStatus DeviceInput::setEnable(bool e) } if(e){ //鼠标启用时,唤醒能力打开 - DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), true, name()); + DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), true, name(), m_HardwareClass); m_wakeupChanged = true; } else if (m_wakeupChanged) { //鼠标禁用时,唤醒能力关闭 m_wakeupChanged = false; - DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), false, name()); + DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), false, name(), m_HardwareClass); } bool res = DBusEnableInterface::getInstance()->enable(m_HardwareClass, m_Name, m_SysPath, m_UniqueID, e, m_Driver); if (res) { @@ -464,7 +464,7 @@ bool DeviceInput::enable() bool DeviceInput::canWakeupMachine() { - if (m_WakeupID.isEmpty() || (m_HardwareClass == "keyboard" && "PS/2" == m_Interface)) + if (m_WakeupID.isEmpty()) return false; QFile file(wakeupPath()); if (!file.open(QIODevice::ReadOnly)) { @@ -488,7 +488,7 @@ bool DeviceInput::isWakeupMachine() // return false; // } // /proc/acpi/wakeup文件中状态未刷新,ps2设备通过dbus获取状态 - return DBusWakeupInterface::getInstance()->isInputWakeupMachine(m_SysPath, m_Name); + return DBusWakeupInterface::getInstance()->isInputWakeupMachine(m_SysPath, m_Name, m_HardwareClass, m_Interface); } else { if (info.contains("disabled")) diff --git a/deepin-devicemanager/src/Page/PageMultiInfo.cpp b/deepin-devicemanager/src/Page/PageMultiInfo.cpp index fc306dcea..3edeea669 100644 --- a/deepin-devicemanager/src/Page/PageMultiInfo.cpp +++ b/deepin-devicemanager/src/Page/PageMultiInfo.cpp @@ -281,6 +281,8 @@ void PageMultiInfo::getTableListInfo(const QList &lst, QListname().contains("PS/2")) { menuControl.append(input->getBusInfo()); menuControl.append(input->name()); + menuControl.append(input->hardwareClass()); + menuControl.append(input->getInterface()); } } diff --git a/deepin-devicemanager/src/Page/PageSingleInfo.cpp b/deepin-devicemanager/src/Page/PageSingleInfo.cpp index 536d4b761..c54402e75 100644 --- a/deepin-devicemanager/src/Page/PageSingleInfo.cpp +++ b/deepin-devicemanager/src/Page/PageSingleInfo.cpp @@ -359,7 +359,8 @@ void PageSingleInfo::slotWakeupMachine() DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(), input->sysPath(), mp_WakeupMachine->isChecked(), - input->getInterface()); + input->getInterface(), + input->hardwareClass()); } // 网卡的远程唤醒 diff --git a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp index cd3e24b8e..4d6c902ba 100644 --- a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp +++ b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp @@ -35,7 +35,11 @@ DBusWakeupInterface::DBusWakeupInterface() init(); } -bool DBusWakeupInterface::setWakeupMachine(const QString &unique_id, const QString &path, bool wakeup, const QString &name) +bool DBusWakeupInterface::setWakeupMachine(const QString &unique_id, + const QString &path, + bool wakeup, + const QString &name, + const QString &hardwareclass) { if (nullptr != mp_InputIface && mp_InputIface->isValid()) { QStringList pathList = path.split("/", QString::SkipEmptyParts); @@ -53,9 +57,9 @@ bool DBusWakeupInterface::setWakeupMachine(const QString &unique_id, const QStri QMap allSupportWakeupDevices; arg >> allSupportWakeupDevices; QStringList wakeupPathList = allSupportWakeupDevices.keys(); - + QString key = (hardwareclass == "mouse") ? "PS2M" : "PS2K"; for (QString path : wakeupPathList) { - if (path.contains("PS2")) { + if (path.contains(key)) { mp_InputIface->call("SetWakeupDevices", path, wakeup ? "enabled" : "disabled"); return true; } @@ -110,7 +114,10 @@ bool DBusWakeupInterface::canInputWakeupMachine(const QString &path) return file.open(QIODevice::ReadOnly); } -bool DBusWakeupInterface::isInputWakeupMachine(const QString &path, const QString &name) +bool DBusWakeupInterface::isInputWakeupMachine(const QString &path, + const QString &name, + const QString &hardwareClass, + const QString &interfaceType) { if (nullptr != mp_InputIface && mp_InputIface->isValid()) { QDBusInterface interface(INPUT_SERVICE_NAME, INPUT_WAKEUP_SERVICE_PATH, INPUT_WAKEUP_PROPERTIES_INTERFACE, QDBusConnection::systemBus()); @@ -122,9 +129,10 @@ bool DBusWakeupInterface::isInputWakeupMachine(const QString &path, const QStrin QMap allSupportWakeupDevices; arg >> allSupportWakeupDevices; - if (name.contains("PS/2")) { + if (interfaceType.contains("PS/2")) { + QString key = (hardwareClass == "mouse") ? "PS2M" : "PS2K"; for(QString path : allSupportWakeupDevices.keys()) { - if (path.contains("PS2")) { + if (path.contains(key)) { return allSupportWakeupDevices[path] == "enabled"; } } diff --git a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h index d9e8e9950..d475c8f53 100644 --- a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h +++ b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h @@ -40,7 +40,11 @@ class DBusWakeupInterface * @param wakeup 可唤醒 不可唤醒 * @return */ - bool setWakeupMachine(const QString &unique_id, const QString &path, bool wakeup, const QString &name); + bool setWakeupMachine(const QString &unique_id, + const QString &path, + bool wakeup, + const QString &name, + const QString &hardwareclass); /** * @brief canWakeupMachine 获取input是否支持唤醒 @@ -54,7 +58,10 @@ class DBusWakeupInterface * @param path 设备节点路径 * @return */ - bool isInputWakeupMachine(const QString &path, const QString &name); + bool isInputWakeupMachine(const QString &path, + const QString &name, + const QString &hardwareClass, + const QString &interfaceType); /** * @brief isNetworkWakeup 获取网卡是否支持远程唤醒 diff --git a/deepin-devicemanager/src/Widget/TableWidget.cpp b/deepin-devicemanager/src/Widget/TableWidget.cpp index 510c6ddd9..737d6ece3 100644 --- a/deepin-devicemanager/src/Widget/TableWidget.cpp +++ b/deepin-devicemanager/src/Widget/TableWidget.cpp @@ -284,7 +284,9 @@ void TableWidget::slotShowMenu(const QPoint &point) QString info = file.readAll(); if (wakeupPath.contains("/proc/acpi/wakeup")) { bool wakedUp = DBusWakeupInterface::getInstance()->isInputWakeupMachine(item->data(Qt::UserRole+4).toString(), - item->data(Qt::UserRole+5).toString()); + item->data(Qt::UserRole+5).toString(), + item->data(Qt::UserRole+6).toString(), + item->data(Qt::UserRole+7).toString()); isWakeup = wakedUp; } else { if(info.contains("disabled")) { diff --git a/deepin-devicemanager/src/Widget/TextBrowser.cpp b/deepin-devicemanager/src/Widget/TextBrowser.cpp index c63f47ba6..3e316eb73 100644 --- a/deepin-devicemanager/src/Widget/TextBrowser.cpp +++ b/deepin-devicemanager/src/Widget/TextBrowser.cpp @@ -111,7 +111,7 @@ void TextBrowser::setWakeupMachine(bool wakeup) // 键盘鼠标唤醒机器 DeviceInput *input = qobject_cast(mp_Info); if(input && !input->wakeupID().isEmpty() && !input->sysPath().isEmpty()){ - DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(),input->sysPath(),wakeup, input->name()); + DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(),input->sysPath(),wakeup, input->name(), input->hardwareClass()); } // 网卡的远程唤醒