mirror of
https://github.com/YaLTeR/niri.git
synced 2025-10-06 00:23:14 +02:00
Implement client-server test infra and window opening tests
These tests make a real Niri instance and real Wayland clients (via manual wayland-rs implementation), both on the same event loop local to the test. This allows testing the full Wayland interaction, including arbitrary event ordering and delays. To start off, add a massive powerset test for the settings that influence where a window may open.
This commit is contained in:
56
Cargo.lock
generated
56
Cargo.lock
generated
@@ -580,6 +580,18 @@ dependencies = [
|
||||
"wayland-client",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "calloop-wayland-source"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "876a7a1dbbe026a55ef47a500b123af5a9a0914520f061d467914cf21be95daf"
|
||||
dependencies = [
|
||||
"calloop 0.14.1",
|
||||
"rustix 0.38.38",
|
||||
"wayland-backend",
|
||||
"wayland-client",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.1.31"
|
||||
@@ -821,6 +833,25 @@ dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
|
||||
dependencies = [
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.20"
|
||||
@@ -2410,6 +2441,7 @@ dependencies = [
|
||||
"bitflags 2.6.0",
|
||||
"bytemuck",
|
||||
"calloop 0.14.1",
|
||||
"calloop-wayland-source 0.4.0",
|
||||
"clap",
|
||||
"directories",
|
||||
"drm-ffi",
|
||||
@@ -2435,6 +2467,7 @@ dependencies = [
|
||||
"profiling",
|
||||
"proptest",
|
||||
"proptest-derive",
|
||||
"rayon",
|
||||
"sd-notify",
|
||||
"serde",
|
||||
"serde_json",
|
||||
@@ -2445,6 +2478,7 @@ dependencies = [
|
||||
"tracy-client",
|
||||
"url",
|
||||
"wayland-backend",
|
||||
"wayland-client",
|
||||
"wayland-scanner",
|
||||
"xcursor",
|
||||
"xshell",
|
||||
@@ -3337,6 +3371,26 @@ version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.4.1"
|
||||
@@ -3725,7 +3779,7 @@ checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
|
||||
dependencies = [
|
||||
"bitflags 2.6.0",
|
||||
"calloop 0.13.0",
|
||||
"calloop-wayland-source",
|
||||
"calloop-wayland-source 0.3.0",
|
||||
"cursor-icon",
|
||||
"libc",
|
||||
"log",
|
||||
|
@@ -107,9 +107,12 @@ features = [
|
||||
|
||||
[dev-dependencies]
|
||||
approx = "0.5.1"
|
||||
calloop-wayland-source = "0.4.0"
|
||||
insta.workspace = true
|
||||
proptest = "1.5.0"
|
||||
proptest-derive = { version = "0.5.0", features = ["boxed_union"] }
|
||||
rayon = "1.10.0"
|
||||
wayland-client = "0.31.7"
|
||||
xshell = "0.2.6"
|
||||
|
||||
[features]
|
||||
|
@@ -28,3 +28,6 @@ pub mod pw_utils;
|
||||
|
||||
#[cfg(not(feature = "xdp-gnome-screencast"))]
|
||||
pub use dummy_pw_utils as pw_utils;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
536
src/tests/client.rs
Normal file
536
src/tests/client.rs
Normal file
@@ -0,0 +1,536 @@
|
||||
use std::cmp::min;
|
||||
use std::collections::HashMap;
|
||||
use std::ffi::OsStr;
|
||||
use std::fmt::Write as _;
|
||||
use std::os::unix::net::UnixStream;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use std::{env, fmt};
|
||||
|
||||
use calloop::EventLoop;
|
||||
use calloop_wayland_source::WaylandSource;
|
||||
use single_pixel_buffer::v1::client::wp_single_pixel_buffer_manager_v1::WpSinglePixelBufferManagerV1;
|
||||
use smithay::reexports::wayland_protocols::wp::single_pixel_buffer;
|
||||
use smithay::reexports::wayland_protocols::wp::viewporter::client::wp_viewport::WpViewport;
|
||||
use smithay::reexports::wayland_protocols::wp::viewporter::client::wp_viewporter::WpViewporter;
|
||||
use smithay::reexports::wayland_protocols::xdg::shell::client::xdg_surface::{self, XdgSurface};
|
||||
use smithay::reexports::wayland_protocols::xdg::shell::client::xdg_toplevel::{self, XdgToplevel};
|
||||
use smithay::reexports::wayland_protocols::xdg::shell::client::xdg_wm_base::{self, XdgWmBase};
|
||||
use wayland_backend::client::Backend;
|
||||
use wayland_client::globals::Global;
|
||||
use wayland_client::protocol::wl_buffer::{self, WlBuffer};
|
||||
use wayland_client::protocol::wl_callback::{self, WlCallback};
|
||||
use wayland_client::protocol::wl_compositor::WlCompositor;
|
||||
use wayland_client::protocol::wl_display::WlDisplay;
|
||||
use wayland_client::protocol::wl_output::{self, WlOutput};
|
||||
use wayland_client::protocol::wl_registry::{self, WlRegistry};
|
||||
use wayland_client::protocol::wl_surface::{self, WlSurface};
|
||||
use wayland_client::{Connection, Dispatch, Proxy as _, QueueHandle};
|
||||
|
||||
use crate::utils::id::IdCounter;
|
||||
|
||||
pub struct Client {
|
||||
pub id: ClientId,
|
||||
pub event_loop: EventLoop<'static, State>,
|
||||
pub connection: Connection,
|
||||
pub qh: QueueHandle<State>,
|
||||
pub display: WlDisplay,
|
||||
pub state: State,
|
||||
}
|
||||
|
||||
pub struct State {
|
||||
pub qh: QueueHandle<State>,
|
||||
|
||||
pub globals: Vec<Global>,
|
||||
pub outputs: HashMap<WlOutput, String>,
|
||||
|
||||
pub compositor: Option<WlCompositor>,
|
||||
pub xdg_wm_base: Option<XdgWmBase>,
|
||||
pub spbm: Option<WpSinglePixelBufferManagerV1>,
|
||||
pub viewporter: Option<WpViewporter>,
|
||||
|
||||
pub windows: Vec<Window>,
|
||||
}
|
||||
|
||||
pub struct Window {
|
||||
pub qh: QueueHandle<State>,
|
||||
pub spbm: WpSinglePixelBufferManagerV1,
|
||||
|
||||
pub surface: WlSurface,
|
||||
pub xdg_surface: XdgSurface,
|
||||
pub xdg_toplevel: XdgToplevel,
|
||||
pub viewport: WpViewport,
|
||||
pub pending_configure: Configure,
|
||||
pub configures_received: Vec<(u32, Configure)>,
|
||||
pub close_requsted: bool,
|
||||
|
||||
pub configures_looked_at: usize,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct Configure {
|
||||
pub size: (i32, i32),
|
||||
pub bounds: Option<(i32, i32)>,
|
||||
pub states: Vec<xdg_toplevel::State>,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct SyncData {
|
||||
pub done: AtomicBool,
|
||||
}
|
||||
|
||||
static CLIENT_ID_COUNTER: IdCounter = IdCounter::new();
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct ClientId(u64);
|
||||
|
||||
impl ClientId {
|
||||
fn next() -> ClientId {
|
||||
ClientId(CLIENT_ID_COUNTER.next())
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Configure {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "size: {} × {}, ", self.size.0, self.size.1)?;
|
||||
if let Some(bounds) = self.bounds {
|
||||
write!(f, "bounds: {} × {}, ", bounds.0, bounds.1)?;
|
||||
} else {
|
||||
write!(f, "bounds: none, ")?;
|
||||
}
|
||||
write!(f, "states: {:?}", self.states)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn connect(socket_name: &OsStr) -> Connection {
|
||||
let mut socket_path = PathBuf::from(env::var_os("XDG_RUNTIME_DIR").unwrap());
|
||||
socket_path.push(socket_name);
|
||||
|
||||
let stream = UnixStream::connect(socket_path).unwrap();
|
||||
let backend = Backend::connect(stream).unwrap();
|
||||
Connection::from_backend(backend)
|
||||
}
|
||||
|
||||
impl Client {
|
||||
pub fn new(socket_name: &OsStr) -> Self {
|
||||
let id = ClientId::next();
|
||||
|
||||
let event_loop = EventLoop::try_new().unwrap();
|
||||
let connection = connect(socket_name);
|
||||
let queue = connection.new_event_queue();
|
||||
let qh = queue.handle();
|
||||
WaylandSource::new(connection.clone(), queue)
|
||||
.insert(event_loop.handle())
|
||||
.unwrap();
|
||||
|
||||
let display = connection.display();
|
||||
let _registry = display.get_registry(&qh, ());
|
||||
connection.flush().unwrap();
|
||||
|
||||
let state = State {
|
||||
qh: qh.clone(),
|
||||
globals: Vec::new(),
|
||||
outputs: HashMap::new(),
|
||||
compositor: None,
|
||||
xdg_wm_base: None,
|
||||
spbm: None,
|
||||
viewporter: None,
|
||||
windows: Vec::new(),
|
||||
};
|
||||
|
||||
Self {
|
||||
id,
|
||||
event_loop,
|
||||
connection,
|
||||
qh,
|
||||
display,
|
||||
state,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn dispatch(&mut self) {
|
||||
self.event_loop
|
||||
.dispatch(Duration::ZERO, &mut self.state)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
pub fn send_sync(&self) -> Arc<SyncData> {
|
||||
let data = Arc::new(SyncData::default());
|
||||
self.display.sync(&self.qh, data.clone());
|
||||
self.connection.flush().unwrap();
|
||||
data
|
||||
}
|
||||
|
||||
pub fn create_window(&mut self) -> &mut Window {
|
||||
self.state.create_window()
|
||||
}
|
||||
|
||||
pub fn window(&mut self, surface: &WlSurface) -> &mut Window {
|
||||
self.state.window(surface)
|
||||
}
|
||||
|
||||
pub fn output(&mut self, name: &str) -> WlOutput {
|
||||
self.state
|
||||
.outputs
|
||||
.iter()
|
||||
.find(|(_, v)| *v == name)
|
||||
.unwrap()
|
||||
.0
|
||||
.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl State {
|
||||
pub fn create_window(&mut self) -> &mut Window {
|
||||
let compositor = self.compositor.as_ref().unwrap();
|
||||
let xdg_wm_base = self.xdg_wm_base.as_ref().unwrap();
|
||||
let viewporter = self.viewporter.as_ref().unwrap();
|
||||
|
||||
let surface = compositor.create_surface(&self.qh, ());
|
||||
let xdg_surface = xdg_wm_base.get_xdg_surface(&surface, &self.qh, ());
|
||||
let xdg_toplevel = xdg_surface.get_toplevel(&self.qh, ());
|
||||
let viewport = viewporter.get_viewport(&surface, &self.qh, ());
|
||||
|
||||
let window = Window {
|
||||
qh: self.qh.clone(),
|
||||
spbm: self.spbm.clone().unwrap(),
|
||||
|
||||
surface,
|
||||
xdg_surface,
|
||||
xdg_toplevel,
|
||||
viewport,
|
||||
pending_configure: Configure::default(),
|
||||
configures_received: Vec::new(),
|
||||
close_requsted: false,
|
||||
|
||||
configures_looked_at: 0,
|
||||
};
|
||||
|
||||
self.windows.push(window);
|
||||
self.windows.last_mut().unwrap()
|
||||
}
|
||||
|
||||
pub fn window(&mut self, surface: &WlSurface) -> &mut Window {
|
||||
self.windows
|
||||
.iter_mut()
|
||||
.find(|w| w.surface == *surface)
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl Window {
|
||||
pub fn commit(&self) {
|
||||
self.surface.commit();
|
||||
}
|
||||
|
||||
pub fn ack_last(&self) {
|
||||
let serial = self.configures_received.last().unwrap().0;
|
||||
self.xdg_surface.ack_configure(serial);
|
||||
}
|
||||
|
||||
pub fn ack_last_and_commit(&self) {
|
||||
self.ack_last();
|
||||
self.commit();
|
||||
}
|
||||
|
||||
pub fn attach_new_buffer(&self) {
|
||||
let buffer = self.spbm.create_u32_rgba_buffer(0, 0, 0, 0, &self.qh, ());
|
||||
self.surface.attach(Some(&buffer), 0, 0);
|
||||
}
|
||||
|
||||
pub fn set_size(&self, w: u16, h: u16) {
|
||||
self.viewport.set_destination(i32::from(w), i32::from(h));
|
||||
}
|
||||
|
||||
pub fn set_fullscreen(&self, output: Option<&WlOutput>) {
|
||||
self.xdg_toplevel.set_fullscreen(output);
|
||||
}
|
||||
|
||||
pub fn unset_fullscreen(&self) {
|
||||
self.xdg_toplevel.unset_fullscreen();
|
||||
}
|
||||
|
||||
pub fn set_parent(&self, parent: Option<&XdgToplevel>) {
|
||||
self.xdg_toplevel.set_parent(parent);
|
||||
}
|
||||
|
||||
pub fn set_title(&self, title: &str) {
|
||||
self.xdg_toplevel.set_title(title.to_owned());
|
||||
}
|
||||
|
||||
pub fn recent_configures(&mut self) -> impl Iterator<Item = &Configure> {
|
||||
let start = self.configures_looked_at;
|
||||
self.configures_looked_at = self.configures_received.len();
|
||||
self.configures_received[start..].iter().map(|(_, c)| c)
|
||||
}
|
||||
|
||||
pub fn format_recent_configures(&mut self) -> String {
|
||||
let mut buf = String::new();
|
||||
for configure in self.recent_configures() {
|
||||
if !buf.is_empty() {
|
||||
buf.push('\n');
|
||||
}
|
||||
write!(buf, "{configure}").unwrap();
|
||||
}
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlCallback, Arc<SyncData>> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WlCallback,
|
||||
event: <WlCallback as wayland_client::Proxy>::Event,
|
||||
data: &Arc<SyncData>,
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
wl_callback::Event::Done { .. } => data.done.store(true, Ordering::Relaxed),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlRegistry, ()> for State {
|
||||
fn event(
|
||||
state: &mut Self,
|
||||
registry: &WlRegistry,
|
||||
event: <WlRegistry as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
qh: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
wl_registry::Event::Global {
|
||||
name,
|
||||
interface,
|
||||
version,
|
||||
} => {
|
||||
if interface == WlCompositor::interface().name {
|
||||
let version = min(version, WlCompositor::interface().version);
|
||||
state.compositor = Some(registry.bind(name, version, qh, ()));
|
||||
} else if interface == XdgWmBase::interface().name {
|
||||
let version = min(version, XdgWmBase::interface().version);
|
||||
state.xdg_wm_base = Some(registry.bind(name, version, qh, ()));
|
||||
} else if interface == WpSinglePixelBufferManagerV1::interface().name {
|
||||
let version = min(version, WpSinglePixelBufferManagerV1::interface().version);
|
||||
state.spbm = Some(registry.bind(name, version, qh, ()));
|
||||
} else if interface == WpViewporter::interface().name {
|
||||
let version = min(version, WpViewporter::interface().version);
|
||||
state.viewporter = Some(registry.bind(name, version, qh, ()));
|
||||
} else if interface == WlOutput::interface().name {
|
||||
let version = min(version, WlOutput::interface().version);
|
||||
let output = registry.bind(name, version, qh, ());
|
||||
state.outputs.insert(output, String::new());
|
||||
}
|
||||
|
||||
let global = Global {
|
||||
name,
|
||||
interface,
|
||||
version,
|
||||
};
|
||||
state.globals.push(global);
|
||||
}
|
||||
wl_registry::Event::GlobalRemove { .. } => (),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlOutput, ()> for State {
|
||||
fn event(
|
||||
state: &mut Self,
|
||||
output: &WlOutput,
|
||||
event: <WlOutput as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
wl_output::Event::Geometry { .. } => (),
|
||||
wl_output::Event::Mode { .. } => (),
|
||||
wl_output::Event::Done => (),
|
||||
wl_output::Event::Scale { .. } => (),
|
||||
wl_output::Event::Name { name } => {
|
||||
*state.outputs.get_mut(output).unwrap() = name;
|
||||
}
|
||||
wl_output::Event::Description { .. } => (),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlCompositor, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WlCompositor,
|
||||
_event: <WlCompositor as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<XdgWmBase, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
xdg_wm_base: &XdgWmBase,
|
||||
event: <XdgWmBase as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
xdg_wm_base::Event::Ping { serial } => {
|
||||
xdg_wm_base.pong(serial);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlSurface, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WlSurface,
|
||||
event: <WlSurface as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
wl_surface::Event::Enter { .. } => (),
|
||||
wl_surface::Event::Leave { .. } => (),
|
||||
wl_surface::Event::PreferredBufferScale { .. } => (),
|
||||
wl_surface::Event::PreferredBufferTransform { .. } => (),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<XdgSurface, ()> for State {
|
||||
fn event(
|
||||
state: &mut Self,
|
||||
xdg_surface: &XdgSurface,
|
||||
event: <XdgSurface as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
xdg_surface::Event::Configure { serial } => {
|
||||
let window = state
|
||||
.windows
|
||||
.iter_mut()
|
||||
.find(|w| w.xdg_surface == *xdg_surface)
|
||||
.unwrap();
|
||||
let configure = window.pending_configure.clone();
|
||||
window.configures_received.push((serial, configure));
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<XdgToplevel, ()> for State {
|
||||
fn event(
|
||||
state: &mut Self,
|
||||
xdg_toplevel: &XdgToplevel,
|
||||
event: <XdgToplevel as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
let window = state
|
||||
.windows
|
||||
.iter_mut()
|
||||
.find(|w| w.xdg_toplevel == *xdg_toplevel)
|
||||
.unwrap();
|
||||
|
||||
match event {
|
||||
xdg_toplevel::Event::Configure {
|
||||
width,
|
||||
height,
|
||||
states,
|
||||
} => {
|
||||
let configure = &mut window.pending_configure;
|
||||
configure.size = (width, height);
|
||||
configure.states = states
|
||||
.chunks_exact(4)
|
||||
.flat_map(TryInto::<[u8; 4]>::try_into)
|
||||
.map(u32::from_ne_bytes)
|
||||
.flat_map(xdg_toplevel::State::try_from)
|
||||
.collect();
|
||||
}
|
||||
xdg_toplevel::Event::Close => {
|
||||
window.close_requsted = true;
|
||||
}
|
||||
xdg_toplevel::Event::ConfigureBounds { width, height } => {
|
||||
window.pending_configure.bounds = Some((width, height));
|
||||
}
|
||||
xdg_toplevel::Event::WmCapabilities { .. } => (),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WlBuffer, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WlBuffer,
|
||||
event: <WlBuffer as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
match event {
|
||||
wl_buffer::Event::Release => (),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WpSinglePixelBufferManagerV1, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WpSinglePixelBufferManagerV1,
|
||||
_event: <WpSinglePixelBufferManagerV1 as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WpViewporter, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WpViewporter,
|
||||
_event: <WpViewporter as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Dispatch<WpViewport, ()> for State {
|
||||
fn event(
|
||||
_state: &mut Self,
|
||||
_proxy: &WpViewport,
|
||||
_event: <WpViewport as wayland_client::Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &Connection,
|
||||
_qhandle: &QueueHandle<Self>,
|
||||
) {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
124
src/tests/fixture.rs
Normal file
124
src/tests/fixture.rs
Normal file
@@ -0,0 +1,124 @@
|
||||
use std::os::fd::AsFd as _;
|
||||
use std::sync::atomic::Ordering;
|
||||
use std::time::Duration;
|
||||
|
||||
use calloop::generic::Generic;
|
||||
use calloop::{EventLoop, Interest, LoopHandle, Mode, PostAction};
|
||||
use niri_config::Config;
|
||||
|
||||
use super::client::{Client, ClientId};
|
||||
use super::server::Server;
|
||||
use crate::niri::Niri;
|
||||
|
||||
pub struct Fixture {
|
||||
pub event_loop: EventLoop<'static, State>,
|
||||
pub handle: LoopHandle<'static, State>,
|
||||
pub state: State,
|
||||
}
|
||||
|
||||
pub struct State {
|
||||
pub server: Server,
|
||||
pub clients: Vec<Client>,
|
||||
}
|
||||
|
||||
impl Fixture {
|
||||
pub fn new() -> Self {
|
||||
Self::with_config(Config::default())
|
||||
}
|
||||
|
||||
pub fn with_config(config: Config) -> Self {
|
||||
let event_loop = EventLoop::try_new().unwrap();
|
||||
let handle = event_loop.handle();
|
||||
|
||||
let server = Server::new(config);
|
||||
let fd = server.event_loop.as_fd().try_clone_to_owned().unwrap();
|
||||
let source = Generic::new(fd, Interest::READ, Mode::Level);
|
||||
handle
|
||||
.insert_source(source, |_, _, state: &mut State| {
|
||||
state.server.dispatch();
|
||||
Ok(PostAction::Continue)
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
let state = State {
|
||||
server,
|
||||
clients: Vec::new(),
|
||||
};
|
||||
|
||||
Self {
|
||||
event_loop,
|
||||
handle,
|
||||
state,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn dispatch(&mut self) {
|
||||
self.event_loop
|
||||
.dispatch(Duration::ZERO, &mut self.state)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
pub fn niri_state(&mut self) -> &mut crate::niri::State {
|
||||
&mut self.state.server.state
|
||||
}
|
||||
|
||||
pub fn niri(&mut self) -> &mut Niri {
|
||||
&mut self.niri_state().niri
|
||||
}
|
||||
|
||||
pub fn add_output(&mut self, n: u8, size: (u16, u16)) {
|
||||
let state = self.niri_state();
|
||||
let niri = &mut state.niri;
|
||||
state.backend.headless().add_output(niri, n, size);
|
||||
}
|
||||
|
||||
pub fn add_client(&mut self) -> ClientId {
|
||||
let client = Client::new(&self.state.server.state.niri.socket_name);
|
||||
let id = client.id;
|
||||
|
||||
let fd = client.event_loop.as_fd().try_clone_to_owned().unwrap();
|
||||
let source = Generic::new(fd, Interest::READ, Mode::Level);
|
||||
self.handle
|
||||
.insert_source(source, move |_, _, state: &mut State| {
|
||||
state.client(id).dispatch();
|
||||
Ok(PostAction::Continue)
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
self.state.clients.push(client);
|
||||
self.roundtrip(id);
|
||||
id
|
||||
}
|
||||
|
||||
pub fn client(&mut self, id: ClientId) -> &mut Client {
|
||||
self.state.client(id)
|
||||
}
|
||||
|
||||
pub fn roundtrip(&mut self, id: ClientId) {
|
||||
let client = self.state.client(id);
|
||||
let data = client.send_sync();
|
||||
while !data.done.load(Ordering::Relaxed) {
|
||||
self.dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
/// Rountrip twice in a row.
|
||||
///
|
||||
/// For some reason, when running tests on many threads at once, a single roundtrip is
|
||||
/// sometimes not sufficient to get the configure events to the client.
|
||||
///
|
||||
/// I suspect that this is because these configure events are sent from the niri loop callback,
|
||||
/// so they arrive after the sync done event and don't get processed in that client dispatch
|
||||
/// cycle. I'm not sure why this would be dependent on multithreading. But if this is indeed
|
||||
/// the issue, then a double roundtrip fixes it.
|
||||
pub fn double_roundtrip(&mut self, id: ClientId) {
|
||||
self.roundtrip(id);
|
||||
self.roundtrip(id);
|
||||
}
|
||||
}
|
||||
|
||||
impl State {
|
||||
pub fn client(&mut self, id: ClientId) -> &mut Client {
|
||||
self.clients.iter_mut().find(|c| c.id == id).unwrap()
|
||||
}
|
||||
}
|
7
src/tests/mod.rs
Normal file
7
src/tests/mod.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
use fixture::Fixture;
|
||||
|
||||
mod client;
|
||||
mod fixture;
|
||||
mod server;
|
||||
|
||||
mod window_opening;
|
37
src/tests/server.rs
Normal file
37
src/tests/server.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use std::time::Duration;
|
||||
|
||||
use calloop::EventLoop;
|
||||
use niri_config::Config;
|
||||
use smithay::reexports::wayland_server::Display;
|
||||
|
||||
use crate::niri::State;
|
||||
|
||||
pub struct Server {
|
||||
pub event_loop: EventLoop<'static, State>,
|
||||
pub state: State,
|
||||
}
|
||||
|
||||
impl Server {
|
||||
pub fn new(config: Config) -> Self {
|
||||
let event_loop = EventLoop::try_new().unwrap();
|
||||
let handle = event_loop.handle();
|
||||
let display = Display::new().unwrap();
|
||||
let state = State::new(
|
||||
config,
|
||||
handle.clone(),
|
||||
event_loop.get_signal(),
|
||||
display,
|
||||
true,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
Self { event_loop, state }
|
||||
}
|
||||
|
||||
pub fn dispatch(&mut self) {
|
||||
self.event_loop
|
||||
.dispatch(Duration::ZERO, &mut self.state)
|
||||
.unwrap();
|
||||
self.state.refresh_and_flush_clients();
|
||||
}
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "config:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "config:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen false\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 936 × 1048, bounds: 1888 × 1048, states: []
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AA\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
@@ -0,0 +1,15 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: AN\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BN\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: B1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,13 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nset parent: B2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-2
|
||||
final workspace: 0 (ws-2)
|
||||
|
||||
initial configure:
|
||||
size: 1920 × 1080, bounds: 1888 × 1048, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "want fullscreen: BU\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "config:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-fullscreen true\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen]
|
||||
|
||||
post-map configures:
|
||||
size: 1280 × 720, bounds: 1248 × 688, states: [Fullscreen, Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A1\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-on-output \"headless-1\"\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-1\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
@@ -0,0 +1,14 @@
|
||||
---
|
||||
source: src/tests/window_opening.rs
|
||||
description: "set parent: A2\nconfig:\nworkspace \"ws-1\" {\n open-on-output \"headless-1\"\n}\n\nworkspace \"ws-2\" {\n open-on-output \"headless-2\"\n}\n\nwindow-rule {\n exclude title=\"parent\"\n\n open-on-output \"headless-1\"\n open-fullscreen false\n}\n\nwindow-rule {\n match title=\"parent\"\n open-on-output \"headless-2\"\n}"
|
||||
expression: snapshot
|
||||
snapshot_kind: text
|
||||
---
|
||||
final monitor: headless-1
|
||||
final workspace: 0 (ws-1)
|
||||
|
||||
initial configure:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: []
|
||||
|
||||
post-map configures:
|
||||
size: 616 × 688, bounds: 1248 × 688, states: [Activated]
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user