aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/api/x11/input.rs16
-rw-r--r--src/api/x11/window.rs3
2 files changed, 15 insertions, 4 deletions
diff --git a/src/api/x11/input.rs b/src/api/x11/input.rs
index 131f080..2448c08 100644
--- a/src/api/x11/input.rs
+++ b/src/api/x11/input.rs
@@ -75,7 +75,7 @@ impl XInputEventHandler {
// Button clicks and mouse events are handled via XInput
// events. Key presses are still handled via plain core
// X11 events.
- let mut mask: [libc::c_uchar; 1] = [0];
+ let mut mask: [libc::c_uchar; 2] = [0, 0];
let mut input_event_mask = ffi::XIEventMask {
deviceid: ffi::XIAllDevices,
mask_len: mask.len() as i32,
@@ -84,7 +84,9 @@ impl XInputEventHandler {
let events = &[
ffi::XI_ButtonPress,
ffi::XI_ButtonRelease,
- ffi::XI_Motion
+ ffi::XI_Motion,
+ ffi::XI_Enter,
+ ffi::XI_Leave
];
for event in events {
ffi::XISetMask(&mut mask, *event);
@@ -224,6 +226,16 @@ impl XInputEventHandler {
}
}
},
+ ffi::XI_Enter => {
+ // axis movements whilst the cursor is outside the window
+ // will alter the absolute value of the axes. We only want to
+ // report changes in the axis value whilst the cursor is above
+ // our window however, so clear the previous axis state whenever
+ // the cursor re-enters the window
+ self.current_state.axis_values.clear();
+ None
+ },
+ ffi::XI_Leave => None,
_ => None
}
}
diff --git a/src/api/x11/window.rs b/src/api/x11/window.rs
index b430ec9..9a01e17 100644
--- a/src/api/x11/window.rs
+++ b/src/api/x11/window.rs
@@ -7,7 +7,6 @@ use std::{mem, ptr};
use std::cell::Cell;
use std::sync::atomic::AtomicBool;
use std::collections::VecDeque;
-use std::slice::from_raw_parts;
use std::sync::{Arc, Mutex};
use Api;
@@ -23,7 +22,7 @@ use api::egl::Context as EglContext;
use platform::MonitorID as PlatformMonitorID;
use super::input::XInputEventHandler;
-use super::{events, ffi};
+use super::{ffi};
use super::{MonitorID, XConnection};
// XOpenIM doesn't seem to be thread-safe