diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-03-30 20:37:25 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-03-30 20:41:38 -0700 |
commit | 0b6e14d46feaf8c46fd3768ee5353b844391b79b (patch) | |
tree | ab57358766e5e6ae06149e26849144079a79b2d5 /hw/xquartz/X11Application.m | |
parent | c74220b853cd99d03e33cc62d32431ca3a879483 (diff) |
XQuartz: Fix mouse tracking for quake, et. al. in wine
Patch courtesy of Codeweavers
Fix mouse movement tracking. For a non-window-related mouse-move event,
calculate the new position by adding the event's delta-x and delta-y values
to the previous mouse position. Do not rely on the current mouse position
because it may have been changed by a XWarpPointer call.
(cherry picked from commit 7a67935b05a475215b9bdbb959e4f7e15f32416f)
Diffstat (limited to 'hw/xquartz/X11Application.m')
-rw-r--r-- | hw/xquartz/X11Application.m | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index b82c89ff2..6a0e011c7 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -961,26 +961,34 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe DeviceIntPtr pDev; int modifierFlags; + static NSPoint lastpt; + /* convert location to be relative to top-left of primary display */ - location = [e locationInWindow]; window = [e window]; - screen = [[[NSScreen screens] objectAtIndex:0] frame]; if (window != nil) { NSRect frame = [window frame]; - pointer_x = location.x + frame.origin.x; - pointer_y = (screen.origin.y + screen.size.height) - - (location.y + frame.origin.y); + location = [e locationInWindow]; + location.x += frame.origin.x; + location.y += frame.origin.y; + lastpt = location; } else { - pointer_x = location.x; - pointer_y = (screen.origin.y + screen.size.height) - location.y; + location.x = lastpt.x + [e deltaX]; + location.y = lastpt.y - [e deltaY]; + lastpt = [NSEvent mouseLocation]; } - + + /* Convert coordinate system */ + screen = [[[NSScreen screens] objectAtIndex:0] frame]; + location.y = (screen.origin.y + screen.size.height) - location.y; + /* Setup our valuators. These will range from 0 to 1 */ pressure = 0; tilt_x = 0; tilt_y = 0; - + pointer_x = location.x; + pointer_y = location.y; + modifierFlags = [e modifierFlags]; #ifdef NX_DEVICELCMDKEYMASK |