Fix bars when full screen, reposition popups

This commit is contained in:
Peter Krull 2025-09-20 20:38:25 +02:00 committed by Jeremy Soller
parent e129094bfb
commit fc9fe59ed9
2 changed files with 20 additions and 6 deletions

View file

@ -1517,7 +1517,6 @@ impl Workspace {
let focused = self.focus_stack.get(last_active_seat).last().cloned();
let mut fullscreen_elements = if let Some(fullscreen) = self.fullscreen.as_ref() {
let bbox = fullscreen.surface.bbox();
let fullscreen_geo = self.fullscreen_geometry().unwrap();
let previous_geo = fullscreen
.previous_geometry
@ -1560,9 +1559,18 @@ impl Workspace {
.loc
.as_logical()
.to_physical_precise_round(output_scale);
let scale = Scale {
x: target_geo.size.w as f64 / bbox.size.w as f64,
y: target_geo.size.h as f64 / bbox.size.h as f64,
// Only rescale geometry when animating
let animation_rescale = |elem| if fullscreen.is_animating() {
let fullscreen_geo = fullscreen.surface.0.geometry();
let scale = Scale {
x: target_geo.size.w as f64 / fullscreen_geo.size.w as f64,
y: target_geo.size.h as f64 / fullscreen_geo.size.h as f64,
};
RescaleRenderElement::from_element(elem, render_loc, scale).into()
} else {
Into::<WorkspaceRenderElement<_>>::into(elem)
};
fullscreen
@ -1575,8 +1583,7 @@ impl Workspace {
Some(true),
)
.into_iter()
.map(|elem| RescaleRenderElement::from_element(elem, render_loc, scale))
.map(Into::into)
.map(animation_rescale)
.collect::<Vec<_>>()
} else {
Vec::new()