shell: Extract FloatingLayout::snap_to_corner to deduplicate snap restore logic
This commit is contained in:
parent
60ecf70910
commit
3f68eee846
3 changed files with 13 additions and 16 deletions
|
|
@ -1641,7 +1641,16 @@ impl FloatingLayout {
|
||||||
elements
|
elements
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn snapped_geometry(&self, corners: &TiledCorners) -> Rectangle<i32, Local> {
|
pub fn snap_to_corner(&self, mapped: &CosmicMapped, corners: &TiledCorners) {
|
||||||
|
*mapped.floating_tiled.lock().unwrap() = Some(*corners);
|
||||||
|
mapped.set_tiled(true);
|
||||||
|
let snapped_geo = self.snapped_geometry(corners);
|
||||||
|
let output = self.space.outputs().next().unwrap();
|
||||||
|
mapped.set_geometry(snapped_geo.to_global(output));
|
||||||
|
mapped.configure();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn snapped_geometry(&self, corners: &TiledCorners) -> Rectangle<i32, Local> {
|
||||||
let output = self.space.outputs().next().unwrap().clone();
|
let output = self.space.outputs().next().unwrap().clone();
|
||||||
let layers = layer_map_for_output(&output);
|
let layers = layer_map_for_output(&output);
|
||||||
let non_exclusive = layers.non_exclusive_zone();
|
let non_exclusive = layers.non_exclusive_zone();
|
||||||
|
|
|
||||||
|
|
@ -2596,11 +2596,7 @@ impl Shell {
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
} else if let Some(corners) = was_snapped {
|
} else if let Some(corners) = was_snapped {
|
||||||
*window.floating_tiled.lock().unwrap() = Some(corners);
|
workspace.floating_layer.snap_to_corner(&window, &corners);
|
||||||
window.set_tiled(true);
|
|
||||||
let snapped_geo = workspace.floating_layer.snapped_geometry(&corners);
|
|
||||||
window.set_geometry(snapped_geo.to_global(&workspace.output));
|
|
||||||
window.configure();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(FullscreenRestoreState::Tiling {
|
Some(FullscreenRestoreState::Tiling {
|
||||||
|
|
@ -3371,11 +3367,7 @@ impl Shell {
|
||||||
.floating_layer
|
.floating_layer
|
||||||
.map_maximized(mapped.clone(), geometry, false);
|
.map_maximized(mapped.clone(), geometry, false);
|
||||||
} else if let Some(corners) = was_snapped {
|
} else if let Some(corners) = was_snapped {
|
||||||
*mapped.floating_tiled.lock().unwrap() = Some(corners);
|
to_workspace.floating_layer.snap_to_corner(mapped, &corners);
|
||||||
mapped.set_tiled(true);
|
|
||||||
let snapped_geo = to_workspace.floating_layer.snapped_geometry(&corners);
|
|
||||||
mapped.set_geometry(snapped_geo.to_global(&to_workspace.output));
|
|
||||||
mapped.configure();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for mapped in to_workspace
|
for mapped in to_workspace
|
||||||
|
|
|
||||||
|
|
@ -1142,11 +1142,7 @@ impl Workspace {
|
||||||
std::mem::drop(state);
|
std::mem::drop(state);
|
||||||
self.floating_layer.map_maximized(window, geometry, true);
|
self.floating_layer.map_maximized(window, geometry, true);
|
||||||
} else if let Some(corners) = previous.was_snapped {
|
} else if let Some(corners) = previous.was_snapped {
|
||||||
*window.floating_tiled.lock().unwrap() = Some(corners);
|
self.floating_layer.snap_to_corner(&window, &corners);
|
||||||
window.set_tiled(true);
|
|
||||||
let snapped_geo = self.floating_layer.snapped_geometry(&corners);
|
|
||||||
window.set_geometry(snapped_geo.to_global(&self.output));
|
|
||||||
window.configure();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
None
|
None
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue