From 8639546ddb23c5e9684d3951a13e99100f8e0e23 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Thu, 15 Dec 2022 13:07:25 +0100 Subject: [PATCH] shell/tiling: Fix render order --- src/shell/layout/tiling/mod.rs | 80 +++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/src/shell/layout/tiling/mod.rs b/src/shell/layout/tiling/mod.rs index d30eee91..9c62408f 100644 --- a/src/shell/layout/tiling/mod.rs +++ b/src/shell/layout/tiling/mod.rs @@ -1155,6 +1155,10 @@ impl TilingLayout { 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, @@ -1166,7 +1170,28 @@ impl TilingLayout { output_data.location + 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, + .. + } => ( + &output_data.output, + mapped, + output_data.location + last_geometry.loc, + ), + _ => unreachable!(), + }), + ), ) } else { None @@ -1257,20 +1282,45 @@ impl TilingLayout { if &output_data.output != output { return None; } - let root = tree.root_node_id()?; - Some( - tree.traverse_pre_order(root) - .unwrap() - .filter(|node| node.data().is_mapped(None)) - .map(|node| match node.data() { - Data::Mapped { - mapped, - last_geometry, - .. - } => (mapped, last_geometry.loc), - _ => unreachable!(), - }), - ) + + if let Some(root) = tree.root_node_id() { + Some( + 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!(), + }) + .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() .flat_map(|(mapped, loc)| {