extern crate x11rb;
use x11rb::connection::Connection;
use x11rb::errors::ReplyError;
use x11rb::protocol::xproto::ConnectionExt as _;
use x11rb::protocol::Event;
use x11rb::wrapper::ConnectionExt as _;
const INVALID_WINDOW: u32 = 0;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let (conn, _) = connect(None).unwrap();
let res = conn.get_geometry(INVALID_WINDOW)?.reply();
assert!(res.is_err());
conn.get_geometry(INVALID_WINDOW)?
.discard_reply_and_errors();
let cookie = conn.get_geometry(INVALID_WINDOW)?;
let seq1 = cookie.sequence_number();
let res = cookie.reply_unchecked()?;
assert!(res.is_none());
let cookie = conn.get_geometry(INVALID_WINDOW)?;
let seq2 = cookie.sequence_number();
drop(cookie);
match conn.destroy_window(INVALID_WINDOW)?.check() {
Err(ReplyError::X11Error(_)) => {}
e => panic!("{e:?} unexpected"),
}
conn.destroy_window(INVALID_WINDOW)?.ignore_error();
let cookie = conn.destroy_window(INVALID_WINDOW)?;
let seq3 = cookie.sequence_number();
drop(cookie);
conn.sync()?;
for &seq in &[seq1, seq2, seq3] {
let (event, seq2) = conn.wait_for_event_with_sequence()?;
match event {
Event::Error(_) => {}
event => panic!("Unexpectedly got {event:?} instead of an X11 error"),
}
assert_eq!(seq, seq2);
}
assert!(conn.poll_for_event()?.is_none());
println!("Done");
Ok(())
}
include!("integration_test_util/connect.rs");