aboutsummaryrefslogtreecommitdiffstats
path: root/src/platform/linux/api_dispatch.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/linux/api_dispatch.rs')
-rw-r--r--src/platform/linux/api_dispatch.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/platform/linux/api_dispatch.rs b/src/platform/linux/api_dispatch.rs
index f25bda9..0fae6a0 100644
--- a/src/platform/linux/api_dispatch.rs
+++ b/src/platform/linux/api_dispatch.rs
@@ -162,9 +162,29 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
impl Window {
pub fn new(builder: BuilderAttribs) -> Result<Window, CreationError> {
+ let window = builder.window;
+ let pf_reqs = builder.pf_reqs;
+ let opengl = builder.opengl;
+
match *BACKEND {
- Backend::Wayland => wayland::Window::new(builder).map(Window::Wayland),
- Backend::X(ref connec) => x11::Window::new(connec, builder).map(Window::X),
+ Backend::Wayland => {
+ let opengl = opengl.map_sharing(|w| match w {
+ &Window::Wayland(ref w) => w,
+ _ => panic!() // TODO: return an error
+ });
+
+ wayland::Window::new(&window, &pf_reqs, &opengl).map(Window::Wayland)
+ },
+
+ Backend::X(ref connec) => {
+ let opengl = opengl.map_sharing(|w| match w {
+ &Window::X(ref w) => w,
+ _ => panic!() // TODO: return an error
+ });
+
+ x11::Window::new(connec, &window, &pf_reqs, &opengl).map(Window::X)
+ },
+
Backend::Error(ref error) => Err(CreationError::NoBackendAvailable(Box::new(error.clone())))
}
}