From 18f9bc44c9c71d6d368a9e9255c1288b85ae509a Mon Sep 17 00:00:00 2001 From: Eduard Bopp Date: Sun, 25 Jan 2015 12:06:50 +0100 Subject: 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. --- src/x11/window/mod.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/x11/window/mod.rs') 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 } -- cgit v1.2.3