mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
Verify that pending fullscreen matches column
This commit is contained in:
+41
-1
@@ -104,6 +104,11 @@ pub trait LayoutElement: PartialEq {
|
|||||||
///
|
///
|
||||||
/// This will *not* switch immediately after a [`LayoutElement::request_fullscreen()`] call.
|
/// This will *not* switch immediately after a [`LayoutElement::request_fullscreen()`] call.
|
||||||
fn is_fullscreen(&self) -> bool;
|
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)]
|
#[derive(Debug)]
|
||||||
@@ -290,6 +295,11 @@ impl LayoutElement for Window {
|
|||||||
.states
|
.states
|
||||||
.contains(xdg_toplevel::State::Fullscreen)
|
.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> {
|
impl<W: LayoutElement> Layout<W> {
|
||||||
@@ -1586,6 +1596,7 @@ mod tests {
|
|||||||
requested_size: Cell<Option<Size<i32, Logical>>>,
|
requested_size: Cell<Option<Size<i32, Logical>>>,
|
||||||
min_size: Size<i32, Logical>,
|
min_size: Size<i32, Logical>,
|
||||||
max_size: Size<i32, Logical>,
|
max_size: Size<i32, Logical>,
|
||||||
|
pending_fullscreen: Cell<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
@@ -1605,6 +1616,7 @@ mod tests {
|
|||||||
requested_size: Cell::new(None),
|
requested_size: Cell::new(None),
|
||||||
min_size,
|
min_size,
|
||||||
max_size,
|
max_size,
|
||||||
|
pending_fullscreen: Cell::new(false),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1661,9 +1673,12 @@ mod tests {
|
|||||||
|
|
||||||
fn request_size(&self, size: Size<i32, Logical>) {
|
fn request_size(&self, size: Size<i32, Logical>) {
|
||||||
self.0.requested_size.set(Some(size));
|
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> {
|
fn min_size(&self) -> Size<i32, Logical> {
|
||||||
self.0.min_size
|
self.0.min_size
|
||||||
@@ -1690,6 +1705,10 @@ mod tests {
|
|||||||
fn is_fullscreen(&self) -> bool {
|
fn is_fullscreen(&self) -> bool {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_pending_fullscreen(&self) -> bool {
|
||||||
|
self.0.pending_fullscreen.get()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn arbitrary_bbox() -> impl Strategy<Value = Rectangle<i32, Logical>> {
|
fn arbitrary_bbox() -> impl Strategy<Value = Rectangle<i32, Logical>> {
|
||||||
@@ -2017,6 +2036,9 @@ mod tests {
|
|||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
Op::CloseWindow(1),
|
Op::CloseWindow(1),
|
||||||
Op::CloseWindow(2),
|
Op::CloseWindow(2),
|
||||||
|
Op::FullscreenWindow(1),
|
||||||
|
Op::FullscreenWindow(2),
|
||||||
|
Op::FullscreenWindow(3),
|
||||||
Op::FocusColumnLeft,
|
Op::FocusColumnLeft,
|
||||||
Op::FocusColumnRight,
|
Op::FocusColumnRight,
|
||||||
Op::FocusWindowUp,
|
Op::FocusWindowUp,
|
||||||
@@ -2145,6 +2167,9 @@ mod tests {
|
|||||||
Op::CloseWindow(0),
|
Op::CloseWindow(0),
|
||||||
Op::CloseWindow(1),
|
Op::CloseWindow(1),
|
||||||
Op::CloseWindow(2),
|
Op::CloseWindow(2),
|
||||||
|
Op::FullscreenWindow(1),
|
||||||
|
Op::FullscreenWindow(2),
|
||||||
|
Op::FullscreenWindow(3),
|
||||||
Op::FocusColumnLeft,
|
Op::FocusColumnLeft,
|
||||||
Op::FocusColumnRight,
|
Op::FocusColumnRight,
|
||||||
Op::FocusWindowUp,
|
Op::FocusWindowUp,
|
||||||
@@ -2498,6 +2523,21 @@ mod tests {
|
|||||||
assert!(monitors[1].workspaces[0].has_windows());
|
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> {
|
fn arbitrary_spacing() -> impl Strategy<Value = u16> {
|
||||||
// Give equal weight to:
|
// Give equal weight to:
|
||||||
// - 0: the element is disabled
|
// - 0: the element is disabled
|
||||||
|
|||||||
@@ -1441,6 +1441,10 @@ impl<W: LayoutElement> Column<W> {
|
|||||||
if self.is_fullscreen {
|
if self.is_fullscreen {
|
||||||
assert_eq!(self.tiles.len(), 1);
|
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) {
|
fn toggle_width(&mut self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user