From d4cd8dcf477e1ef5aac7f95f8b4c777a8a12989c Mon Sep 17 00:00:00 2001 From: dutianxue Date: Thu, 5 Feb 2026 13:41:58 +0800 Subject: [PATCH] fix: Resolve the issue where the shortcut key for selected desktop files does not work Optimizing: Missing the dde-am parameter Log: When detecting a desktop file during command execution, automatically prepend the dde-am parameter to the command pms: BUG-337781 --- .../operation/keyboardcontroller.cpp | 31 ++++++++++++++----- .../operation/keyboardcontroller.h | 3 ++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/plugin-keyboard/operation/keyboardcontroller.cpp b/src/plugin-keyboard/operation/keyboardcontroller.cpp index 3d4dde98c2..e7ca7cfc2f 100644 --- a/src/plugin-keyboard/operation/keyboardcontroller.cpp +++ b/src/plugin-keyboard/operation/keyboardcontroller.cpp @@ -7,6 +7,7 @@ #include "layoutsmodel.h" #include +#include namespace dccV25 { DCC_FACTORY_CLASS(KeyboardController) @@ -228,14 +229,28 @@ QStringList KeyboardController::formatKeys(const QString &shortcuts) return ShortcutModel::formatKeys(shortcuts); } +QString KeyboardController::checkDesktopCmd(const QString &cmd) +{ + // Check and process desktop commands, add dde-am prefix if desktop file exists + if (!cmd.isEmpty() && cmd.startsWith("/") && cmd.endsWith(".desktop")) { + QFileInfo fileInfo(cmd); + if (fileInfo.exists() && fileInfo.isFile()) { + return "dde-am " + cmd; + } + } + return cmd; +} + void KeyboardController::addCustomShortcut(const QString &name, const QString &cmd, const QString &accels) { - // 添加时清理冲突快捷键 + // Clear conflicting shortcuts when adding if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); } - m_worker->addCustomShortcut(name, cmd, accels); + // Check and process desktop commands, add dde-am prefix if needed + QString newCmd = checkDesktopCmd(cmd); + m_worker->addCustomShortcut(name, newCmd, accels); } void KeyboardController::modifyCustomShortcut(const QString &id, const QString &name, const QString &cmd, const QString &accels) @@ -246,13 +261,13 @@ void KeyboardController::modifyCustomShortcut(const QString &id, const QString & return; } - // 修改时清理冲突快捷键 + // Clear conflicting shortcuts when modifying if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); } shortcut->name = name; - shortcut->command = cmd; + shortcut->command = checkDesktopCmd(cmd); shortcut->accels = accels; m_worker->modifyCustomShortcut(shortcut); @@ -278,7 +293,7 @@ void KeyboardController::modifyShortcut(const QString &id, const QString &accels } if (shortcut->accels != accels) { - // 修改时清理冲突快捷键 + // Clear conflicting shortcuts when modifying if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); shortcut->accels = accels; @@ -353,7 +368,7 @@ bool KeyboardController::isCustomShortcutNameExists(const QString &name, const Q const auto customInfos = m_shortcutModel->customInfo(); for (const auto *info : customInfos) { - // 排除当前编辑的快捷键(如果是修改模式) + // Exclude the current editing shortcut (if in edit mode) if (!excludeId.isEmpty() && info->id == excludeId) continue; @@ -379,12 +394,12 @@ bool KeyboardController::isShortcutNameExists(const QString &name, const QString return false; } - // 优先检查系统快捷键冲突 + // Check system shortcut conflicts first if (isSystemShortcutNameExists(name)) { return true; } - // 然后检查自定义快捷键冲突 + // Then check custom shortcut conflicts return isCustomShortcutNameExists(name, excludeId); } diff --git a/src/plugin-keyboard/operation/keyboardcontroller.h b/src/plugin-keyboard/operation/keyboardcontroller.h index 744b297f05..61d3fd25ef 100644 --- a/src/plugin-keyboard/operation/keyboardcontroller.h +++ b/src/plugin-keyboard/operation/keyboardcontroller.h @@ -99,6 +99,9 @@ public Q_SLOTS: void keyboardEnabledChanged(); private: + // 检查并处理desktop命令,如果desktop文件存在则添加dde-am前缀 + QString checkDesktopCmd(const QString &cmd); + uint m_repeatInterval; uint m_repeatDelay; bool m_numLock;