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

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Sat Aug 1 02:33:26 PDT 2009


 hw/xquartz/X11Application.m |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

New commits:
commit 6c5bf756a7f5389cdfe2e43a339d7c31a3e522e9
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 02:32:52 2009 -0700

    XQuartz: Don't use location delta for tablets since NSEvent does not give a precise delta.

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 7eadc48..9d6ee71 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -997,22 +997,37 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     float pressure;
     DeviceIntPtr pDev;
     int modifierFlags;
+    BOOL isTabletEvent;
 
     static NSPoint lastpt;
 
     /* convert location to be relative to top-left of primary display */
     window = [e window];
 
+    isTabletEvent = ([e type] == NSTabletPoint) || 
+                    (( [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
+                       [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
+                       [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
+                       [e type] == NSMouseMoved ) && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
+    
     if (window != nil)	{
         NSRect frame = [window frame];
         location = [e locationInWindow];
         location.x += frame.origin.x;
         location.y += frame.origin.y;
         lastpt = location;
+    } else if(isTabletEvent) {
+        // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
+        // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
+        // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
+        // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
+        // http://xquartz.macosforge.org/trac/ticket/288
+        location = [e locationInWindow];
+        lastpt = location;
     } else {
         location.x = lastpt.x + [e deltaX];
         location.y = lastpt.y - [e deltaY];
-        lastpt = [NSEvent mouseLocation];
+        lastpt = [e locationInWindow];
     }
     
     /* Convert coordinate system */


More information about the xorg-commit mailing list