55 lines
1.4 KiB
Rust
55 lines
1.4 KiB
Rust
|
extern crate wayland_commons as wc;
|
||
|
|
||
|
use std::env;
|
||
|
use std::os::unix::io::{FromRawFd, IntoRawFd};
|
||
|
use std::os::unix::net::UnixStream;
|
||
|
use std::path::PathBuf;
|
||
|
|
||
|
use wc::socket::{BufferedSocket, Socket};
|
||
|
use wc::wire::{Argument, ArgumentType, Message, MessageDesc};
|
||
|
|
||
|
fn main() {
|
||
|
let xdg_dir = env::var_os("XDG_RUNTIME_DIR").unwrap();
|
||
|
let mut path: PathBuf = xdg_dir.into();
|
||
|
path.push("wayland-0");
|
||
|
|
||
|
let socket = UnixStream::connect(path).unwrap();
|
||
|
let mut socket = BufferedSocket::new(unsafe { Socket::from_raw_fd(socket.into_raw_fd()) });
|
||
|
|
||
|
socket
|
||
|
.write_message(&Message {
|
||
|
sender_id: 1, // wl_display
|
||
|
opcode: 1, // get registry
|
||
|
args: vec![
|
||
|
Argument::NewId(2), // id of the created registry
|
||
|
],
|
||
|
})
|
||
|
.unwrap();
|
||
|
|
||
|
socket.flush().unwrap();
|
||
|
|
||
|
::std::thread::sleep(::std::time::Duration::from_millis(500)); // sleep 0.5 seconds
|
||
|
|
||
|
let ret = socket.read_messages(
|
||
|
|id, opcode| match (id, opcode) {
|
||
|
(2, 0) => Some(&GLOBAL_EVENT.signature),
|
||
|
_ => None,
|
||
|
},
|
||
|
|msg| {
|
||
|
println!("{:?}", msg);
|
||
|
true
|
||
|
},
|
||
|
);
|
||
|
println!("{:?}", ret);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* The registry interface
|
||
|
*/
|
||
|
|
||
|
const GLOBAL_EVENT: MessageDesc = MessageDesc {
|
||
|
name: "global",
|
||
|
signature: &[ArgumentType::Uint, ArgumentType::Str, ArgumentType::Uint],
|
||
|
since: 1,
|
||
|
};
|