Skip to content

Commit

Permalink
Use xcb rather than xlib for raw-window-handle
Browse files Browse the repository at this point in the history
This fixes the segfaults on close with wgpu.
  • Loading branch information
robbert-vdh committed Oct 1, 2023
1 parent 0df4348 commit f3e23cf
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions src/x11/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use std::thread;
use std::time::*;

use raw_window_handle::{
HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, XlibDisplayHandle,
XlibWindowHandle,
HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, XcbDisplayHandle,
XcbWindowHandle, XlibDisplayHandle, XlibWindowHandle,
};
use xcb::ffi::xcb_screen_t;
use xcb::StructPtr;
Expand Down Expand Up @@ -686,24 +686,25 @@ impl Window {

unsafe impl HasRawWindowHandle for Window {
fn raw_window_handle(&self) -> RawWindowHandle {
let mut handle = XlibWindowHandle::empty();
let mut handle = XcbWindowHandle::empty();

handle.window = self.window_id.into();
handle.visual_id = self.visual_id.into();
handle.window = self.window_id;
handle.visual_id = self.visual_id;

RawWindowHandle::Xlib(handle)
RawWindowHandle::Xcb(handle)
}
}

unsafe impl HasRawDisplayHandle for Window {
fn raw_display_handle(&self) -> RawDisplayHandle {
let conn = self.xcb_connection.conn.get_raw_conn();
let display = self.xcb_connection.conn.get_raw_dpy();
let mut handle = XlibDisplayHandle::empty();
let mut handle = XcbDisplayHandle::empty();

handle.display = display as *mut c_void;
handle.connection = conn as *mut c_void;
handle.screen = unsafe { x11::xlib::XDefaultScreen(display) };

RawDisplayHandle::Xlib(handle)
RawDisplayHandle::Xcb(handle)
}
}

Expand Down

0 comments on commit f3e23cf

Please sign in to comment.