floating: Properly scale positions on migration (fixes #1167)

This commit is contained in:
Victoria Brekenfeld 2025-08-04 17:11:46 +02:00
parent 7948a97334
commit 9f4db0b28b

View file

@ -279,7 +279,8 @@ impl FloatingLayout {
let old_output_geometry = { let old_output_geometry = {
let layers = layer_map_for_output(&old_output); let layers = layer_map_for_output(&old_output);
layers.non_exclusive_zone() layers.non_exclusive_zone()
}; }
.to_f64();
let output_geometry = { let output_geometry = {
let layers = layer_map_for_output(&output); let layers = layer_map_for_output(&output);
layers.non_exclusive_zone() layers.non_exclusive_zone()
@ -302,15 +303,17 @@ impl FloatingLayout {
None, None,
); );
} else { } else {
let geometry = self.space.element_geometry(&mapped).unwrap(); let geometry = self.space.element_geometry(&mapped).unwrap().to_f64();
let new_loc = ( let new_loc = (
geometry.loc.x.saturating_sub(old_output_geometry.loc.x) ((geometry.loc.x - old_output_geometry.loc.x).max(0.)
/ old_output_geometry.size.w / old_output_geometry.size.w
* output_geometry.size.w * output_geometry.size.w as f64)
.round() as i32
+ output_geometry.loc.x, + output_geometry.loc.x,
geometry.loc.y.saturating_sub(old_output_geometry.loc.y) ((geometry.loc.y - old_output_geometry.loc.y).max(0.)
/ old_output_geometry.size.h / old_output_geometry.size.h
* output_geometry.size.h * output_geometry.size.h as f64)
.round() as i32
+ output_geometry.loc.y, + output_geometry.loc.y,
); );
self.map_internal(mapped, Some(Point::from(new_loc)), None, None); self.map_internal(mapped, Some(Point::from(new_loc)), None, None);