diff --git a/src/x11/window.rs b/src/x11/window.rs index 5b801ec..ee6a5a3 100644 --- a/src/x11/window.rs +++ b/src/x11/window.rs @@ -1,3 +1,4 @@ +#![allow(deprecated)] use std::cell::Cell; use std::error::Error; use std::ffi::c_void; @@ -52,14 +53,14 @@ impl WindowHandle { } unsafe impl HasRawWindowHandle for WindowHandle { - fn raw_window_handle(&self) -> RawWindowHandle { + fn raw_window_handle(&self) -> Result { if let Some(raw_window_handle) = self.raw_window_handle { if self.is_open.load(Ordering::Relaxed) { - return raw_window_handle; + return Ok(raw_window_handle); } } - RawWindowHandle::Xlib(XlibWindowHandle::empty()) + Ok(RawWindowHandle::Xlib(XlibWindowHandle::new(0))) } } @@ -126,9 +127,9 @@ impl<'a> Window<'a> { B: Send + 'static, { // Convert parent into something that X understands - let parent_id = match parent.raw_window_handle() { + let parent_id = match parent.raw_window_handle().unwrap() { RawWindowHandle::Xlib(h) => h.window as u32, - RawWindowHandle::Xcb(h) => h.window, + RawWindowHandle::Xcb(h) => h.window.into(), h => panic!("unsupported parent handle type {:?}", h), }; @@ -292,7 +293,7 @@ impl<'a> Window<'a> { // the correct dpi scaling. handler.on_event(&mut window, Event::Window(WindowEvent::Resized(window_info))); - let _ = tx.send(Ok(SendableRwh(window.raw_window_handle()))); + let _ = tx.send(Ok(SendableRwh(window.raw_window_handle().unwrap()))); EventLoop::new(inner, handler, parent_handle).run()?; @@ -352,25 +353,22 @@ impl<'a> Window<'a> { } unsafe impl<'a> HasRawWindowHandle for Window<'a> { - fn raw_window_handle(&self) -> RawWindowHandle { - let mut handle = XlibWindowHandle::empty(); + fn raw_window_handle(&self) -> Result { + let mut handle = XlibWindowHandle::new(self.inner.window_id.into()); - handle.window = self.inner.window_id.into(); handle.visual_id = self.inner.visual_id.into(); - RawWindowHandle::Xlib(handle) + Ok(RawWindowHandle::Xlib(handle)) } } unsafe impl<'a> HasRawDisplayHandle for Window<'a> { - fn raw_display_handle(&self) -> RawDisplayHandle { + fn raw_display_handle(&self) -> Result { let display = self.inner.xcb_connection.dpy; - let mut handle = XlibDisplayHandle::empty(); - - handle.display = display as *mut c_void; - handle.screen = unsafe { x11::xlib::XDefaultScreen(display) }; - - RawDisplayHandle::Xlib(handle) + Ok(RawDisplayHandle::Xlib(XlibDisplayHandle::new( + std::ptr::NonNull::new(display as *mut c_void), + unsafe { x11::xlib::XDefaultScreen(display) }, + ))) } }