summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2009-08-01 02:32:52 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2009-08-05 16:17:09 -0700
commitdf6c01352471c766e9f71ceac03cab8c3911faa1 (patch)
treec5bf08036d2f2b6902121b0eb4499f2d9accd329
parente360104880e6e2e666aa05dfd56e2ef3880f38ef (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.m17
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 */