From 0b6e14d46feaf8c46fd3768ee5353b844391b79b Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 30 Mar 2009 20:37:25 -0700 Subject: [PATCH] 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) --- hw/xquartz/X11Application.m | 26 +++++++++++++++++--------- 1 file 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