summaryrefslogtreecommitdiff
path: root/hw/xquartz/X11Application.m
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2009-03-30 20:37:25 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2009-03-30 20:41:38 -0700
commit0b6e14d46feaf8c46fd3768ee5353b844391b79b (patch)
treeab57358766e5e6ae06149e26849144079a79b2d5 /hw/xquartz/X11Application.m
parentc74220b853cd99d03e33cc62d32431ca3a879483 (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.m26
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