fix(gpui): draw the tab context menu once — shadow no longer stacks per tab

`ContextMenuExt::context_menu()` wraps the host element and keys its element
state by a hardcoded "context-menu" id. The wrapper's id enters the
GlobalElementId stack *before* the wrapped row's own `("sidebar-tab", ix)`,
so every sidebar tab row resolved to the same state — the same
`Rc<RefCell<ContextMenuSharedState>>`. Opening one menu set `open = true` for
all rows, and each row then re-rendered the same PopupMenu entity at the same
anchor. The panel is opaque so the stack was invisible, but the popover shadow
is not: its alpha composited once per tab. That is the whole of "the more tabs,
the thicker the right-click shadow" — no packaging or config involvement.

The tab menu now uses the same carrier as the file tree: rows only record the
anchor and index, and a single `deferred(anchored(PopupMenu))` is drawn from
the workspace root, so the component's own popover shadow stays single-layer.
The menu is dropped when the TABS section folds, and skipped when its captured
index no longer exists.

Alongside it:

- CHANGELOG: 1.1.0 gains this fix and issue #38 (two notify wrappers wrapping
  each other until Codex's config.toml reached 130MB); release date moves to
  2026-08-18.
- docs/release-notes/v1.1.0.md: release notes in the 1.0.0 format, with PR
  credits, reporter credits, and a pointer to the issue templates.
- README / THIRD-PARTY-NOTICES: GPUI and gpui-component are credited and
  declared — both Apache-2.0, compiled as lightly patched forks.
- .gitignore: ignore the whole `.probe-*/` family instead of one name at a time.
This commit is contained in:
kuddev committed 2026-08-18 22:37:16 +08:00
1 parent 95a79e7255
commit 0eddfaf2f1
7 files changed
+238 -37

No files matched your search

+19
View File
@@ -241,6 +241,16 @@ Windows/Linux paths, arrays, modules, and reload behavior.
Questions and feedback: [fickleheartedkeys@163.com](mailto:fickleheartedkeys@163.com)
### 🙏 Acknowledgements
Nebula's shell is built on **[GPUI](https://github.com/zed-industries/zed)** — the
GPU-accelerated UI framework developed by the [Zed](https://zed.dev) team — together with
**[gpui-component](https://github.com/longbridge/gpui-component)** from
[Longbridge](https://github.com/longbridge), which supplies the widget library. Both are
Apache-2.0 licensed and are used through lightly patched forks pinned in the workspace
manifest. Thank you for releasing this work as open source — Nebula's interface would not
look the way it does without it.
### 📜 License
Released under the [GNU General Public License v3.0](LICENSE).
@@ -420,6 +430,15 @@ Nebula 内置 Lua 5.4,使用 `require 'nebula'` 与
问题与反馈:[fickleheartedkeys@163.com](mailto:fickleheartedkeys@163.com)
### 🙏 致谢
Nebula 的界面层构建在 **[GPUI](https://github.com/zed-industries/zed)** 之上——由
[Zed](https://zed.dev) 团队开发的 GPU 加速 UI 框架——并使用
[Longbridge](https://github.com/longbridge) 的
**[gpui-component](https://github.com/longbridge/gpui-component)** 作为组件库。两者均以
Apache-2.0 许可发布,Nebula 通过带少量补丁的 fork 使用,版本在 workspace 清单中精确锁定。
感谢把这些工作开源——没有它,Nebula 现在的界面不会是这个样子。
### 📜 许可证
基于 [GNU 通用公共许可证 v3.0(GPL-3.0)](LICENSE) 发布。