Repository navigation
Open
Labels
bugSomething isn't workingSomething isn't working
Description
检查清单
- 我已检索仓库中所有的 Issues,确保我没有重复提交问题;或有相似 Issue,但我觉得我的情况不包含在那个相似 Issue 之内(已检索「任务栏」「自动隐藏」「autohide」相关 Issue,未见同类报告)
- 我已经找到了可以复现这个问题的方法,并且写在了下面的「具体信息」中
- 此问题可以在我的设备和当前环境中稳定复现
- 此问题可以在最新版本 (Latest Release) 中复现(v1.2.0 使用
SetParent子窗口嵌入,动画同步正常;问题出现在 v1.2.1-beta.1 /dev分支) - 此问题是在我更新到当前版本后才出现的(由 226016f 改为 owner 嵌入引入)
环境信息
- 版本:v1.2.1-beta.1 /
dev(commit 226016f 之后;对比验证 v1.2.0 正常) - OS:Windows_NT x64 10.0.26300(Windows 11 26H2,UBR 9550)
- 屏幕:2048 × 1152,100% 缩放
具体信息
1. 复现步骤
- Windows 设置 → 个性化 → 任务栏 → 任务栏行为 → 勾选「自动隐藏任务栏」
- 在 v1.2.1-beta.1(或最新
dev)中播放任意歌曲,开启「任务栏歌词」 - 鼠标移到屏幕底缘(任务栏滑出),再移开(任务栏滑回),观察歌词窗口与任务栏动画的同步关系
与歌曲、歌词来源无关,任意歌曲均可稳定复现。
2. 实际行为
任务栏展开/收起带有约 190–400 ms 的滑动动画,但歌词窗口不跟随动画,只在动画结束后跳变一次:
- 展开时:鼠标移到底缘,任务栏开始向上滑出,整个动画期间歌词窗口停在隐藏位不动;动画结束后约 100 ms,歌词才突然跳到展开后的任务栏位置("展开完后突然显示")。
- 收起时:鼠标移开,任务栏开始向下滑走,整个动画期间歌词窗口停留在原位、悬浮在正在滑走的任务栏上方;动画结束后约 110 ms,歌词才跳到屏幕外("收进后才消失")。
- 隐藏态遮挡底缘唤醒带:任务栏完全收起后仅留 2 px(
T=1150..1152)在屏幕底缘作为鼠标唤醒触发区,而歌词窗口被setBounds到T=1150后顶部 2 px 恰好盖住该区域,导致鼠标移到歌词所在那一段底缘时无法唤起任务栏(移到右侧未被歌词覆盖的底缘才能唤起)。
3. 预期行为
- 任务栏滑出/滑回动画期间,歌词窗口位置逐帧跟随任务栏同步移动。
- 任务栏收起隐藏时,歌词窗口不遮挡屏幕底缘的 2 px 唤醒触发带,鼠标移到底缘任意位置均可正常唤起任务栏。
4. 问题定位(附实测数据)
提交 226016f(fix: 任务栏歌词改为 owner 嵌入,修复资源管理器重启导致应用闪退)将歌词窗口从 SetParent 子窗口改为 SetWindowLongPtrW(GWLP_HWNDPARENT) owner 顶层窗口,并在 tray_watcher.rs 中新增监听 Shell_TrayWnd 的 EVENT_OBJECT_LOCATIONCHANGE 来驱动重排。
在本机用 SetCursorPos 模拟鼠标进出底缘,逐帧采样 GetWindowRect(Shell_TrayWnd) 与歌词窗口(类名 Chrome_WidgetWin_1,标题 Taskbar Lyric)矩形:
| 阶段 | 任务栏矩形(T=top) | 歌词窗口矩形(T=top) |
|---|---|---|
| 展开前(隐藏态) | T=1150 B=1198(屏幕高 1152,仅 2 px 在屏幕内) | T=1150 |
| 展开动画(约 190 ms / 6 帧) | 逐帧变化:1150 → 1133 → 1126 → 1118 → 1107 → 1104 | 全程停在 T=1150 不动 |
| 展开完成后 | T=1104 B=1152 | 约 100 ms 后才跳到 T=1104 |
| 收起动画(约 400 ms / 11 帧) | 逐帧变化:1107 → 1110 → 1118 → 1122 → 1129 → 1133 → 1136 → 1146 → 1150 | 全程停在 T=1104 不动 |
| 收起完成后 | T=1150 B=1198 | 约 110 ms 后才跳到 T=1150 |
对照实验:对 EVENT_OBJECT_LOCATIONCHANGE 分别挂线程级(任务栏线程)与进程级 hook,两者收到的事件数量完全一致(均 110 次,全部来自任务栏线程),说明 tray_watcher.rs 的 WinEvent 监听能收到动画的每一帧。
根因在消费链路:
native/taskbar-lyric/src/strategy/win11.rs的update_layout每次Update都执行TaskbarScanner::scan_taskbar遍历任务栏 XAML UIA 树;滑动动画期间扫描耗时超过帧间隔或因树抖动失败进入退避重试(0/50/150/300/600 ms),导致中间动画帧没有布局输出,直到动画结束后某次扫描成功才一次性跳变。- 任务栏收起到底缘(
T=1150)后,歌词窗口仍保持show状态停在y=1150,其顶部 2 px 覆盖在屏幕底缘唤醒带上,拦截了唤醒任务栏的鼠标命中。
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working
Activity
github-actions commentedon Nov 7, 2026
👋 @OMSociety
感谢提交 Issue!我们已经收到您的反馈,会尽快确认您的问题。
Thanks for opening this issue! We have received your report and will review it as soon as possible.