diff --git a/src/wayland/layer_shell.rs b/src/wayland/layer_shell.rs index 9439501..e6d89bc 100644 --- a/src/wayland/layer_shell.rs +++ b/src/wayland/layer_shell.rs @@ -36,7 +36,7 @@ impl WlClient { request.write_u32(&OVERLAY, &mut offset); request.write_string(&NAMESPACE.to_string(), &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; self.layer_surface_id.store(current_id, Ordering::Relaxed); Ok(()) @@ -67,7 +67,7 @@ impl WlClient { request.write_u32(&serial, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; self.wl_surface_attach()?; self.wl_surface_commit()?; @@ -93,7 +93,7 @@ impl WlClient { request.write_u32(&width, &mut offset); request.write_u32(&height, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } @@ -115,7 +115,7 @@ impl WlClient { request.write_u32(&EXCLUSIVE, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } diff --git a/src/wayland/surface.rs b/src/wayland/surface.rs index 5f1bb4b..4c9cbd5 100644 --- a/src/wayland/surface.rs +++ b/src/wayland/surface.rs @@ -33,7 +33,7 @@ impl WlClient { let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1; request.write_u32(¤t_id, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; self.surface_id.store(current_id, Ordering::Relaxed); @@ -64,7 +64,7 @@ impl WlClient { request.write_u32(&X, &mut offset); request.write_u32(&Y, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } @@ -84,7 +84,7 @@ impl WlClient { request.write_u16(&OPCODE, &mut offset); request.write_u16(&MSG_SIZE, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } @@ -106,7 +106,7 @@ impl WlClient { request.write_u16(&MSG_SIZE, &mut offset); request.write_u32(&serial, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } diff --git a/src/wayland/wl_client.rs b/src/wayland/wl_client.rs index 81a1451..d45e660 100644 --- a/src/wayland/wl_client.rs +++ b/src/wayland/wl_client.rs @@ -9,11 +9,11 @@ struct WlHeader { } pub struct WlClient { - pub socket: UnixStream, + pub socket: Mutex, pub current_id: AtomicU32, pub registry_id: AtomicU32, pub shm_id: AtomicU32, - pub shm_pool: Arc>>, + pub shm_pool: Mutex>, pub buffer_id: AtomicU32, pub compositor_id: AtomicU32, pub surface_id: AtomicU32, @@ -31,11 +31,11 @@ impl WlClient { ))?; let mut wl_client = WlClient { - socket: sock, + socket: Mutex::new(sock), current_id: AtomicU32::from(1), registry_id: AtomicU32::from(0), shm_id: AtomicU32::from(0), - shm_pool: Arc::new(Mutex::new(None)), + shm_pool: Mutex::new(None), buffer_id: AtomicU32::from(0), compositor_id: AtomicU32::from(0), surface_id: AtomicU32::from(0), @@ -44,18 +44,13 @@ impl WlClient { layer_surface_id: AtomicU32::from(0), }; - let shm_pool = wl_client.shm_pool.clone(); + wl_client.wl_display_get_registry()?; + thread::spawn(move || { }).join(); - wl_client.wl_display_get_registry()?; - loop { - wl_client.read_event()?; - - if false { - break - } + wl_client.read_event(); } Ok(wl_client) @@ -65,7 +60,8 @@ impl WlClient { // TODO: Don't realloc header and event let mut header = vec![0u8; 8]; - self.socket.read_exact(&mut header)?; + let mut socket = self.socket.lock().unwrap(); + socket.read_exact(&mut header)?; let header = WlHeader { object: u32::from_ne_bytes(header[0..4].try_into()?), @@ -74,7 +70,8 @@ impl WlClient { }; let mut event = vec![0u8; header.size as usize - 8]; - self.socket.read_exact(&mut event)?; + socket.read_exact(&mut event)?; + drop(socket); if header.object == self.registry_id.load(Ordering::Relaxed) && header.opcode == 0 { // wl_registry::global self.wl_registry_global(&event)?; diff --git a/src/wayland/wl_registry.rs b/src/wayland/wl_registry.rs index 7860003..ea7c797 100644 --- a/src/wayland/wl_registry.rs +++ b/src/wayland/wl_registry.rs @@ -44,7 +44,7 @@ impl WlClient { let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1; request.write_u32(¤t_id, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; self.registry_id.store(current_id, Ordering::Relaxed); Ok(()) @@ -143,7 +143,7 @@ impl WlClient { request.write_u32 (&version, &mut offset); request.write_u32 (&id, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; Ok(()) } diff --git a/src/wayland/wl_shm.rs b/src/wayland/wl_shm.rs index 79638ea..22f7820 100644 --- a/src/wayland/wl_shm.rs +++ b/src/wayland/wl_shm.rs @@ -50,7 +50,7 @@ impl WlClient { ).into()); } - self.socket.send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary)?; + self.socket.lock().unwrap().send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary)?; Ok(()) } @@ -84,7 +84,7 @@ impl WlClient { request.write_u32(&stride, &mut offset); request.write_u32(&format, &mut offset); - self.socket.write(&request)?; + self.socket.lock().unwrap().write(&request)?; self.buffer_id.store(current_id, Ordering::Relaxed);