aboutsummaryrefslogtreecommitdiffstats
path: root/src/os/unix.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix.rs')
-rw-r--r--src/os/unix.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/os/unix.rs b/src/os/unix.rs
new file mode 100644
index 0000000..4fef6ef
--- /dev/null
+++ b/src/os/unix.rs
@@ -0,0 +1,40 @@
+#![cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd"))]
+
+use libc;
+use Window;
+use platform::Window as LinuxWindow;
+
+/// Additional methods on `Window` that are specific to unix.
+pub trait WindowExt {
+ /// Returns a pointer to the `Window` object of xlib that is used by this window.
+ ///
+ /// Returns `None` if the window doesn't use xlib (if it uses wayland for example).
+ ///
+ /// The pointer will become invalid when the glutin `Window` is destroyed.
+ fn get_xlib_window(&self) -> Option<*mut libc::c_void>;
+
+ /// Returns a pointer to the `Display` object of xlib that is used by this window.
+ ///
+ /// Returns `None` if the window doesn't use xlib (if it uses wayland for example).
+ ///
+ /// The pointer will become invalid when the glutin `Window` is destroyed.
+ fn get_xlib_display(&self) -> Option<*mut libc::c_void>;
+}
+
+impl WindowExt for Window {
+ #[inline]
+ fn get_xlib_window(&self) -> Option<*mut libc::c_void> {
+ match self.window {
+ LinuxWindow::X(ref w) => Some(w.get_xlib_window()),
+ _ => None
+ }
+ }
+
+ #[inline]
+ fn get_xlib_display(&self) -> Option<*mut libc::c_void> {
+ match self.window {
+ LinuxWindow::X(ref w) => Some(w.get_xlib_window()),
+ _ => None
+ }
+ }
+}