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,12 +1443,21 @@ impl WlSurface {
|
||||||
self.commit_timeline.set_fifo_barrier();
|
self.commit_timeline.set_fifo_barrier();
|
||||||
}
|
}
|
||||||
if damage_full && (self.visible.get() || was_visible) {
|
if damage_full && (self.visible.get() || was_visible) {
|
||||||
let mut damage =
|
// When a toplevel unmaps (null buffer commit), it transitions from visible to
|
||||||
buffer_abs_pos.with_size_saturating(max_surface_size.0, max_surface_size.1);
|
// invisible here. Skip the immediate damage: the parent container or float node
|
||||||
if let Some(tl) = self.toplevel.get() {
|
// already called damage() when removing the child, and for tiled windows the
|
||||||
damage = damage.intersect(tl.node_absolute_position());
|
// 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() {
|
||||||
|
damage = damage.intersect(tl.node_absolute_position());
|
||||||
|
}
|
||||||
|
self.client.state.damage(damage);
|
||||||
}
|
}
|
||||||
self.client.state.damage(damage);
|
|
||||||
}
|
}
|
||||||
if self.visible.get() {
|
if self.visible.get() {
|
||||||
let output = self.output.get();
|
let output = self.output.get();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue