aboutsummaryrefslogtreecommitdiffstats
path: root/src/x11
diff options
context:
space:
mode:
authorPierre Krieger <pierre.krieger1708@gmail.com>2014-07-28 13:25:28 +0200
committerPierre Krieger <pierre.krieger1708@gmail.com>2014-07-28 13:25:28 +0200
commit433c5b956ee83e2a1c3be67e5333db90c9c3cb8a (patch)
treed52f8fad4e03bb265da799fd0898ea3d2f050cff /src/x11
parent5764b9c243e0c1732fdce186e4de4e34540b95e3 (diff)
downloadglutin-433c5b956ee83e2a1c3be67e5333db90c9c3cb8a.tar.gz
glutin-433c5b956ee83e2a1c3be67e5333db90c9c3cb8a.zip
Implement CursorPositionChanged event for X11
Diffstat (limited to 'src/x11')
-rw-r--r--src/x11/ffi.rs22
-rw-r--r--src/x11/mod.rs8
2 files changed, 28 insertions, 2 deletions
diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs
index 5caabc5..c021867 100644
--- a/src/x11/ffi.rs
+++ b/src/x11/ffi.rs
@@ -18,6 +18,7 @@ pub type GLXPixmap = XID;
pub type GLXWindow = XID;
pub type Pixmap = XID;
pub type Status = libc::c_int; // TODO: not sure
+pub type Time = libc::c_ulong;
pub type Visual = (); // TODO: not sure
pub type VisualID = libc::c_ulong; // TODO: not sure
pub type Window = XID;
@@ -241,7 +242,7 @@ pub struct XClientMessageEvent {
pub l: [libc::c_long, ..5],
}
-#[reprc(C)]
+#[repr(C)]
pub struct XResizeRequestEvent {
pub type_: libc::c_int,
pub serial: libc::c_ulong,
@@ -252,6 +253,25 @@ pub struct XResizeRequestEvent {
pub height: libc::c_int,
}
+#[repr(C)]
+pub struct XMotionEvent {
+ pub type_: libc::c_int,
+ pub serial: libc::c_ulong,
+ pub send_event: Bool,
+ pub display: *mut Display,
+ pub window: Window,
+ pub root: Window,
+ pub subwindow: Window,
+ pub time: Time,
+ pub x: libc::c_int,
+ pub y: libc::c_int,
+ pub x_root: libc::c_int,
+ pub y_root: libc::c_int,
+ pub state: libc::c_uint,
+ pub is_hint: libc::c_char,
+ pub same_screen: Bool,
+}
+
#[link(name = "GL")]
#[link(name = "X11")]
extern "C" {
diff --git a/src/x11/mod.rs b/src/x11/mod.rs
index 3f17ca4..9f773f4 100644
--- a/src/x11/mod.rs
+++ b/src/x11/mod.rs
@@ -61,7 +61,7 @@ impl Window {
let mut swa: ffi::XSetWindowAttributes = unsafe { mem::zeroed() };
swa.colormap = cmap;
swa.event_mask = ffi::ExposureMask | ffi::ResizeRedirectMask |
- ffi::VisibilityChangeMask | ffi::KeyPressMask;
+ ffi::VisibilityChangeMask | ffi::KeyPressMask | ffi::PointerMotionMask;
swa
};
@@ -168,6 +168,12 @@ impl Window {
events.push(SizeChanged(rs_event.width as uint, rs_event.height as uint));
},
+ ffi::MotionNotify => {
+ use CursorPositionChanged;
+ let event: &ffi::XMotionEvent = unsafe { mem::transmute(&xev) };
+ events.push(CursorPositionChanged(event.x as uint, event.y as uint));
+ },
+
_ => ()
}