From 9977e2bc1e05c4161d214002157b8cb9f2c13e5c Mon Sep 17 00:00:00 2001 From: majiuping Date: Tue, 18 Aug 2026 11:35:04 +0800 Subject: [PATCH] fix(input): detect PS/2 wakeup by interface, not name only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Align wakeupPath() PS/2 check with isWakeupMachine() (name||interface). Fix PageMultiInfo PS/2 guard to also match the interface field. Extend setWakeupMachine() with interfaceType and fix caller args. 将 wakeupPath() 的 PS/2 判定与 isWakeupMachine() 对齐(name||interface)。 修正 PageMultiInfo 的 PS/2 条件,同时匹配接口字段。 为 setWakeupMachine() 增加 interfaceType 形参并修正调用点参数。 Log: 修复内置PS/2键盘因名称不含PS/2导致唤起电脑菜单缺失的问题 PMS: BUG-294489 Influence: PS/2键盘唤起电脑菜单可正常显示与切换,其他设备唤起行为不变 --- deepin-devicemanager/src/DeviceManager/DeviceInput.cpp | 6 +++--- deepin-devicemanager/src/Page/PageMultiInfo.cpp | 2 +- deepin-devicemanager/src/Page/PageSingleInfo.cpp | 5 +++-- .../src/WakeupControl/DBusWakeupInterface.cpp | 5 +++-- .../src/WakeupControl/DBusWakeupInterface.h | 6 +++++- deepin-devicemanager/src/Widget/TextBrowser.cpp | 2 +- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp b/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp index 11f3e221..532bd0d4 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(), m_HardwareClass); + DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), true, name(), m_HardwareClass, m_Interface); m_wakeupChanged = true; } else if (m_wakeupChanged) { //鼠标禁用时,唤醒能力关闭 m_wakeupChanged = false; - DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), false, name(), m_HardwareClass); + DBusWakeupInterface::getInstance()->setWakeupMachine(wakeupID(), sysPath(), false, name(), m_HardwareClass, m_Interface); } bool res = DBusEnableInterface::getInstance()->enable(m_HardwareClass, m_Name, m_SysPath, m_UniqueID, e, m_Driver); if (res) { @@ -505,7 +505,7 @@ QString DeviceInput::wakeupPath() return ""; } - if (m_Name.contains("PS/2")) { + if (m_Name.contains("PS/2") || m_Interface.contains("PS/2")) { return "/proc/acpi/wakeup"; } else { return QString("/sys") + m_SysPath.left(index) + QString("/power/wakeup"); diff --git a/deepin-devicemanager/src/Page/PageMultiInfo.cpp b/deepin-devicemanager/src/Page/PageMultiInfo.cpp index 04f03d58..7ae1d2b9 100644 --- a/deepin-devicemanager/src/Page/PageMultiInfo.cpp +++ b/deepin-devicemanager/src/Page/PageMultiInfo.cpp @@ -325,7 +325,7 @@ void PageMultiInfo::getTableListInfo(const QList &lst, QListcanWakeupMachine() ? "true" : "false"); menuControl.append(input->wakeupPath()); - if (info->name().contains("PS/2")) { + if (info->name().contains("PS/2") || input->getInterface().contains("PS/2")) { menuControl.append(input->getBusInfo()); menuControl.append(input->name()); menuControl.append(input->hardwareClass()); diff --git a/deepin-devicemanager/src/Page/PageSingleInfo.cpp b/deepin-devicemanager/src/Page/PageSingleInfo.cpp index c54402e7..54b8f0fb 100644 --- a/deepin-devicemanager/src/Page/PageSingleInfo.cpp +++ b/deepin-devicemanager/src/Page/PageSingleInfo.cpp @@ -359,8 +359,9 @@ void PageSingleInfo::slotWakeupMachine() DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(), input->sysPath(), mp_WakeupMachine->isChecked(), - input->getInterface(), - input->hardwareClass()); + input->name(), + input->hardwareClass(), + input->getInterface()); } // 网卡的远程唤醒 diff --git a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp index 4d6c902b..93b1d356 100644 --- a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp +++ b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.cpp @@ -39,14 +39,15 @@ bool DBusWakeupInterface::setWakeupMachine(const QString &unique_id, const QString &path, bool wakeup, const QString &name, - const QString &hardwareclass) + const QString &hardwareclass, + const QString &interfaceType) { if (nullptr != mp_InputIface && mp_InputIface->isValid()) { QStringList pathList = path.split("/", QString::SkipEmptyParts); if (pathList.size() < 3) return false; - if (name.contains("PS/2")) { + if (name.contains("PS/2") || interfaceType.contains("PS/2")) { // ps2设备无法通过/sys/devices/platform/i8042/serio1/power/wakeup控制,只能通过acpi的接口进行控制 QDBusInterface interface(INPUT_SERVICE_NAME, INPUT_WAKEUP_SERVICE_PATH, INPUT_WAKEUP_PROPERTIES_INTERFACE, QDBusConnection::systemBus()); if (interface.isValid()) { diff --git a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h index d475c8f5..363b524c 100644 --- a/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h +++ b/deepin-devicemanager/src/WakeupControl/DBusWakeupInterface.h @@ -38,13 +38,17 @@ class DBusWakeupInterface * @param unique_id 设备的唯一标识 * @param path 设备节点路径 * @param wakeup 可唤醒 不可唤醒 + * @param name 设备名称 + * @param hardwareclass 硬件类型(mouse/keyboard) + * @param interfaceType 接口类型(PS/2/USB/Bluetooth等) * @return */ bool setWakeupMachine(const QString &unique_id, const QString &path, bool wakeup, const QString &name, - const QString &hardwareclass); + const QString &hardwareclass, + const QString &interfaceType); /** * @brief canWakeupMachine 获取input是否支持唤醒 diff --git a/deepin-devicemanager/src/Widget/TextBrowser.cpp b/deepin-devicemanager/src/Widget/TextBrowser.cpp index 3e316eb7..8278f426 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(), input->hardwareClass()); + DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(),input->sysPath(),wakeup, input->name(), input->hardwareClass(), input->getInterface()); } // 网卡的远程唤醒