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.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/platform/linux/api_dispatch.rs b/src/platform/linux/api_dispatch.rs
index 54e0186..3a2a1e8 100644
--- a/src/platform/linux/api_dispatch.rs
+++ b/src/platform/linux/api_dispatch.rs
@@ -21,9 +21,14 @@ use api::x11;
use api::x11::XConnection;
use api::x11::XError;
use api::x11::XNotSupported;
+use std::os::raw::c_ulong;
#[derive(Clone, Default)]
-pub struct PlatformSpecificWindowBuilderAttributes;
+pub struct PlatformSpecificWindowBuilderAttributes {
+ /// Optionally tells the WindowBuilder to re-use an existing X window with
+ /// the given Window id number
+ pub existing_x11_window_id: Option<c_ulong>,
+}
enum Backend {
X(Arc<XConnection>),
@@ -175,7 +180,7 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
impl Window {
#[inline]
pub fn new(window: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&Window>, _: &PlatformSpecificWindowBuilderAttributes)
+ opengl: &GlAttributes<&Window>, platform: &PlatformSpecificWindowBuilderAttributes)
-> Result<Window, CreationError>
{
match *BACKEND {
@@ -194,7 +199,10 @@ impl Window {
_ => panic!() // TODO: return an error
});
- x11::Window::new(connec, window, pf_reqs, &opengl).map(Window::X)
+ match platform.existing_x11_window_id {
+ None => x11::Window::new(connec, window, pf_reqs, &opengl).map(Window::X),
+ Some(window_id) => x11::Window::from_existing_window(connec, window, pf_reqs, &opengl, window_id).map(Window::X),
+ }
},
Backend::Error(ref error) => Err(CreationError::NoBackendAvailable(Box::new(error.clone())))