wl_surface: skip damage on null surfaces
This commit is contained in:
parent
f94d6c644c
commit
4d803360dd
1 changed files with 14 additions and 5 deletions
|
|
@ -1443,6 +1443,14 @@ impl WlSurface {
|
|||
self.commit_timeline.set_fifo_barrier();
|
||||
}
|
||||
if damage_full && (self.visible.get() || was_visible) {
|
||||
// When a toplevel unmaps (null buffer commit), it transitions from visible to
|
||||
// invisible here. Skip the immediate damage: the parent container or float node
|
||||
// already called damage() when removing the child, and for tiled windows the
|
||||
// deferred layout damage system handles repainting once siblings have resized.
|
||||
// Emitting damage here creates an intermediate frame showing an empty gap.
|
||||
let becoming_invisible =
|
||||
was_visible && !self.visible.get() && self.buffer.is_none();
|
||||
if !becoming_invisible || self.toplevel.is_none() {
|
||||
let mut damage =
|
||||
buffer_abs_pos.with_size_saturating(max_surface_size.0, max_surface_size.1);
|
||||
if let Some(tl) = self.toplevel.get() {
|
||||
|
|
@ -1450,6 +1458,7 @@ impl WlSurface {
|
|||
}
|
||||
self.client.state.damage(damage);
|
||||
}
|
||||
}
|
||||
if self.visible.get() {
|
||||
let output = self.output.get();
|
||||
if has_new_frame_requests {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue