standalone: force whole-output damage when the overlay shrinks on tab close

Deleting a tab while the overlay is up drops its row, shrinking the box.
The overlay renders into the scene-output buffer outside the scene graph,
so its old pixels are invisible to scene damage tracking: the vacated
ring of the larger box stayed baked into the reused swapchain buffer.
Bump the overlay damage sentinel when a toplevel dies while the overlay
is shown, mirroring the reorder path.
This commit is contained in:
Andrew Hamilton 2026-08-18 08:12:20 +10:00
parent e206e8433a
commit 6fa1c0dfb1

View file

@ -1851,6 +1851,14 @@ static void handle_toplevel_destroy(struct wl_listener *listener, void *data) {
struct wlr_xdg_toplevel *toplevel = app->toplevel;
app->toplevel = NULL;
app->tree = NULL;
/* The overlay's row for this tab disappears the moment the toplevel does,
shrinking the box mid-menu. The overlay is drawn into the scene-output
buffer outside the scene graph, so its damage trackers never learn about
the old pixels; without whole-output damage the vacated ring of the
larger box stays baked into the reused swapchain buffer. */
if (host.overlay_visible && server.standalone)
standalone_overlay_damage();
if (app->icon_tex) {
glDeleteTextures(1, &app->icon_tex);
app->icon_tex = 0;