Skip to content

fix(macos): prevent crashes when switching input sources - #1142

Open
appergb wants to merge 1 commit into
betafrom
fix/macos-input-switch-crash
Open

appergb wants to merge 1 commit into
betafrom
fix/macos-input-switch-crash

Conversation

@appergb

@appergb appergb commented Oct 3, 2026

Copy link
Copy Markdown
Collaborator

macOS 上应用停留在主页或设置页时,按中英文切换键(Caps Lock)可能触发 SIGTRAP,导致整个进程退出。实际崩溃栈定位到热键 event tap 线程调用 NSEvent 转换,进入 HIToolbox 只允许主队列访问的输入源代码。

仅在配置为 Fn 且确实按住 Fn 时解析系统控制事件。必要的 NSEvent 转换转到主队列,使用正确的 CGEvent 指针编码与 autorelease pool,并确认转换结果仍为 systemDefined 后再读取 subtype/data1;Caps Lock 转出的 flagsChanged 事件直接忽略。

验证:原生后台线程 Caps Lock 按下/松开与 Fn 辅助键报文回归通过;26 项 Rust hotkey 测试、113 项前端测试及 macOS debug 应用构建通过。尚未替换用户已安装的应用。

@appergb appergb left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已完成对 4fa9599 的 review。未发现未解决的阻断项。

核对了 Fn 空闲/非 Fn 触发路径、CGEvent 指针编码、主队列同步转换的事件生命周期及 flagsChanged 类型过滤;热键监视器的 macOS shutdown 没有等待监听线程的 join,避免主队列转换与退出互相等待。Caps Lock 与 Fn 辅助键的原生回归、本地 hotkey 测试和 debug 构建通过。

该提交的全部 CI 已通过:https://github.com/Open-Less/openless/actions/runs/37138839321 。合并仍需仓库要求的维护者批准。

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