oden/third-party/vendor/smithay-client-toolkit/examples/compositor_info.rs
2024-03-08 11:03:01 -08:00

80 lines
2.6 KiB
Rust

extern crate smithay_client_toolkit as sctk;
use sctk::shell::Shell;
// This is a small program that queries the compositor for
// various information and prints them on the console before exiting.
sctk::default_environment!(CompInfo, desktop);
fn main() -> Result<(), ()> {
let (env, _display, _queue) = sctk::new_default_environment!(CompInfo, desktop)
.expect("Unable to connect to a Wayland compositor");
println!("== Smithay's compositor info tool ==\n");
// print the best supported shell
println!(
"-> Most recent shell supported by the compositor is {}.",
match env.get_shell() {
Some(Shell::Wl(_)) => "the legacy wl_shell",
Some(Shell::Zxdg(_)) => "the old unstable xdg_shell (zxdg_shell_v6)",
Some(Shell::Xdg(_)) => "the current xdg_shell",
None => "nothing",
}
);
println!();
// print the outputs
let outputs = env.get_all_outputs();
println!("-> Compositor advertised {} outputs:", outputs.len());
for output in outputs {
sctk::output::with_output_info(&output, |info| {
println!(
" -> #{}: {} ({}), with scale factor of {}",
info.id, info.model, info.make, info.scale_factor
);
println!(" Possible modes are:");
for mode in &info.modes {
println!(
" -> [{}{}] {} x {} @ {}.{} Hz",
if mode.is_preferred { "p" } else { " " },
if mode.is_current { "c" } else { " " },
mode.dimensions.0,
mode.dimensions.1,
mode.refresh_rate / 1000,
mode.refresh_rate % 1000
);
}
});
}
println!();
// print the seats
let seats = env.get_all_seats();
println!("-> Compositor advertised {} seats:", seats.len());
for seat in seats {
sctk::seat::with_seat_data(&seat, |data| {
print!(" -> {} with capabilities: ", data.name);
if data.has_pointer {
print!("pointer ");
}
if data.has_keyboard {
print!("keyboard ");
}
if data.has_touch {
print!("touch ");
}
println!();
});
}
/*
if env.decorations_mgr.is_some() {
println!("-> Compositor supports server-side decorations.")
} else {
println!("-> Compositor does not support server-side decorations.")
}
*/
Ok(())
}