diff --git a/src/sdl2/raw_window_handle.rs b/src/sdl2/raw_window_handle.rs index 23406a82..0aa6f177 100644 --- a/src/sdl2/raw_window_handle.rs +++ b/src/sdl2/raw_window_handle.rs @@ -7,10 +7,17 @@ unsafe impl HasRawWindowHandle for Window { fn raw_window_handle(&self) -> RawWindowHandle { use self::SDL_SYSWM_TYPE::*; let mut wm_info = SDL_SysWMinfo::default(); + // Make certain to retrieve version before querying `SDL_GetWindowWMInfo` // as that gives an error on certain systems - unsafe { sys::SDL_GetVersion(&mut wm_info.version) } - if unsafe { sys::SDL_GetWindowWMInfo(self.raw(), &mut wm_info) } == SDL_bool::SDL_FALSE { + #[cfg(not(target_os = "macos"))] + unsafe { + let mut version: sys::SDL_version = std::mem::zeroed(); + sys::SDL_GetVersion(&mut version); + wm_info.version = version.into(); + } + + if unsafe { SDL_GetWindowWMInfo(self.raw(), &mut wm_info) } == SDL_bool::SDL_FALSE { panic!("Couldn't get SDL window info: {}", crate::get_error()); } match wm_info.subsystem { @@ -87,10 +94,6 @@ extern "C" { fn SDL_GetWindowWMInfo(window: *mut SDL_Window, info: *mut SDL_SysWMinfo) -> SDL_bool; } -extern "C" { - pub fn SDL_GetVersion(version: *mut SDL_version); -} - #[repr(u32)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] @@ -109,6 +112,16 @@ pub struct SDL_version { pub patch: u8, } +impl Into for sys::SDL_version { + fn into(self) -> SDL_version { + SDL_version { + major: self.major, + minor: self.minor, + patch: self.patch + } + } +} + #[repr(u32)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] #[allow(non_camel_case_types, dead_code)]