tiling: Use tiling animation, even if placement can't be restored

This commit is contained in:
Victoria Brekenfeld 2024-02-26 16:35:28 +01:00 committed by Victoria Brekenfeld
parent 30ca382d11
commit d32d49779b

View file

@ -379,7 +379,7 @@ impl TilingLayout {
) { ) {
window.output_enter(&self.output, window.bbox()); window.output_enter(&self.output, window.bbox());
window.set_bounds(self.output.geometry().size.as_logical()); window.set_bounds(self.output.geometry().size.as_logical());
self.map_internal(window, focus_stack, direction); self.map_internal(window, focus_stack, direction, None);
} }
pub fn map_internal<'a>( pub fn map_internal<'a>(
@ -387,6 +387,7 @@ impl TilingLayout {
window: impl Into<CosmicMapped>, window: impl Into<CosmicMapped>,
focus_stack: Option<impl Iterator<Item = &'a CosmicMapped> + 'a>, focus_stack: Option<impl Iterator<Item = &'a CosmicMapped> + 'a>,
direction: Option<Direction>, direction: Option<Direction>,
minimize_rect: Option<Rectangle<i32, Local>>,
) { ) {
let gaps = self.gaps(); let gaps = self.gaps();
@ -394,7 +395,14 @@ impl TilingLayout {
let last_active = focus_stack let last_active = focus_stack
.and_then(|focus_stack| TilingLayout::last_active_window(&mut tree, focus_stack)) .and_then(|focus_stack| TilingLayout::last_active_window(&mut tree, focus_stack))
.map(|(node_id, _)| node_id); .map(|(node_id, _)| node_id);
TilingLayout::map_to_tree(&mut tree, window, &self.output, last_active, direction); TilingLayout::map_to_tree(
&mut tree,
window,
&self.output,
last_active,
direction,
minimize_rect,
);
let blocker = TilingLayout::update_positions(&self.output, &mut tree, gaps); let blocker = TilingLayout::update_positions(&self.output, &mut tree, gaps);
self.queue.push_tree(tree, ANIMATION_DURATION, blocker); self.queue.push_tree(tree, ANIMATION_DURATION, blocker);
} }
@ -505,7 +513,7 @@ impl TilingLayout {
} }
// else add as new_window // else add as new_window
self.map_internal(window, focus_stack, None); self.map_internal(window, focus_stack, None, Some(from));
} }
fn map_to_tree<'a>( fn map_to_tree<'a>(
@ -514,12 +522,13 @@ impl TilingLayout {
output: &Output, output: &Output,
node: Option<NodeId>, node: Option<NodeId>,
direction: Option<Direction>, direction: Option<Direction>,
minimize_rect: Option<Rectangle<i32, Local>>,
) { ) {
let window = window.into(); let window = window.into();
let new_window = Node::new(Data::Mapped { let new_window = Node::new(Data::Mapped {
mapped: window.clone(), mapped: window.clone(),
last_geometry: Rectangle::from_loc_and_size((0, 0), (100, 100)), last_geometry: Rectangle::from_loc_and_size((0, 0), (100, 100)),
minimize_rect: None, minimize_rect,
}); });
let window_id = if let Some(direction) = direction { let window_id = if let Some(direction) = direction {
@ -2152,6 +2161,7 @@ impl TilingLayout {
&self.output, &self.output,
Some(current_node), Some(current_node),
None, None,
None,
); );
let node = window.tiling_node_id.lock().unwrap().clone().unwrap(); let node = window.tiling_node_id.lock().unwrap().clone().unwrap();
@ -2710,7 +2720,14 @@ impl TilingLayout {
} }
} }
_ => { _ => {
TilingLayout::map_to_tree(&mut tree, window.clone(), &self.output, None, None); TilingLayout::map_to_tree(
&mut tree,
window.clone(),
&self.output,
None,
None,
None,
);
window window
} }
}; };