[Bug]: Redesign tab bars ignore clicks on Linux: hidden chat layers keep window drag regions

未关闭 适合新手
#31,551 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@EhsanulHaqueSiam 已经在做这个了。

开始于 2026年11月5日。

  • #31554 来自 @EhsanulHaqueSiam —— 未关闭
  • #31585 来自 @juliusmarminge —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
82/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
electron, typescript
领域
desktop, frontend

调研方向

从 layout/SurfaceHost.tsx 开始,检查隐藏但保留的聊天层如何获得其标题栏类名;然后沿着 chatPaneHeaderClassName追踪到实际的聊天标题栏和 PaneThumbnail。在 Linux 上切换聊天标签页,并点击终端标签页或 + 来复现。隐藏的标题栏不再拦截点击,且这些控件能够稳定响应时,即为完成。

由索引模型根据 Issue 内容生成。

描述

What happened

In the redesign desktop app (stack branch maria/redesign/6-workspace-panes, #28845), tabs and + buttons in the top bar only respond to clicks some of the time. With a chat on the left and a terminal on the right, the terminal pane's Terminal tab and its + (Add panel surface) ignore clicks completely after switching chat tabs once. Chat tabs and + in the chat's own tab bar also miss clicks, depending on where you click.

Diagnosis

Chats you are not looking at stay mounted in a hidden layer (layout/SurfaceHost.tsx: !visible && "pointer-events-none inset-0 [content-visibility:hidden]", plus inert). The layer's header still has drag-region. That includes the real ChatPaneHeader of a kept chat, and the header of a PaneThumbnail prepared off screen for the overview, since both use chatPaneHeaderClassName.

pointer-events, inert and content-visibility:hidden don't affect Electron's window drag regions. Blink still collects the hidden header's -webkit-app-region: drag box: the layer is inset-0, so the strip runs the full workspace width. Electron applies drag and no-drag rectangles in DOM order, and the hidden layers come after the visible pane, so the hidden strip covers the visible tab bars. A click there goes to the window manager as a window move and never reaches the page. Clicks only get through where one of the hidden header's own no-drag buttons happens to line up. That's why it feels random.

Only this branch is affected: SurfaceHost's kept chat layers don't exist on main or on stack branches 1 to 5.

Steps to reproduce
  1. On Linux (seen on Hyprland, Wayland), run the desktop app from maria/redesign/6-workspace-panes (vp run dev:desktop).
  2. Open a project chat with a few thread tabs, and open a terminal so it sits as a pane to the right of the chat.
  3. Click a different chat tab, so the previous chat moves to a hidden layer.
  4. Click the terminal pane's Terminal tab or its +. Nothing happens. Clicking empty space in the chat tab bar and then some tabs also fails.
Version

maria/redesign/6-workspace-panes @ ada1a8b67b (desktop dev build)

Environment

Omarchy (Arch Linux) 7.2.15, Hyprland 0.57.1 (Wayland), Electron 44.10.1, Node 26.13.0. Not checked on macOS or Windows; drag regions work the same way there, so they are likely affected too.

Evidence
# Drag-region boxes in the page (CDP), after one chat tab switch. CSS px; window is 2003 px wide.
live chat header      [260, 7, 862 x 41]   drag
hidden chat header    [260, 7, 1731 x 41]  drag   (ancestor: inert, inset-0 [content-visibility:hidden])
terminal tab bar      [1130, 7, 861 x 41]  none   <- under the hidden strip

# Real mouse clicks (uinput, not synthetic CDP events), recording pointerdown in the page:
sidebar resize handle (256,600)  -> page got: ["Resize Sidebar"]
terminal "Terminal" tab (1188,24) -> page got: []
terminal "+" (1241,24)            -> page got: []

# Same clicks after removing the hidden header's drag region:
terminal "Terminal" tab (1188,24) -> page got: ["Terminal"]
terminal "+" (1241,24)            -> page got: ["Add panel surface"]
Related issues

#10661 and #11573 were Linux click bugs caused by drag regions over controls in other parts of the app; both are closed and involve different code. #19079 (right sidebar tab close button needs repeated clicks in macOS fullscreen) is on main, which doesn't have these layers.

Fix applied or workaround

Nothing on the machine beyond a temporary style injected over CDP while testing. Reloading the window clears it until a chat goes into the background again. A fix PR follows: hidden headers drop drag-region.

Filed by

EhsanulHaqueSiam, following the t3 triage playbook

主要语言
TypeScript
星标
24.8k
派生
6.4k
平均合并
10 小时 25 分钟
30 天内合并 PR
113

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

pingdotgg/t3code 的其他 Issue

查看 pingdotgg/t3code 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。