diff --git a/src/surface.rs b/src/surface.rs index 2ad7252..c28163b 100644 --- a/src/surface.rs +++ b/src/surface.rs @@ -52,11 +52,33 @@ impl WlClient { let mut request = vec![0u8; MSG_SIZE as usize]; let mut offset: usize = 0; - request.write_u32(&object, &mut offset); - request.write_u16(&OPCODE, &mut offset); + request.write_u32(&object, &mut offset); + request.write_u16(&OPCODE, &mut offset); request.write_u16(&MSG_SIZE, &mut offset); - request.write_u32(&X, &mut offset); - request.write_u32(&Y, &mut offset); + request.write_u32(&X, &mut offset); + request.write_u32(&Y, &mut offset); + + self.socket.write(&request)?; + + Ok(()) + } + + pub fn xdg_wm_base_pong(&mut self, event: &Vec) -> Result<(), Box> { + if self.xdg_wm_base_id.is_none() { + return Err(Box::new(UnsetErr("xdg_wm_base_id".to_string()))); + } + let object = self.xdg_wm_base_id.unwrap(); + const OPCODE: u16 = 3; + const MSG_SIZE: u16 = 12; + let serial = u32::from_ne_bytes(event[0..4].try_into().unwrap()); + + let mut request = vec![0u8; MSG_SIZE as usize]; + let mut offset: usize = 0; + + request.write_u32(&object, &mut offset); + request.write_u16(&OPCODE, &mut offset); + request.write_u16(&MSG_SIZE, &mut offset); + request.write_u32(&serial, &mut offset); self.socket.write(&request)?; diff --git a/src/wl_client.rs b/src/wl_client.rs index 19254b1..9cf812f 100644 --- a/src/wl_client.rs +++ b/src/wl_client.rs @@ -67,6 +67,9 @@ impl WlClient { else if self.shm_id.is_some() && header.object == self.shm_id.unwrap() && header.opcode == 0 { // wl_shm::format WlClient::wl_shm_format(&event); } + else if self.xdg_wm_base_id.is_some() && header.object == self.xdg_wm_base_id.unwrap() && header.opcode == 0 { // xdg_wm_base::ping + self.xdg_wm_base_pong(&event)?; + } else { println!( "Received event:\n\tObject: {}\n\tOpcode: {}\n\tSize: {}",