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.
This commit is contained in:
Jeremy Huddleston 2009-03-30 20:37:25 -07:00
parent f179a51b55
commit 7a67935b05

View File

@ -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