rust-windowing/raw-window-handle

Add safe constructors for display and window handles

notgull opened this issue · 3 comments

There are some DisplayHandle and WindowHandle variants that are completely safe to construct. For instance:

  • Most DisplayHandles are just indicators of the currently running display system and don't involve any borrowed state.
  • An [Xlib/Xcb]DisplayHandle with a display of None can be constructed safely.
  • Win32WindowHandle, [Xlib/Xcb]WindowHandle and WASM web handles involve window IDs with no borrowed state.

It should be possible to construct these safely, with constructors on the safe types.

The reason everything in unsafe is forward compat, I guess? Because unsafe -> safe is a breaking change, but not otherwise.

Also, isn't Default basically it?

I was thinking more along these lines:

impl DisplayHandle<'static> {
    pub fn windows() -> Self {
        unsafe { Self::borrow_raw(WindowsDisplayHandle::new().into()) }
    }

    pub fn xlib_no_display() -> Self {
        unsafe { Self::borrow_raw(XlibDisplayHandle::new(None).into()) }
    }
}

Basically, to allow for more ways of creating DisplayHandle and WindowHandle without needing to go through borrow_raw.