From 05613eed1efc724277a08f763e19e218b1d697ff Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 3 Feb 2024 09:44:34 +0400 Subject: Verify that pending fullscreen matches column --- src/layout/mod.rs | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src/layout/mod.rs') 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 Layout { @@ -1586,6 +1596,7 @@ mod tests { requested_size: Cell>>, min_size: Size, max_size: Size, + pending_fullscreen: Cell, } #[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) { self.0.requested_size.set(Some(size)); + self.0.pending_fullscreen.set(false); } - fn request_fullscreen(&self, _size: Size) {} + fn request_fullscreen(&self, _size: Size) { + self.0.pending_fullscreen.set(true); + } fn min_size(&self) -> Size { 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> { @@ -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 { // Give equal weight to: // - 0: the element is disabled -- cgit