tree: update surface position when geometry changes
This commit is contained in:
parent
579f93d9d3
commit
f871ea1d67
1 changed files with 16 additions and 9 deletions
|
|
@ -189,16 +189,20 @@ impl XdgSurface {
|
|||
}
|
||||
}
|
||||
|
||||
fn update_surface_position(&self) {
|
||||
let (mut x1, mut y1) = self.absolute_desired_extents.get().position();
|
||||
if let Some(geo) = self.geometry.get() {
|
||||
x1 -= geo.x1();
|
||||
y1 -= geo.y1();
|
||||
}
|
||||
self.surface.set_absolute_position(x1, y1);
|
||||
self.update_popup_positions();
|
||||
}
|
||||
|
||||
fn set_absolute_desired_extents(&self, ext: &Rect) {
|
||||
let prev = self.absolute_desired_extents.replace(*ext);
|
||||
if ext.position() != prev.position() {
|
||||
let (mut x1, mut y1) = (ext.x1(), ext.y1());
|
||||
if let Some(geo) = self.geometry.get() {
|
||||
x1 -= geo.x1();
|
||||
y1 -= geo.y1();
|
||||
}
|
||||
self.surface.set_absolute_position(x1, y1);
|
||||
self.update_popup_positions();
|
||||
self.update_surface_position();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -489,8 +493,11 @@ impl SurfaceExt for XdgSurface {
|
|||
}
|
||||
if let Some(pending) = &mut pending.xdg_surface {
|
||||
if let Some(geometry) = pending.geometry.take() {
|
||||
self.geometry.set(Some(geometry));
|
||||
self.update_extents();
|
||||
let prev = self.geometry.replace(Some(geometry));
|
||||
if prev != Some(geometry) {
|
||||
self.update_extents();
|
||||
self.update_surface_position();
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue