xserver: Branch 'xorg-server-1.5-apple'

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Mon Mar 30 20:41:23 PDT 2009


 hw/xquartz/X11Application.m |   26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

New commits:
commit 1063e4a3719962c3d018a540e935c453eddf9ae0
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Mar 30 20:37:25 2009 -0700

    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)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index b82c89f..6a0e011 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


More information about the xorg-commit mailing list