diff options
| author | Adam Malczewski <[email protected]> | 2026-06-15 12:56:19 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-15 12:56:19 +0900 |
| commit | e051b9b22f8e237c7f52c119c57d71f02be24b3d (patch) | |
| tree | 7ba412f7dcc6d8743abf4ad88099b856ac5ba049 /packages/kernel/src/server.cpp | |
| parent | c38f328c8b38546a19fc4cd955e01e70b42d624d (diff) | |
| download | unbox-e051b9b22f8e237c7f52c119c57d71f02be24b3d.tar.gz unbox-e051b9b22f8e237c7f52c119c57d71f02be24b3d.zip | |
ext-xdg-shell(rml-compositing W2): add Toplevel::wl_surface() (additive)
Wave 2, additive — existing wlr_scene compositing of toplevels held intact
(the switch to surface elements is a later wave behind a flag).
- New contract: Toplevel::wl_surface() -> wlr_surface* (the root surface, ==
xdg_toplevel->base->surface, the same surface scene_tree() hosts). A borrow
with the same lifetime as the Toplevel (valid until on_toplevel_unmapped).
This is the surface ext-window-field (Wave 3) passes to the kernel's
UiSubstrate::create_surface_element(); the kernel then manages the
subsurface/popup tree itself, so no popup/subsurface handles are exposed.
ABI-additive: ext-keybindings/ext-stage-dock/host-bin rebuild + link unchanged.
- Fixed the ext-xdg-shell-client teardown SIGABRT. Diagnosed (not assumed): the
abort is NOT pre-existing on baseline (seed 12e5016 passes) — it is the kernel
Wave-1 surface-capture TEST SEAM attaching a commit Listener to every client
wl_surface and only detaching at Server teardown, so a client destroying a
surface mid-session trips wlroots' wl_list_empty(commit.listener_list)
assertion. Fixed in-unit via teardown order (unmap via null-buffer commit; let
the Server destructor reap the surface after detaching its seam). Filed a
kernel change-request for the real fix (RAII per-surface destroy listener),
which will also cure ext-stage-dock-glue.
ext-xdg-shell suite 2/2 green in build + build-asan, no SIGABRT, no unbox::
leak/UB. wl_surface() covered (non-null, == root surface, round-trips through
scene_tree_for()).
Diffstat (limited to 'packages/kernel/src/server.cpp')
0 files changed, 0 insertions, 0 deletions
