Skip to content

SlowQ v1.0.10

Latest

Choose a tag to compare

@PandaBoby PandaBoby released this 22 Sep 03:43
· 1 commit to main since this release

SlowQ v1.0.10 · 慢Q

修复一次按满 ⌘Q 连退两个应用、长时间运行后进度环动画消失,以及睡眠瞬间触发合成退出的残留路径。
Fixes hold-⌘Q quitting two apps in a row, the progress ring animation dying after long uptime, and a stale synthetic-quit path across sleep.


🐛 修复

一次按满 ⌘Q,连退两个应用(本次最重要)

症状:按住 ⌘Q 满设定时长后,不仅退出了当前应用,连下一个接管前台的应用也被立刻退出——一次按满,关掉两个窗口。

原因:按满后进入"合成退出"流程时,App 会把事件拦截(event tap)整体物理禁用一小段时间,打算等 ⌘ 松开后投递一次合成的 ⌘Q。但禁用期间你的手指往往还按着,系统的按键重复会继续产生 ⌘Q:

  • 这些重复的 ⌘Q 不再经过拦截、原样漏给前台应用,把 App A 退掉;
  • App B 接管前台后,轮询检测到 ⌘ 松开,又把合成 ⌘Q 投给了 App B。

修复:暂停窗口不再物理禁用拦截——这本来就没有必要(合成事件走独立通道,不会被自己再拦到),物理 ⌘Q 由拦截回调直接吞掉。同时给合成事件烙上标记,即便它经过自家拦截也能被识别并放行。

长时间运行后,进度环动画消失

症状:App 运行较久之后,按住 ⌘Q 时 HUD 还会出现,但进度环的倒计时数字与动画不再刷新,像"死"在那里。

原因有两个,叠加发生:

  1. 显示/隐藏竞态:取消按住后 HUD 有 0.15 秒淡出动画;淡出进行到一半时若再次按下 ⌘Q,新一轮 HUD 刚显示,就被上一轮迟到的淡出回调"补刀"隐藏并停掉动画。触发次数越多越容易撞上,运行越久越明显。
  2. 显示链接失活:进度环动画的 CVDisplayLink 绑定创建时的显示器配置,长时间运行(锁屏/息屏/显示器变化)后可能静默失效,而代码只做了"复用重启",复用一个已死的链接,动画从此永久冻结。

修复:淡出回调带"代数"校验,新一轮显示会作废所有在途的隐藏回调;每次显示时释放旧链接、按当前显示器配置重建。

睡眠瞬间的"幻影退出"(v1.0.9 遗留)

按满时长、正处于"等 ⌘ 松开"的窗口时合盖睡眠:唤醒后残留的轮询计时器会在第一个周期就检测到 ⌘ 已松开(键态跨睡眠丢失),把一条真实的合成 ⌘Q 投给唤醒后最前面的应用。现在进入睡眠时会一并作废该计时器并复位暂停状态。

同时,等待 ⌘ 松开的 1.5 秒超时从"强制投递 ⌘Q"改为"放弃本次合成退出并复位"——超时本身说明 ⌘ 键态可疑(可能被闩住),强行投递会退出你未必想退的应用;看门狗的 3 秒强制复位保留为最后兜底。


📦 安装

  • macOS 13+(Apple Silicon / Intel 通用二进制)
  • 下载 DMG 拖入「应用程序」,或 zip 解压后放入「应用程序」
  • 首次使用需在「系统设置 → 隐私与安全性 → 辅助功能」中勾选 慢Q
  • 从旧版本升级:替换 App 后如拦截失效,请在辅助功能里重新勾选一次