diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/layout/mod.rs | 42 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 4 |
2 files changed, 45 insertions, 1 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index e50c52a2..6b648816 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -104,6 +104,11 @@ pub trait LayoutElement: PartialEq { /// /// This will *not* switch immediately after a [`LayoutElement::request_fullscreen()`] call. fn is_fullscreen(&self) -> bool; + + /// Whether we're requesting the element to be fullscreen. + /// + /// This *will* switch immediately after a [`LayoutElement::request_fullscreen()`] call. + fn is_pending_fullscreen(&self) -> bool; } #[derive(Debug)] @@ -290,6 +295,11 @@ impl LayoutElement for Window { .states .contains(xdg_toplevel::State::Fullscreen) } + + fn is_pending_fullscreen(&self) -> bool { + self.toplevel() + .with_pending_state(|state| state.states.contains(xdg_toplevel::State::Fullscreen)) + } } impl<W: LayoutElement> Layout<W> { @@ -1586,6 +1596,7 @@ mod tests { requested_size: Cell<Option<Size<i32, Logical>>>, min_size: Size<i32, Logical>, max_size: Size<i32, Logical>, + pending_fullscreen: Cell<bool>, } #[derive(Debug, Clone)] @@ -1605,6 +1616,7 @@ mod tests { requested_size: Cell::new(None), min_size, max_size, + pending_fullscreen: Cell::new(false), })) } @@ -1661,9 +1673,12 @@ mod tests { fn request_size(&self, size: Size<i32, Logical>) { self.0.requested_size.set(Some(size)); + self.0.pending_fullscreen.set(false); } - fn request_fullscreen(&self, _size: Size<i32, Logical>) {} + fn request_fullscreen(&self, _size: Size<i32, Logical>) { + self.0.pending_fullscreen.set(true); + } fn min_size(&self) -> Size<i32, Logical> { self.0.min_size @@ -1690,6 +1705,10 @@ mod tests { fn is_fullscreen(&self) -> bool { false } + + fn is_pending_fullscreen(&self) -> bool { + self.0.pending_fullscreen.get() + } } fn arbitrary_bbox() -> impl Strategy<Value = Rectangle<i32, Logical>> { @@ -2017,6 +2036,9 @@ mod tests { Op::CloseWindow(0), Op::CloseWindow(1), Op::CloseWindow(2), + Op::FullscreenWindow(1), + Op::FullscreenWindow(2), + Op::FullscreenWindow(3), Op::FocusColumnLeft, Op::FocusColumnRight, Op::FocusWindowUp, @@ -2145,6 +2167,9 @@ mod tests { Op::CloseWindow(0), Op::CloseWindow(1), Op::CloseWindow(2), + Op::FullscreenWindow(1), + Op::FullscreenWindow(2), + Op::FullscreenWindow(3), Op::FocusColumnLeft, Op::FocusColumnRight, Op::FocusWindowUp, @@ -2498,6 +2523,21 @@ mod tests { assert!(monitors[1].workspaces[0].has_windows()); } + #[test] + fn fullscreen() { + let ops = [ + Op::AddOutput(1), + Op::AddWindow { + id: 1, + bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: (Size::from((0, 0)), Size::from((i32::MAX, i32::MAX))), + }, + Op::FullscreenWindow(1), + ]; + + check_ops(&ops); + } + fn arbitrary_spacing() -> impl Strategy<Value = u16> { // Give equal weight to: // - 0: the element is disabled diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index dfcfb68b..7324e93e 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1441,6 +1441,10 @@ impl<W: LayoutElement> Column<W> { if self.is_fullscreen { assert_eq!(self.tiles.len(), 1); } + + for tile in &self.tiles { + assert_eq!(self.is_fullscreen, tile.window().is_pending_fullscreen()); + } } fn toggle_width(&mut self) { |
