|Summary:||Getting motion history for a wacom tablet through XGetDeviceMotionEvents returns wrong coords|
|Product:||xorg||Reporter:||Alexia Death <alexiadeath>|
|Component:||Input/other||Assignee:||Peter Hutterer <peter.hutterer>|
|Status:||RESOLVED FIXED||QA Contact:||Xorg Project Team <xorg-team>|
|i915 platform:||i915 features:|
|Bug Depends on:|
Description Alexia Death 2008-12-25 10:44:18 UTC
Output sample from the part of GIMP that deals with input events: Coords: t (630.547256, 528.089939) Coords: (41.946138, -32.116870) Coords: t (630.482724, 528.412602) Coords: (41.946138, -32.116870) Coords: t (629.966463, 528.993394) Coords: (41.946138, -32.116870) Coords: t (628.804878, 530.284045) Coords: (41.881606, -32.052337) Coords: t (627.127033, 532.090955) Coords: (41.817073, -31.987805) Coords: t (625.126524, 534.349593) Coords: (41.688008, -31.858740) Coords: t (625.126524, 534.349593) The events without letter "t" are from history buffer, events with it are straight from device state. The history buffer coords make no sense at all. Gimp gets them through GTK+ but the code in GTK looked fine and worked perfectly with previous X, so I consider it justified to file a bug with you guys :). Personal speculation as to cause - the same as the other bug I filed today, they are evaluated against master devices parameters that are incorrect for the events from the actual tablet device.
Comment 1 Peter Hutterer 2009-01-07 22:47:55 UTC
Created attachment 21789 [details] [review] 0001-Xi-call-CheckMotion-for-floating-SDs-too.patch From my initial testing so far there's two issues (valid for floating slave devices): 1) the event coordinates remain the same. 2) the history buffer is scaled to screen coordinates This patch fixes 1) by calling CheckMotion for floating slave devices to ensure the DIX sprite is updated. Need to look further into 2).
Comment 2 Peter Hutterer 2009-01-08 20:16:06 UTC
Created attachment 21824 [details] [review] 0001-dix-drop-x-y-back-into-last.valuators-before-updati.patch Something like this should do dix: drop x/y back into last.valuators before updating the history (#19285) positionSprite needs to scale to screen coordinates and in the process of doing so alters dev->last.valuators[0:1]. Drop the real coordinates back after finishing and before updating the motion history. This way, we don't push the screen coordinates into the motion history.
Comment 3 Alexia Death 2009-01-10 06:48:55 UTC
With these two patches the issue is corrected for me. Thanks :D.
Comment 4 Alexia Death 2009-01-10 06:49:45 UTC
ps: tested by applying to Jaunty's xsever-xorg source package.
Comment 5 Peter Hutterer 2009-01-11 17:48:14 UTC
Pushed as 9bf77569cc8f9b0cc25c99487672d375d7c32f99 and 56efbc0986e782da45addb05ece9f456d41d7a90. Thanks for testing.
Comment 6 Keith Packard 2009-01-12 10:49:12 UTC
Fixed in 6be355b8e8cabeb5832ce9970a83782ea46fd4d1