Skip to content

fix: 修复灵动岛在 Linux Wayland 下不可见与置顶失效 - #223

Open
expoli wants to merge 3 commits into
SPlayer-Dev:devfrom
expoli:fix/dynamic-island-wayland
Open

fix: 修复灵动岛在 Linux Wayland 下不可见与置顶失效#223
expoli wants to merge 3 commits into
SPlayer-Dev:devfrom
expoli:fix/dynamic-island-wayland

Conversation

@expoli

@expoli expoli commented Sep 1, 2026

Copy link
Copy Markdown

问题

关联 issue #75:Ubuntu 26.04 Wayland(KDE)下灵动岛默认置顶无法生效;Xwayland(--ozone-platform=x11)下灵动岛完全不可见;原生 Wayland 下歌词长度变化时灵动岛左右弹跳。

根因

  1. Xwayland 下不可见:commit 4e37ece(灵动岛歌词切换动画)引入的 win.setShape() 走 X11 Shape 扩展,XWayland 合成器对 Shape 扩展支持有问题,调用后整窗渲染 surface 被丢弃,窗口在任务栏可见但画面完全不可见(社区已逐项回退定位到 setShape 并在 fork 验证)。
  2. 置顶 / 居中:Wayland 协议不允许客户端控制窗口 z-order 与绝对坐标(electron/electron#50403 官方确认),原生 Wayland 下 setAlwaysOnTop / setBounds 均为 no-op,只能靠合成器窗口规则、KWin 脚本或 Xwayland。

改动

  • electron/main/window/dynamicIsland.ts:Linux(含 XWayland)跳过 setShape(与 macOS 同理;activeShapeWidth 仍用于悬停命中判定,仅跳过视觉裁切)。恢复 Xwayland 下灵动岛显示,使官方文档推荐的 --ozone-platform=x11 方案可用(置顶、吸附居中、绝对定位均走 X11 协议)。
  • docs/troubleshooting/wayland.md / docs/en/troubleshooting/wayland.md
    • 说明灵动岛在 Xwayland 下不可见问题已修复;
    • 说明原生 Wayland 下弹跳的原因(应用无法设置绝对坐标,窗口从固定左上角向右伸缩)与解法;
    • 新增「Dynamic Island」的 KWin 窗口规则(强制置顶、叠加图层、跳过任务栏/分页器/切换器等),KDE 用户可自动化"手动置顶";
    • 新增 KWin 脚本动态居中方案:原生 Wayland 下让灵动岛始终水平居中、贴合工作区顶部,含安装/启用/热重载步骤与调试要点,弥补窗口规则只能静态定位、无法随歌词宽度变化而居中的不足(仅限 KDE/KWin)。

其他说明

  • CI 已通过(含一次英文文档的 Prettier 格式修正)。
  • 原生 Wayland 下置顶与居中属协议限制,应用侧无法直接设置坐标;已通过 KWin 脚本 提供动态居中方案(仅 KDE/KWin),GNOME 用户建议以 Xwayland 运行。

Fixes #75

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.

灵动岛在 ubuntu 26.04 LTS wayland 中,默认设置置顶无法生效需要手动在任务管理器中将其设置为置顶才能正常生效

1 participant