From f871ea1d675d20c75613d3af80ad8b54731a05ee Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Wed, 10 Jul 2024 19:37:00 +0200 Subject: [PATCH] tree: update surface position when geometry changes --- src/ifs/wl_surface/xdg_surface.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/ifs/wl_surface/xdg_surface.rs b/src/ifs/wl_surface/xdg_surface.rs index b88c0d9a..645f79d1 100644 --- a/src/ifs/wl_surface/xdg_surface.rs +++ b/src/ifs/wl_surface/xdg_surface.rs @@ -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(())