summaryrefslogtreecommitdiffhomepage
path: root/packages/kernel/src/server.cpp
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-15 12:56:19 +0900
committerAdam Malczewski <[email protected]>2026-06-15 12:56:19 +0900
commite051b9b22f8e237c7f52c119c57d71f02be24b3d (patch)
tree7ba412f7dcc6d8743abf4ad88099b856ac5ba049 /packages/kernel/src/server.cpp
parentc38f328c8b38546a19fc4cd955e01e70b42d624d (diff)
downloadunbox-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