Skip to content

fix: 修复 Wayland 下重新开启全局快捷键后失效 - #460

Open
molang163 wants to merge 1 commit into
SPlayer-Dev:devfrom
molang163:fix/niri-global-shortcuts
Open

molang163 wants to merge 1 commit into
SPlayer-Dev:devfrom
molang163:fix/niri-global-shortcuts

Conversation

@molang163

Copy link
Copy Markdown

改动类型

  • 新功能(feat)
  • 缺陷修复(fix)
  • 重构 / 优化(不改变对外行为)
  • 文档(docs)
  • 其他

是否包含破坏性变更

  • 是
  • 否

改动说明

在支持全局快捷键的 Wayland 环境中,先关闭 SPlayer 的全局快捷键,再重新开启,快捷键就会失效,重启播放器后才能恢复。

问题出在 Electron 44 重新注册快捷键时对 portal 会话的处理:返回的会话路径与预期不匹配,导致注册失败。这次将 Electron 升级到稳定版 45.2.3,使用 Chromium 156 的上游会话处理修复。用同一份应用 app.asar 对照测试,44 可以复现故障,45 可以直接恢复快捷键。

改动是 Electron 版本、对应锁文件,以及两篇中英文 Wayland 说明。文档补充了 niri 所需的版本和授权服务,也说明了如何检查正在运行的版本、完成授权并验证按键。

因为涉及 Electron 大版本升级,也按官方变更说明检查了 preload、窗口和原生模块的现有用法,没有需要配套迁移的调用。Windows/macOS 的验证范围见下表。

还有一项已知问题:重复开关会留下没有绑定的空 portal 会话,44 和 45 都存在,退出播放器后会全部清理。它有另外的上游修复,目前还没进入这里使用的稳定版;本 PR 没有解决这一项。

关联 Issue

Related to #162(现有 Linux portal 实现 PR)

测试情况

Linux 实测环境:x64、原生 Wayland、包含 niri #4744 的开发构建 b4789ddb、xdg-desktop-portal 1.22.1、GNOME portal 51.0、control-center Provider 51.1。使用独立测试配置、真实系统授权界面和 Wayland 虚拟键盘,按键经过 niri 的正常输入处理路径。

验证 结果
同一份应用,分别使用官方 Electron 44 和 45 44 关闭再开启后失效;45 正常恢复
播放/暂停、上一曲、下一曲、音量增减 × 前台、失焦、隐藏 15 项通过,每次只触发一次
连续三轮关闭再开启 五键均恢复,无需重启
通过真实录入流程修改快捷键 授权后新键生效、旧键失效,无需重启
拒绝授权后重新录入并批准 拒绝时不触发,再次批准后恢复
普通输入和 niri 自身的快捷键 正常
重启、退出清理、最终 Linux 包运行 通过;退出后会话、绑定与 MPRIS 服务清零
Windows/macOS 检查了官方变更和项目 API 用法,未做实机测试

工程验证:

  • 632 个测试通过。
  • 格式检查、类型检查、lint 和 git diff --check 通过;保留两个原有 lint 警告。
  • 应用构建、四个 Linux 原生模块构建、Linux 打包和文档构建通过。
  • Electron 45 下 SQLite 的磁盘读写、事务回滚及重新打开验证通过。

自查清单

  • 本 PR 只包含一个主要功能 / 修复,没有夹带无关改动
  • 已在本地完整测试通过;AI 生成的代码同样自行测试并审阅过,未做未经验证的提交
  • 已运行 pnpm format,并确认 pnpm typecheck、pnpm lint 通过
  • 改动涉及原生模块时已 pnpm build:native 验证;未手写 native/*/index.d.ts
  • 已向 dev 分支提交

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant