diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-08-01 02:32:52 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2009-08-05 16:16:22 -0700 |
commit | 6a2c4d5959e29f140884bb42c907cade45bb8d9f (patch) | |
tree | eb843549fa9f9e274ee88a4c3c93798a80d659fd | |
parent | f99b27bc6e98b54e4ebdfa53ec5a8297fc879272 (diff) |
XQuartz: Don't use location delta for tablets since NSEvent does not give a precise delta.
(cherry picked from commit 6c5bf756a7f5389cdfe2e43a339d7c31a3e522e9)
-rw-r--r-- | hw/xquartz/X11Application.m | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 7eadc482b..9d6ee71a5 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 */ |