Verify that pending fullscreen matches column

This commit is contained in:
Ivan Molodetskikh
2024-02-03 09:44:34 +04:00
parent b23dd4b800
commit 05613eed1e
2 changed files with 45 additions and 1 deletions
+41 -1
View File
@@ -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
+4
View File
@@ -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) {