Extend output profiles with monitor reconciliation and mirroring

This commit is contained in:
Samuel Onoja committed 2026-10-02 12:08:19 +01:00
1 parent ac184576f6
commit d14cd3cbd2
23 files changed
+3614 -474

No files matched your search

+41
View File
@@ -250,6 +250,47 @@ mod tests {
assert!(!state.inactive_dim.enabled);
}
#[test]
fn invalid_monitor_reload_keeps_last_good_runtime_configuration() {
const CHILD: &str = "FERESE_OUTPUT_RELOAD_TEST_CHILD";
if std::env::var_os(CHILD).is_none() {
use std::os::unix::fs::PermissionsExt;
let directory = Directory::new();
std::fs::set_permissions(&directory.0, std::fs::Permissions::from_mode(0o700)).unwrap();
let result = std::process::Command::new(std::env::current_exe().unwrap())
.args([
"--exact",
"reload::tests::invalid_monitor_reload_keeps_last_good_runtime_configuration",
"--nocapture",
])
.env(CHILD, "1")
.env("XDG_RUNTIME_DIR", &directory.0)
.env("XDG_CONFIG_HOME", &directory.0)
.env_remove("FERESE_SOCKET")
.output()
.unwrap();
assert!(result.status.success(), "{}", String::from_utf8_lossy(&result.stderr));
return;
}
let directory = Directory::new();
let source = "output-profile mobile { output eDP-1 scale=1.75; }";
let (_, runtime, _) = crate::theme::prepare(source, &directory.0).unwrap();
let mut event_loop = smithay::reexports::calloop::EventLoop::try_new().unwrap();
let display = smithay::reexports::wayland_server::Display::new().unwrap();
let mut state = crate::Ferese::new(&mut event_loop, display, runtime).unwrap();
state.config_source = Some(source.into());
let accepted = state.output_profiles.clone();
for invalid in [
"output-profile bad { output eDP-1 scale=0; }",
"output-profile bad layout=\"mirror\" { output eDP-1; }",
"output-profile mobile { output eDP-1; }\noutput-profile mobile { output DP-1; }",
] {
assert!(state.reload_config_source(invalid.into()).is_err());
assert_eq!(state.output_profiles, accepted);
assert_eq!(state.config_source.as_deref(), Some(source));
}
}
#[test]
fn runtime_validation_rejects_bad_edits_before_application() {
for source in [