From 75e0b0e520a3db20a0b727c616f21776211b5b10 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Thu, 17 Jul 2025 09:09:08 +0200 Subject: [PATCH 1/2] Revert "Set top layer surfaces below fullscreen windows" This reverts commit 5c30a9da2758a0e4feba891bae9b824e7c47ea1d. --- src/renderer.rs | 2 +- src/tree/output.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/renderer.rs b/src/renderer.rs index 0c698b23..fcf99a98 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -86,7 +86,6 @@ impl Renderer<'_> { } else { render_layer!(output.layers[0]); render_layer!(output.layers[1]); - render_layer!(output.layers[2]); let non_exclusive_rect = output.non_exclusive_rect_rel.get(); let (x, y) = non_exclusive_rect.translate_inv(x, y); { @@ -183,6 +182,7 @@ impl Renderer<'_> { }; } render_stacked!(self.state.root.stacked); + render_layer!(output.layers[2]); render_layer!(output.layers[3]); render_stacked!(self.state.root.stacked_above_layers); if let Some(ws) = output.workspace.get() diff --git a/src/tree/output.rs b/src/tree/output.rs index 7aaba7a4..6515bf3e 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -1057,13 +1057,13 @@ impl OutputNode { self.title_visible.set(lower_visible); set_layer_visible!(self.layers[0], lower_visible); set_layer_visible!(self.layers[1], lower_visible); - set_layer_visible!(self.layers[2], lower_visible); for item in self.tray_items.iter() { item.set_visible(lower_visible); } if let Some(ws) = self.workspace.get() { ws.set_visible(visible); } + set_layer_visible!(self.layers[2], visible); set_layer_visible!(self.layers[3], visible); } @@ -1500,7 +1500,7 @@ impl Node for OutputNode { } } { - let res = self.find_layer_surface_at(x, y, &[OVERLAY], tree, usecase); + let res = self.find_layer_surface_at(x, y, &[OVERLAY, TOP], tree, usecase); if res.accepts_input() { return res; } @@ -1561,7 +1561,7 @@ impl Node for OutputNode { } } if search_layers { - self.find_layer_surface_at(x, y, &[TOP, BOTTOM, BACKGROUND], tree, usecase); + self.find_layer_surface_at(x, y, &[BOTTOM, BACKGROUND], tree, usecase); } FindTreeResult::AcceptsInput } From cea01768b865c95b2192e557a4dd531d91796085 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Thu, 17 Jul 2025 09:13:05 +0200 Subject: [PATCH 2/2] layer-shell: don't render top layer if there is a fullscreen window --- src/renderer.rs | 6 ++++-- src/tree/output.rs | 16 ++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/renderer.rs b/src/renderer.rs index fcf99a98..d2161089 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -81,7 +81,7 @@ impl Renderer<'_> { let th = theme.sizes.title_height.get(); let srgb_srgb = self.state.color_manager.srgb_srgb(); let srgb = &srgb_srgb.linear; - if let Some(fs) = fullscreen { + if let Some(fs) = &fullscreen { fs.node_render(self, x, y, None); } else { render_layer!(output.layers[0]); @@ -182,7 +182,9 @@ impl Renderer<'_> { }; } render_stacked!(self.state.root.stacked); - render_layer!(output.layers[2]); + if fullscreen.is_none() { + render_layer!(output.layers[2]); + } render_layer!(output.layers[3]); render_stacked!(self.state.root.stacked_above_layers); if let Some(ws) = output.workspace.get() diff --git a/src/tree/output.rs b/src/tree/output.rs index 6515bf3e..b3cce86c 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -1057,13 +1057,13 @@ impl OutputNode { self.title_visible.set(lower_visible); set_layer_visible!(self.layers[0], lower_visible); set_layer_visible!(self.layers[1], lower_visible); + set_layer_visible!(self.layers[2], lower_visible); for item in self.tray_items.iter() { item.set_visible(lower_visible); } if let Some(ws) = self.workspace.get() { ws.set_visible(visible); } - set_layer_visible!(self.layers[2], visible); set_layer_visible!(self.layers[3], visible); } @@ -1499,8 +1499,16 @@ impl Node for OutputNode { return res; } } + let mut fullscreen = None; + if let Some(ws) = self.workspace.get() { + fullscreen = ws.fullscreen.get(); + } { - let res = self.find_layer_surface_at(x, y, &[OVERLAY, TOP], tree, usecase); + let mut layers = &[OVERLAY, TOP][..]; + if fullscreen.is_some() { + layers = &[OVERLAY]; + } + let res = self.find_layer_surface_at(x, y, layers, tree, usecase); if res.accepts_input() { return res; } @@ -1511,10 +1519,6 @@ impl Node for OutputNode { return res; } } - let mut fullscreen = None; - if let Some(ws) = self.workspace.get() { - fullscreen = ws.fullscreen.get(); - } if let Some(fs) = fullscreen { tree.push(FoundNode { node: fs.clone(),