mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-24 06:11:30 +11:00
Merge pull request #178 from tomaka/update-rustc
Update for changes in Send/Sync traits
This commit is contained in:
commit
32faad403b
|
@ -38,9 +38,9 @@ git = "https://github.com/servo/rust-core-graphics"
|
|||
git = "https://github.com/servo/rust-core-graphics"
|
||||
|
||||
[target.i686-pc-windows-gnu.dependencies.winapi]
|
||||
version = "^0.0.2"
|
||||
version = "^0.0.3"
|
||||
features = ["gdi32", "kernel32", "user32"]
|
||||
|
||||
[target.x86_64-pc-windows-gnu.dependencies.winapi]
|
||||
version = "^0.0.2"
|
||||
version = "^0.0.3"
|
||||
features = ["gdi32", "kernel32", "user32"]
|
||||
|
|
|
@ -60,6 +60,11 @@ impl HeadlessContext {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "headless")]
|
||||
unsafe impl Send for HeadlessContext {}
|
||||
#[cfg(feature = "headless")]
|
||||
unsafe impl Sync for HeadlessContext {}
|
||||
|
||||
impl Window {
|
||||
pub fn new(builder: WindowBuilder) -> Result<Window, CreationError> {
|
||||
use std::{mem, ptr};
|
||||
|
@ -275,6 +280,9 @@ impl Window {
|
|||
}
|
||||
}
|
||||
|
||||
unsafe impl Send for Window {}
|
||||
unsafe impl Sync for Window {}
|
||||
|
||||
#[cfg(feature = "window")]
|
||||
#[deriving(Clone)]
|
||||
pub struct WindowProxy;
|
||||
|
|
|
@ -99,6 +99,9 @@ impl HeadlessContext {
|
|||
}
|
||||
}
|
||||
|
||||
unsafe impl Send for HeadlessContext {}
|
||||
unsafe impl Sync for HeadlessContext {}
|
||||
|
||||
impl Drop for HeadlessContext {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
|
|
|
@ -72,6 +72,11 @@ impl Window {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "window")]
|
||||
unsafe impl Send for Window {}
|
||||
#[cfg(feature = "window")]
|
||||
unsafe impl Sync for Window {}
|
||||
|
||||
#[cfg(feature = "window")]
|
||||
#[deriving(Clone)]
|
||||
pub struct WindowProxy;
|
||||
|
|
|
@ -18,11 +18,15 @@ use winapi;
|
|||
/// receive an event for another window.
|
||||
thread_local!(static WINDOW: Rc<RefCell<Option<(winapi::HWND, Sender<Event>)>>> = Rc::new(RefCell::new(None)));
|
||||
|
||||
/// Work-around the fact that HGLRC doesn't implement Send
|
||||
pub struct ContextHack(pub winapi::HGLRC);
|
||||
unsafe impl Send for ContextHack {}
|
||||
|
||||
pub fn new_window(builder_dimensions: Option<(uint, uint)>, builder_title: String,
|
||||
builder_monitor: Option<super::MonitorID>,
|
||||
builder_gl_version: Option<(uint, uint)>, builder_debug: bool,
|
||||
builder_vsync: bool, builder_hidden: bool,
|
||||
builder_sharelists: Option<winapi::HGLRC>, builder_multisampling: Option<u16>)
|
||||
builder_sharelists: Option<ContextHack>, builder_multisampling: Option<u16>)
|
||||
-> Result<Window, CreationError>
|
||||
{
|
||||
use std::mem;
|
||||
|
@ -38,6 +42,8 @@ pub fn new_window(builder_dimensions: Option<(uint, uint)>, builder_title: Strin
|
|||
// so we create a new thread dedicated to this window.
|
||||
// This is the only safe method. Using `nosend` wouldn't work for non-native runtime.
|
||||
::std::thread::Thread::spawn(move || {
|
||||
let builder_sharelists = builder_sharelists.map(|s| s.0);
|
||||
|
||||
// registering the window class
|
||||
let class_name = {
|
||||
let class_name: Vec<u16> = "Window Class".utf16_units().chain(Some(0).into_iter())
|
||||
|
|
|
@ -51,6 +51,11 @@ impl HeadlessContext {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "headless")]
|
||||
unsafe impl Send for HeadlessContext {}
|
||||
#[cfg(feature = "headless")]
|
||||
unsafe impl Sync for HeadlessContext {}
|
||||
|
||||
/// The Win32 implementation of the main `Window` object.
|
||||
pub struct Window {
|
||||
/// Main handle for the window.
|
||||
|
@ -75,6 +80,9 @@ pub struct Window {
|
|||
is_closed: AtomicBool,
|
||||
}
|
||||
|
||||
unsafe impl Send for Window {}
|
||||
unsafe impl Sync for Window {}
|
||||
|
||||
#[cfg(feature = "window")]
|
||||
impl Window {
|
||||
/// See the docs in the crate root file.
|
||||
|
@ -82,7 +90,8 @@ impl Window {
|
|||
let WindowBuilder { dimensions, title, monitor, gl_version,
|
||||
gl_debug, vsync, visible, sharing, multisampling } = builder;
|
||||
init::new_window(dimensions, title, monitor, gl_version, gl_debug, vsync,
|
||||
!visible, sharing.map(|w| w.window.context), multisampling)
|
||||
!visible, sharing.map(|w| init::ContextHack(w.window.context)),
|
||||
multisampling)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,3 +62,6 @@ impl Drop for HeadlessContext {
|
|||
unsafe { ffi::OSMesaDestroyContext(self.context) }
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl Send for HeadlessContext {}
|
||||
unsafe impl Sync for HeadlessContext {}
|
||||
|
|
|
@ -34,6 +34,9 @@ struct XWindow {
|
|||
im: ffi::XIM,
|
||||
}
|
||||
|
||||
unsafe impl Send for Window {}
|
||||
unsafe impl Sync for Window {}
|
||||
|
||||
impl Drop for XWindow {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
|
|
Loading…
Reference in a new issue