Change the RegisterClass code.

Prevents an issue when creating multiple contexts.
This commit is contained in:
Tomaka17 2014-08-01 23:12:46 +02:00
parent d93cea808d
commit c1ecc06baf

View file

@ -31,30 +31,33 @@ pub fn new_window(dimensions: Option<(uint, uint)>, title: &str,
// This is the only safe method. Using `nosend` wouldn't work for non-native runtime. // This is the only safe method. Using `nosend` wouldn't work for non-native runtime.
TaskBuilder::new().native().spawn(proc() { TaskBuilder::new().native().spawn(proc() {
// registering the window class // registering the window class
let class_name: Vec<u16> = "Window Class".utf16_units().collect::<Vec<u16>>() let class_name = {
.append_one(0); let class_name: Vec<u16> = "Window Class".utf16_units().collect::<Vec<u16>>()
.append_one(0);
let class = ffi::WNDCLASSEX {
cbSize: mem::size_of::<ffi::WNDCLASSEX>() as ffi::UINT, let class = ffi::WNDCLASSEX {
style: ffi::CS_HREDRAW | ffi::CS_VREDRAW, cbSize: mem::size_of::<ffi::WNDCLASSEX>() as ffi::UINT,
lpfnWndProc: callback, style: ffi::CS_HREDRAW | ffi::CS_VREDRAW,
cbClsExtra: 0, lpfnWndProc: callback,
cbWndExtra: 0, cbClsExtra: 0,
hInstance: unsafe { ffi::GetModuleHandleW(ptr::null()) }, cbWndExtra: 0,
hIcon: ptr::mut_null(), hInstance: unsafe { ffi::GetModuleHandleW(ptr::null()) },
hCursor: ptr::mut_null(), hIcon: ptr::mut_null(),
hbrBackground: ptr::mut_null(), hCursor: ptr::mut_null(),
lpszMenuName: ptr::null(), hbrBackground: ptr::mut_null(),
lpszClassName: class_name.as_ptr(), lpszMenuName: ptr::null(),
hIconSm: ptr::mut_null(), lpszClassName: class_name.as_ptr(),
}; hIconSm: ptr::mut_null(),
};
if unsafe { ffi::RegisterClassExW(&class) } == 0 { // We ignore errors because registering the same window class twice would trigger
use std::os; // an error, and because errors here are detected during CreateWindowEx anyway.
tx.send(Err(format!("RegisterClassEx function failed: {}", // Also since there is no weird element in the struct, there is no reason for this
os::error_string(os::errno() as uint)))); // call to fail.
return; unsafe { ffi::RegisterClassExW(&class) };
}
class_name
};
// building a RECT object with coordinates // building a RECT object with coordinates
let mut rect = ffi::RECT { let mut rect = ffi::RECT {