feat: honor layer shell exclusive zones

This commit is contained in:
Samuel Onoja committed 2026-09-24 16:57:56 +01:00
1 parent f2ef8de74f
commit d822920d59
1 file changed
+24 -1
+24 -1
View File
@@ -361,9 +361,11 @@ impl Ferese {
}
pub fn relayout(&mut self) {
self.arrange_layers();
let Some(bounds) = self.output_bounds() else {
return;
};
let fullscreen_bounds = self.full_output_bounds().unwrap_or(bounds);
let layout = match self.tiled_layout(bounds) {
Ok(layout) => layout,
Err(error) => {
@@ -410,7 +412,7 @@ impl Ferese {
}
let rect = if fullscreen == Some(*id) {
bounds
fullscreen_bounds
} else if fullscreen.is_some() {
return None;
} else {
@@ -772,6 +774,19 @@ impl Ferese {
fn output_bounds(&self) -> Option<Rect> {
let output = self.space.outputs().next()?;
let geometry = self.space.output_geometry(output)?;
let zone = layer_map_for_output(output).non_exclusive_zone();
Some(Rect::new(
(geometry.loc.x + zone.loc.x) as f64,
(geometry.loc.y + zone.loc.y) as f64,
zone.size.w.max(0) as f64,
zone.size.h.max(0) as f64,
))
}
fn full_output_bounds(&self) -> Option<Rect> {
let output = self.space.outputs().next()?;
let geometry = self.space.output_geometry(output)?;
Some(Rect::new(
geometry.loc.x as f64,
@@ -781,6 +796,14 @@ impl Ferese {
))
}
fn arrange_layers(&self) {
let outputs = self.space.outputs().cloned().collect::<Vec<_>>();
for output in outputs {
layer_map_for_output(&output).arrange();
}
}
fn logical_window_rect(&self, window: WindowId, bounds: Rect) -> Option<Rect> {
let workspace = self.workspaces.workspace_for_window(window)?;
let workspace = self.workspaces.workspace(workspace)?;