Skip to content

任务栏歌词未跟随自动隐藏任务栏的展开/收起动画 #457

Open

Description

@OMSociety

检查清单

  • 我已检索仓库中所有的 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. 复现步骤

  1. Windows 设置 → 个性化 → 任务栏 → 任务栏行为 → 勾选「自动隐藏任务栏」
  2. 在 v1.2.1-beta.1(或最新 dev)中播放任意歌曲,开启「任务栏歌词」
  3. 鼠标移到屏幕底缘(任务栏滑出),再移开(任务栏滑回),观察歌词窗口与任务栏动画的同步关系

与歌曲、歌词来源无关,任意歌曲均可稳定复现。

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 监听能收到动画的每一帧。

根因在消费链路:

  1. native/taskbar-lyric/src/strategy/win11.rs 的 update_layout 每次 Update 都执行 TaskbarScanner::scan_taskbar 遍历任务栏 XAML UIA 树;滑动动画期间扫描耗时超过帧间隔或因树抖动失败进入退避重试(0/50/150/300/600 ms),导致中间动画帧没有布局输出,直到动画结束后某次扫描成功才一次性跳变。
  2. 任务栏收起到底缘(T=1150)后,歌词窗口仍保持 show 状态停在 y=1150,其顶部 2 px 覆盖在屏幕底缘唤醒带上,拦截了唤醒任务栏的鼠标命中。

Activity

  1. github-actions commented on Nov 7, 2026

    @github-actions

    👋 @OMSociety

    感谢提交 Issue!我们已经收到您的反馈,会尽快确认您的问题。

    Thanks for opening this issue! We have received your report and will review it as soon as possible.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions