diff options
author | Eduard Bopp <eduard.bopp@aepsil0n.de> | 2015-01-25 12:06:50 +0100 |
---|---|---|
committer | Eduard Bopp <eduard.bopp@aepsil0n.de> | 2015-03-25 13:10:55 +0100 |
commit | 18f9bc44c9c71d6d368a9e9255c1288b85ae509a (patch) | |
tree | d12e82662ab3ceeabdc689a6c13eea180e7de384 /src/x11/window/mod.rs | |
parent | 63d2cd263ee3e68118213ae5b8ba1326fc3ee03e (diff) | |
download | glutin-18f9bc44c9c71d6d368a9e9255c1288b85ae509a.tar.gz glutin-18f9bc44c9c71d6d368a9e9255c1288b85ae509a.zip |
Implement grabbing of the mouse pointer for X11
Contains new methods in the Window API that closely mirror the Xlib API. The
methods are left unimplemented for other platforms for now.
Diffstat (limited to 'src/x11/window/mod.rs')
-rw-r--r-- | src/x11/window/mod.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/x11/window/mod.rs b/src/x11/window/mod.rs index 385a913..d576150 100644 --- a/src/x11/window/mod.rs +++ b/src/x11/window/mod.rs @@ -782,6 +782,33 @@ impl Window { } } + pub fn grab_cursor(&self) -> Result<(), String> { + unsafe { + match ffi::XGrabPointer( + self.x.display, self.x.window, false, + ffi::ButtonPressMask | ffi::ButtonReleaseMask | ffi::EnterWindowMask | + ffi::LeaveWindowMask | ffi::PointerMotionMask | ffi::PointerMotionHintMask | + ffi::Button1MotionMask | ffi::Button2MotionMask | ffi::Button3MotionMask | + ffi::Button4MotionMask | ffi::Button5MotionMask | ffi::ButtonMotionMask | + ffi::KeymapStateMask, + ffi::GrabModeAsync, ffi::GrabModeAsync, + self.x.window, 0, ffi::CurrentTime + ) { + ffi::GrabSuccess => Ok(()), + ffi::AlreadyGrabbed | ffi::GrabInvalidTime | + ffi::GrabNotViewable | ffi::GrabFrozen + => Err("cursor could not be grabbed".to_string()), + _ => unreachable!(), + } + } + } + + pub fn ungrab_cursor(&self) { + unsafe { + ffi::XUngrabPointer(self.x.display, ffi::CurrentTime); + } + } + pub fn hidpi_factor(&self) -> f32 { 1.0 } |