diff --git a/libs/scrap/src/x11/server.rs b/libs/scrap/src/x11/server.rs index e2ffdc74b..f9983f7cf 100644 --- a/libs/scrap/src/x11/server.rs +++ b/libs/scrap/src/x11/server.rs @@ -1,3 +1,4 @@ +use hbb_common::libc; use std::ptr; use std::rc::Rc; @@ -99,11 +100,16 @@ unsafe fn check_x11_shm_available(c: *mut xcb_connection_t) -> Result<(), Error> if reply.is_null() { // TODO: Should seperate SHM disabled from SHM not supported? return Err(Error::UnsupportedExtension); - } else if e.is_null() { - return Ok(()); } else { - // TODO: Does "This request does never generate any errors" in manual means `e` is never set, so we would never reach here? - return Err(Error::Generic); + // https://github.com/FFmpeg/FFmpeg/blob/6229e4ac425b4566446edefb67d5c225eb397b58/libavdevice/xcbgrab.c#L229 + libc::free(reply as *mut _); + if e.is_null() { + return Ok(()); + } else { + libc::free(e as *mut _); + // TODO: Does "This request does never generate any errors" in manual means `e` is never set, so we would never reach here? + return Err(Error::Generic); + } } } diff --git a/src/server.rs b/src/server.rs index a973ba6ae..74bda41ce 100644 --- a/src/server.rs +++ b/src/server.rs @@ -106,7 +106,10 @@ pub fn new() -> ServerPtr { if !display_service::capture_cursor_embedded() { server.add_service(Box::new(input_service::new_cursor())); server.add_service(Box::new(input_service::new_pos())); - server.add_service(Box::new(input_service::new_window_focus())); + if scrap::is_x11() { + // wayland does not support multiple displays currently + server.add_service(Box::new(input_service::new_window_focus())); + } } } Arc::new(RwLock::new(server))