Merge branch 'master' of https://github.com/RustAudio/baseview into master
This commit is contained in:
commit
0ddc2c5f3f
|
@ -1,4 +1,6 @@
|
||||||
use std::os::raw::{c_ulong, c_void};
|
use std::os::raw::{c_ulong, c_void};
|
||||||
|
use std::sync::mpsc;
|
||||||
|
use std::time::*;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::*;
|
use std::time::*;
|
||||||
|
|
||||||
|
@ -30,16 +32,27 @@ impl WindowHandle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WindowOpenResult = Result<(), ()>;
|
||||||
|
|
||||||
impl Window {
|
impl Window {
|
||||||
pub fn open<H: WindowHandler>(options: WindowOpenOptions) -> WindowHandle {
|
pub fn open<H: WindowHandler>(options: WindowOpenOptions) -> WindowHandle {
|
||||||
|
let (tx, rx) = mpsc::sync_channel::<WindowOpenResult>(1);
|
||||||
|
|
||||||
|
let thread = thread::spawn(move || {
|
||||||
|
if let Err(e) = Self::window_thread::<H>(options, tx.clone()) {
|
||||||
|
let _ = tx.send(Err(e));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// FIXME: placeholder types for returning errors in the future
|
||||||
|
let _ = rx.recv();
|
||||||
|
|
||||||
WindowHandle {
|
WindowHandle {
|
||||||
thread: thread::spawn(move || {
|
thread
|
||||||
Self::window_thread::<H>(options);
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn window_thread<H: WindowHandler>(options: WindowOpenOptions) {
|
fn window_thread<H: WindowHandler>(options: WindowOpenOptions, tx: mpsc::SyncSender<WindowOpenResult>) -> WindowOpenResult {
|
||||||
// Connect to the X server
|
// Connect to the X server
|
||||||
// FIXME: baseview error type instead of unwrap()
|
// FIXME: baseview error type instead of unwrap()
|
||||||
let xcb_connection = XcbConnection::new().unwrap();
|
let xcb_connection = XcbConnection::new().unwrap();
|
||||||
|
@ -142,7 +155,10 @@ impl Window {
|
||||||
|
|
||||||
let mut handler = H::build(&mut window);
|
let mut handler = H::build(&mut window);
|
||||||
|
|
||||||
|
let _ = tx.send(Ok(()));
|
||||||
|
|
||||||
window.run_event_loop(&mut handler);
|
window.run_event_loop(&mut handler);
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -229,7 +245,7 @@ impl Window {
|
||||||
xcb::CLIENT_MESSAGE => {
|
xcb::CLIENT_MESSAGE => {
|
||||||
let event = unsafe { xcb::cast_event::<xcb::ClientMessageEvent>(&event) };
|
let event = unsafe { xcb::cast_event::<xcb::ClientMessageEvent>(&event) };
|
||||||
|
|
||||||
// what an absolute trajedy this all is
|
// what an absolute tragedy this all is
|
||||||
let data = event.data().data;
|
let data = event.data().data;
|
||||||
let (_, data32, _) = unsafe { data.align_to::<u32>() };
|
let (_, data32, _) = unsafe { data.align_to::<u32>() };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue