shell/tiling: Fix render order

This commit is contained in:
Victoria Brekenfeld 2022-12-15 13:07:25 +01:00
parent 4317c4c5f3
commit 8639546ddb

View file

@ -1155,6 +1155,10 @@ impl TilingLayout {
tree.traverse_pre_order(root) tree.traverse_pre_order(root)
.unwrap() .unwrap()
.filter(|node| node.data().is_mapped(None)) .filter(|node| node.data().is_mapped(None))
.filter(|node| match node.data() {
Data::Mapped { mapped, .. } => mapped.is_activated(),
_ => unreachable!(),
})
.map(|node| match node.data() { .map(|node| match node.data() {
Data::Mapped { Data::Mapped {
mapped, mapped,
@ -1166,7 +1170,28 @@ impl TilingLayout {
output_data.location + last_geometry.loc, output_data.location + last_geometry.loc,
), ),
_ => unreachable!(), _ => unreachable!(),
}), })
.chain(
tree.traverse_pre_order(root)
.unwrap()
.filter(|node| node.data().is_mapped(None))
.filter(|node| match node.data() {
Data::Mapped { mapped, .. } => !mapped.is_activated(),
_ => unreachable!(),
})
.map(|node| match node.data() {
Data::Mapped {
mapped,
last_geometry,
..
} => (
&output_data.output,
mapped,
output_data.location + last_geometry.loc,
),
_ => unreachable!(),
}),
),
) )
} else { } else {
None None
@ -1257,20 +1282,45 @@ impl TilingLayout {
if &output_data.output != output { if &output_data.output != output {
return None; return None;
} }
let root = tree.root_node_id()?;
Some( if let Some(root) = tree.root_node_id() {
tree.traverse_pre_order(root) Some(
.unwrap() tree.traverse_pre_order(root)
.filter(|node| node.data().is_mapped(None)) .unwrap()
.map(|node| match node.data() { .filter(|node| node.data().is_mapped(None))
Data::Mapped { .filter(|node| match node.data() {
mapped, Data::Mapped { mapped, .. } => mapped.is_activated(),
last_geometry, _ => unreachable!(),
.. })
} => (mapped, last_geometry.loc), .map(|node| match node.data() {
_ => unreachable!(), Data::Mapped {
}), mapped,
) last_geometry,
..
} => (mapped, last_geometry.loc),
_ => unreachable!(),
})
.chain(
tree.traverse_pre_order(root)
.unwrap()
.filter(|node| node.data().is_mapped(None))
.filter(|node| match node.data() {
Data::Mapped { mapped, .. } => !mapped.is_activated(),
_ => unreachable!(),
})
.map(|node| match node.data() {
Data::Mapped {
mapped,
last_geometry,
..
} => (mapped, last_geometry.loc),
_ => unreachable!(),
}),
),
)
} else {
None
}
}) })
.flatten() .flatten()
.flat_map(|(mapped, loc)| { .flat_map(|(mapped, loc)| {